レプリケーション設定

--------------------ファイルコピーによる方法--------------------

(12cR1)
--非同期フィジカル・スタンバイ

--前提
プライマリ:インストールとDB作成を実施
セカンダリ:インストールを実施

--1.強制ロギングの有効化[プライマリで実施]
select force_logging FROM v$database;
ALTER DATABASE FORCE LOGGING;

--2.スタンバイREDOログ作成[プライマリで実施]
SELECT group#,type,member FROM v$logfile;
SELECT group#,bytes/1048576 "SIZE(MB)" FROM v$log;
SELECT group#,bytes/1048576 "SIZE(MB)" FROM v$standby_log;

ALTER DATABASE ADD standby logfile
group 4 ('/u01/app/oracle/oradata/orcl/stredo01.log') SIZE 100M,
group 5 ('/u01/app/oracle/oradata/orcl/stredo02.log') SIZE 100M,
group 6 ('/u01/app/oracle/oradata/orcl/stredo03.log') SIZE 100M,
group 7 ('/u01/app/oracle/oradata/orcl/stredo04.log') SIZE 100M;

--3.初期化パラメータの設定[プライマリで実施]
mkdir -p /u01/app/oracle/oradata/orcl/arc


*.db_domain='example.com'
*.memory_target=800M
DB_NAME=orcl
DB_UNIQUE_NAME=orcl
LOG_ARCHIVE_CONFIG='DG_CONFIG=(orcl,stb)'
CONTROL_FILES='/u01/app/oracle/oradata/orcl/control01.ctl', '/u01/app/oracle/oradata/orcl/control02.ctl'
LOG_ARCHIVE_DEST_1='LOCATION=/u01/app/oracle/oradata/orcl/arc VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl'
LOG_ARCHIVE_DEST_2='SERVICE=stb ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=stb'
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
FAL_SERVER=stb
DB_FILE_NAME_CONVERT='/orcl/','/orcl/'
LOG_FILE_NAME_CONVERT='/orcl/','/orcl/'
STANDBY_FILE_MANAGEMENT=AUTO


--4.アーカイブの有効化[プライマリで実施]

shutdown immediate;
startup mount
alter database archivelog;
alter database open;
archive log list

 

--5.プライマリ・データベース・データファイルのバックアップ・コピーの作成[プライマリで実施]

shutdown immediate;

cd /u01/app/oracle/oradata
tar cvzf orcl.tgz orcl

--6.スタンバイ・データベース用の制御ファイルの作成[プライマリで実施]

ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/tmp/stb.ctl';

--7.スタンバイ・データベース用のパラメータ・ファイルの作成[プライマリで実施]

CREATE PFILE='/tmp/initstb.ora' FROM SPFILE;

vim initstb.ora

*.CONTROL_FILES='/u01/app/oracle/oradata/orcl/control01.ctl','/u01/app/oracle/oradata/orcl/control02.ctl'
*.db_domain='example.com'
*.DB_FILE_NAME_CONVERT='/orcl/','/orcl/'
*.DB_NAME='orcl'
*.DB_UNIQUE_NAME='stb'
*.FAL_SERVER='orcl'
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(orcl,stb)'
*.LOG_ARCHIVE_DEST_1='LOCATION=/u01/app/oracle/oradata/orcl/arc VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=stb'
*.LOG_ARCHIVE_DEST_2='SERVICE=orcl ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl'
*.LOG_ARCHIVE_FORMAT='%t_%s_%r.arc'
*.LOG_FILE_NAME_CONVERT='/orcl/','/orcl/'
*.memory_target=800M
*.REMOTE_LOGIN_PASSWORDFILE='EXCLUSIVE'
*.STANDBY_FILE_MANAGEMENT='AUTO'


--8.プライマリ・システムからスタンバイ・システムへのファイルのコピー[プライマリで実施]

scp /u01/app/oracle/oradata/orcl.tgz mmm053:/tmp
scp /tmp/stb.ctl mmm053:/tmp
scp /tmp/initstb.ora mmm053:/tmp


--9.スタンバイ・データベースをサポートする環境の設定


--パスワードファイル[プライマリで作成し、スタンバイへコピーする]

cd $ORACLE_HOME/dbs

orapwd file=orapworcl password=oracle

--12cR2以降の場合
--orapwd file=orapworcl password=oracle format=12

scp orapworcl mmm053:/tmp

--スタンバイで実施
mv /tmp/orapworcl $ORACLE_HOME/dbs/orapwstb


--リスナー

[プライマリで実施]
vim listener.ora

LISTENER =
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(HOST=mmm052)(PORT=1521))
)

SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(GLOBAL_DBNAME=orcl.example.com)
(SID_NAME=orcl)
(ORACLE_HOME=/u01/app/oracle/product/12.1.0/dbhome_1)
)
)

lsnrctl start listener
[スタンバイで実施]
vim listener.ora

LISTENER =
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(HOST=mmm053)(PORT=1521))
)

SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(GLOBAL_DBNAME=stb.example.com)
(SID_NAME=stb)
(ORACLE_HOME=/u01/app/oracle/product/12.1.0/dbhome_1)
)
)

lsnrctl start listener

--Oracle Netネット・サービス
[プライマリとスタンバイで実施]

vim tnsnames.ora

orcl=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST=mmm052)(PORT=1521))
(CONNECT_DATA=
(SERVICE_NAME=orcl.example.com)))

stb=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST=mmm053)(PORT=1521))
(CONNECT_DATA=
(SERVICE_NAME=stb.example.com)))

 

--10.フィジカル・スタンバイ・データベースの起動[スタンバイで実施]

8.でコピーしたファイルをスタンバイに展開する。制御ファイルはスタンバイ制御ファイルで置き換える

cd /tmp

mv orcl.tgz /u01/app/oracle/oradata/
cd /u01/app/oracle/oradata/
tar xvzf orcl.tgz
cd orcl

mv /tmp/stb.ctl .
rm -i control01.ctl control02.ctl
mv stb.ctl control01.ctl
cp -a control01.ctl control02.ctl

cd $ORACLE_HOME/dbs
mv /tmp/initstb.ora .

create spfile from pfile;

STARTUP MOUNT;

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

SELECT CLIENT_PROCESS, PROCESS, THREAD#, SEQUENCE#, STATUS FROM V$MANAGED_STANDBY WHERE CLIENT_PROCESS='LGWR' OR PROCESS='MRP0';

 

SELECT SEQUENCE#,DEST_ID,STANDBY_DEST,ARCHIVED,APPLIED,DELETED,STATUS,COMPLETION_TIME,CREATOR,REGISTRAR
FROM V$ARCHIVED_LOG
ORDER BY SEQUENCE#,DEST_ID
;

 

(21c)
--非同期フィジカル・スタンバイ

--前提
プライマリ:インストールとDB作成を実施
セカンダリ:インストールを実施
※RMANによる方法ではなぜかredoログとスタンバイログが作成できないため、ファイルコピーで実施


--1.強制ロギングの有効化[プライマリで実施]
select force_logging FROM v$database;
ALTER DATABASE FORCE LOGGING;

--2.スタンバイREDOログ作成[プライマリで実施]
SELECT group#,type,member FROM v$logfile;
SELECT group#,bytes/1048576 "SIZE(MB)" FROM v$log;
SELECT group#,bytes/1048576 "SIZE(MB)" FROM v$standby_log;

ALTER DATABASE ADD standby logfile
group 4 ('/u01/app/oracle/oradata/orcl/stredo01.log') SIZE 100M,
group 5 ('/u01/app/oracle/oradata/orcl/stredo02.log') SIZE 100M,
group 6 ('/u01/app/oracle/oradata/orcl/stredo03.log') SIZE 100M,
group 7 ('/u01/app/oracle/oradata/orcl/stredo04.log') SIZE 100M;

--3.初期化パラメータの設定[プライマリで実施]
mkdir -p /u01/app/oracle/oradata/orcl/arc


rm -i $(orabaseconfig)/dbs/spfileorcl.ora
vim $(orabaseconfig)/dbs/initorcl.ora

*.db_domain='example.com'
*.memory_target=1G
DB_NAME=orcl
DB_UNIQUE_NAME=orcl
LOG_ARCHIVE_CONFIG='DG_CONFIG=(orcl,stb)'
CONTROL_FILES='/u01/app/oracle/oradata/orcl/control01.ctl', '/u01/app/oracle/oradata/orcl/control02.ctl'
LOG_ARCHIVE_DEST_1='LOCATION=/u01/app/oracle/oradata/orcl/arc VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl'
LOG_ARCHIVE_DEST_2='SERVICE=stb ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)  DB_UNIQUE_NAME=stb'
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
FAL_SERVER=stb
DB_FILE_NAME_CONVERT='/orcl/','/orcl/'
LOG_FILE_NAME_CONVERT='/orcl/','/orcl/' 
STANDBY_FILE_MANAGEMENT=AUTO
*.local_listener='LISTENER_ORCL'
ENABLE_PLUGGABLE_DATABASE=true

shutdown immediate;
create spfile from pfile;
startup


--4.アーカイブの有効化[プライマリで実施]

shutdown immediate;
startup mount
alter database archivelog;
alter database open;
archive log list


--5.プライマリ・データベース・データファイルのバックアップ・コピーの作成[プライマリで実施]

shutdown immediate;

cd /u01/app/oracle/oradata
tar cvzf orcl.tgz orcl

--6.スタンバイ・データベース用の制御ファイルの作成[プライマリで実施]

startup;

ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/tmp/stb.ctl';

 

--7.スタンバイ・データベース用のパラメータ・ファイルの作成[プライマリで実施]

CREATE PFILE='/tmp/initstb.ora' FROM SPFILE;

vim /tmp/initstb.ora

*.CONTROL_FILES='/u01/app/oracle/oradata/orcl/control01.ctl','/u01/app/oracle/oradata/orcl/control02.ctl'
*.db_domain='example.com'
*.DB_FILE_NAME_CONVERT='/orcl/','/orcl/'
*.DB_NAME='orcl'
*.DB_UNIQUE_NAME='stb'
*.ENABLE_PLUGGABLE_DATABASE=true
*.FAL_SERVER='orcl'
*.local_listener='LISTENER_STB'
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(orcl,stb)'
*.LOG_ARCHIVE_DEST_1='LOCATION=/u01/app/oracle/oradata/orcl/arc VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=stb'
*.LOG_ARCHIVE_DEST_2='SERVICE=orcl ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)  DB_UNIQUE_NAME=orcl'
*.LOG_ARCHIVE_FORMAT='%t_%s_%r.arc'
*.LOG_FILE_NAME_CONVERT='/orcl/','/orcl/'
*.memory_target=1G
*.REMOTE_LOGIN_PASSWORDFILE='EXCLUSIVE'
*.STANDBY_FILE_MANAGEMENT='AUTO'

--8.プライマリ・システムからスタンバイ・システムへのファイルのコピー[プライマリで実施]


scp /u01/app/oracle/oradata/orcl.tgz mmm092:/tmp
scp /tmp/stb.ctl mmm092:/tmp
scp /tmp/initstb.ora mmm092:/tmp


--9.スタンバイ・データベースをサポートする環境の設定


--パスワードファイル[プライマリで作成し、スタンバイへコピーする]

cd $(orabaseconfig)/dbs

orapwd file=orapworcl password=oracle format=12

scp orapworcl mmm092:/tmp


--スタンバイで実施
mv /tmp/orapworcl $(orabaseconfig)/dbs/orapwstb


--リスナー

[プライマリで実施]
vim $(orabasehome)/network/admin/listner.ora

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = mmm091)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

lsnrctl start listener
[スタンバイで実施]
vim $(orabasehome)/network/admin/listner.ora

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = mmm092)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

lsnrctl start listener

--Oracle Netネット・サービス
[プライマリで実施]

vim $(orabasehome)/network/admin/tnsnames.ora

LISTENER_ORCL=
 (DESCRIPTION =
  (ADDRESS=(PROTOCOL=tcp)(HOST=mmm091)(PORT=1521)))


pdb1 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = mmm091)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = pdb1.example.com)
    )
  )


orcl=
  (DESCRIPTION= 
  (ADDRESS=(PROTOCOL=tcp)(HOST=mmm091)(PORT=1521))
  (CONNECT_DATA= 
     (SERVICE_NAME=orcl.example.com)))

stb=
  (DESCRIPTION= 
  (ADDRESS=(PROTOCOL=tcp)(HOST=mmm092)(PORT=1521))
  (CONNECT_DATA= 
     (SERVICE_NAME=stb.example.com)))

[スタンバイで実施]

vim $(orabasehome)/network/admin/tnsnames.ora

LISTENER_STB=
 (DESCRIPTION =
  (ADDRESS=(PROTOCOL=tcp)(HOST=mmm092)(PORT=1521)))


pdb1 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = mmm092)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = pdb1.example.com)
    )
  )


orcl=
  (DESCRIPTION= 
  (ADDRESS=(PROTOCOL=tcp)(HOST=mmm091)(PORT=1521))
  (CONNECT_DATA= 
     (SERVICE_NAME=orcl.example.com)))

stb=
  (DESCRIPTION= 
  (ADDRESS=(PROTOCOL=tcp)(HOST=mmm092)(PORT=1521))
  (CONNECT_DATA= 
     (SERVICE_NAME=stb.example.com)))

 

 


--10.フィジカル・スタンバイ・データベースの起動[スタンバイで実施]

8.でコピーしたファイルをスタンバイに展開する。制御ファイルはスタンバイ制御ファイルで置き換える

cd /tmp

mv orcl.tgz /u01/app/oracle/oradata/
cd /u01/app/oracle/oradata/
tar xvzf orcl.tgz
cd orcl

mv /tmp/stb.ctl .
rm -i control01.ctl control02.ctl
mv stb.ctl control01.ctl
cp -a control01.ctl control02.ctl

cd $(orabaseconfig)/dbs
mv /tmp/initstb.ora .

sqlplus / as sysdba

create spfile from pfile;

STARTUP MOUNT;

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

SELECT CLIENT_PROCESS, PROCESS, THREAD#, SEQUENCE#, STATUS FROM V$MANAGED_STANDBY WHERE CLIENT_PROCESS='LGWR' OR PROCESS='MRP0';


SELECT SEQUENCE#,DEST_ID,STANDBY_DEST,ARCHIVED,APPLIED,DELETED,STATUS,COMPLETION_TIME,CREATOR,REGISTRAR
FROM V$ARCHIVED_LOG
ORDER BY SEQUENCE#,DEST_ID
;

--11.初期化パラメータ修正[プライマリとスタンバイで実施]

「Log read is SYNCHRONOUS though disk_asynch_io is enabled!」への対策

show parameter disk_asynch_io

alter system set disk_asynch_io = false scope=spfile;

show parameter disk_asynch_io


--12.各種確認
https://blogs.oracle.com/otnjp/shibacho-058

select SOURCE_DB_UNIQUE_NAME, NAME, VALUE, UNIT from V$DATAGUARD_STATS ;


set linesize 250 pages 5000 tab off
col FORCE_LOGGING for a6
col FLASHBACK_ON for a6
select DBID, NAME, DB_UNIQUE_NAME, DATABASE_ROLE, PROTECTION_MODE, CURRENT_SCN, FLASHBACK_ON, FORCE_LOGGING
from V$DATABASE ;


select * from V$DATAGUARD_CONFIG ;


set linesize 200 pages 5000 tab off
col DEST_NAME for a20
col DB_UNIQUE_NAME for a8
col TARGET for a8
col RECOVERY_MODE for a25
col GAP_STATUS for a10
select A.DEST_ID, A.DEST_NAME, A.DB_UNIQUE_NAME, B.DATABASE_MODE, B.RECOVERY_MODE, 
       A.TRANSMIT_MODE, A.AFFIRM, A.TARGET, A.STATUS, A.LOG_SEQUENCE, A.APPLIED_SCN, 
       B.GAP_STATUS, A.ERROR, B.ERROR
  from V$ARCHIVE_DEST A, V$ARCHIVE_DEST_STATUS B
 where A.DEST_ID=B.DEST_ID
   and A.TARGET in ('STANDBY', 'REMOTE') ;

set linesize 200 pages 5000 tab off
col PID for a10
select NAME, PID, TYPE, ROLE, ACTION, CLIENT_PID, CLIENT_ROLE, THREAD#, SEQUENCE#, BLOCK#, BLOCK_COUNT, DELAY_MINS, DEST_ID, DBID, DGID, INSTANCE
  from V$DATAGUARD_PROCESS 
 order by 1 ;


--13. エイリアス等設定[スタンバイで実施]

vim $ORACLE_HOME/sqlplus/admin/glogin.sql

set lines 1000
set pages 5000
set trims on
set sqlprompt "&_connect_identifier(&_user)> "


vim ~/.bashrc
alias cdh='cd $ORACLE_HOME'
alias cdb='cd $ORACLE_BASE'
alias sql='sqlplus / as sysdba'

. ~/.bashrc

--14. active data guard[スタンバイで実施]

shutdown immediate;

startup mount;

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
SELECT CLIENT_PROCESS, PROCESS, THREAD#, SEQUENCE#, STATUS FROM V$MANAGED_STANDBY WHERE CLIENT_PROCESS='LGWR' OR PROCESS='MRP0';

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
ALTER DATABASE OPEN;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;

SELECT open_mode FROM V$DATABASE;

show con_name
select * from V$PDBS;
select * from cdb_pdbs;

alter pluggable database pdb1 open;

※スタンバイではSAVE STATEコマンドはエラーとなる。

 

 



--------------------RMANによる方法--------------------


(18c)
--非同期フィジカル・スタンバイ

--前提
プライマリ:インストールとDB作成を実施
セカンダリ:インストールを実施

--1.強制ロギングの有効化[プライマリで実施]
select force_logging FROM v$database;
ALTER DATABASE FORCE LOGGING;

--2.スタンバイREDOログ作成[プライマリで実施]
SELECT group#,type,member FROM v$logfile;
SELECT group#,bytes/1048576 "SIZE(MB)" FROM v$log;
SELECT group#,bytes/1048576 "SIZE(MB)" FROM v$standby_log;

ALTER DATABASE ADD standby logfile
group 4 ('/u01/app/oracle/oradata/orcl/stredo01.log') SIZE 100M,
group 5 ('/u01/app/oracle/oradata/orcl/stredo02.log') SIZE 100M,
group 6 ('/u01/app/oracle/oradata/orcl/stredo03.log') SIZE 100M,
group 7 ('/u01/app/oracle/oradata/orcl/stredo04.log') SIZE 100M;

--3.初期化パラメータの設定[プライマリで実施]
mkdir -p /u01/app/oracle/oradata/orcl/arc


*.db_domain='example.com'
*.memory_target=800M
DB_NAME=orcl
DB_UNIQUE_NAME=orcl
LOG_ARCHIVE_CONFIG='DG_CONFIG=(orcl,stb)'
CONTROL_FILES='/u01/app/oracle/oradata/orcl/control01.ctl', '/u01/app/oracle/oradata/orcl/control02.ctl'
LOG_ARCHIVE_DEST_1='LOCATION=/u01/app/oracle/oradata/orcl/arc VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl'
LOG_ARCHIVE_DEST_2='SERVICE=stb ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=stb'
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
FAL_SERVER=stb
DB_FILE_NAME_CONVERT='/orcl/','/orcl/'
LOG_FILE_NAME_CONVERT='/orcl/','/orcl/'
STANDBY_FILE_MANAGEMENT=AUTO


--4.アーカイブの有効化[プライマリで実施]

shutdown immediate;
startup mount
alter database archivelog;
alter database open;
archive log list


--5.バックアップの作成[プライマリで実施]

rman target / nocatalog

set compression algorithm 'medium';

backup as compressed backupset
database format '/tmp/standby_database_%U'
include current controlfile for standby
plus archivelog format '/tmp/standby_archive_%U';

 

--6.スタンバイ・データベース用のパラメータ・ファイルの作成[プライマリで実施]

CREATE PFILE='/tmp/initstb.ora' FROM SPFILE;

vim initstb.ora

*.CONTROL_FILES='/u01/app/oracle/oradata/orcl/control01.ctl','/u01/app/oracle/oradata/orcl/control02.ctl'
*.db_domain='example.com'
*.DB_FILE_NAME_CONVERT='/orcl/','/orcl/'
*.DB_NAME='orcl'
*.DB_UNIQUE_NAME='stb'
*.FAL_SERVER='orcl'
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(orcl,stb)'
*.LOG_ARCHIVE_DEST_1='LOCATION=/u01/app/oracle/oradata/orcl/arc VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=stb'
*.LOG_ARCHIVE_DEST_2='SERVICE=orcl ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl'
*.LOG_ARCHIVE_FORMAT='%t_%s_%r.arc'
*.LOG_FILE_NAME_CONVERT='/orcl/','/orcl/'
*.memory_target=800M
*.REMOTE_LOGIN_PASSWORDFILE='EXCLUSIVE'
*.STANDBY_FILE_MANAGEMENT='AUTO'


--7.プライマリ・システムからスタンバイ・システムへのファイルのコピー[プライマリで実施]
scp /tmp/standby_* mmm074:/tmp
scp /tmp/initstb.ora mmm074:/tmp

 

--8.スタンバイ・データベースをサポートする環境の設定


--パスワードファイル[プライマリで作成し、スタンバイへコピーする]

cd $ORACLE_HOME/dbs

orapwd file=orapworcl password=oracle format=12

 

scp orapworcl mmm074:/tmp

--スタンバイで実施
mv /tmp/orapworcl $ORACLE_HOME/dbs/orapwstb


--リスナー

[プライマリで実施]
vim listener.ora

LISTENER =
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(HOST=mmm073)(PORT=1521))
)

SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(GLOBAL_DBNAME=orcl.example.com)
(SID_NAME=orcl)
(ORACLE_HOME=/u01/app/oracle/product/18.0.0/dbhome_1)
)
)

lsnrctl start listener
[スタンバイで実施]
vim listener.ora

LISTENER =
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(HOST=mmm074)(PORT=1521))
)

SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(GLOBAL_DBNAME=stb.example.com)
(SID_NAME=stb)
(ORACLE_HOME=/u01/app/oracle/product/18.0.0/dbhome_1)
)
)

lsnrctl start listener

--Oracle Netネット・サービス
[プライマリとスタンバイで実施]

vim tnsnames.ora

orcl=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST=mmm073)(PORT=1521))
(CONNECT_DATA=
(SERVICE_NAME=orcl.example.com)))

stb=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST=mmm074)(PORT=1521))
(CONNECT_DATA=
(SERVICE_NAME=stb.example.com)))


--9.バックアップ適用[スタンバイで実施]

mv /tmp/initstb.ora $ORACLE_HOME/dbs

sqlplus / as sysdba
startup nomount

rman auxiliary /

duplicate target database for standby backup location '/tmp/' nofilenamecheck dorecover;


--10.フィジカル・スタンバイ・データベースの起動[スタンバイで実施]


create spfile from pfile;
shutdown immediate;

STARTUP MOUNT;

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

SELECT CLIENT_PROCESS, PROCESS, THREAD#, SEQUENCE#, STATUS FROM V$MANAGED_STANDBY WHERE CLIENT_PROCESS='LGWR' OR PROCESS='MRP0';

 

 

 

(5.6)

参考URL : https://qiita.com/ksugawara61/items/fdd5ae9b78931540887f
OS : CentOS7.6
DBバージョン : 5.6.42
同期方式 : 非同期
バイナリロギング形式 : ROW

--confファイルの設定[マスターで実施]

vi /etc/my.cnf

[mysqld]



log_bin
server_id=101
binlog_format=ROW
max_binlog_size=100M
expire_logs_days=30
sync_binlog=1
innodb_flush_log_at_trx_commit=1
report_host=mmm052
log_slave_updates


--MySQLを再起動[マスターで実施]

systemctl restart mysqld.service

 

--Slaveアカウントを作成[マスターで実施]

create user 'repl'@'192.168.137.53' identified by 'repl';
grant replication slave on *.* to 'repl'@'192.168.137.53';

--フェールオーバ時のことを考慮して作成しておく
create user 'repl'@'192.168.137.52' identified by 'repl';
grant replication slave on *.* to 'repl'@'192.168.137.52';

flush privileges;


--example DBをdump[マスターで実施]
mysqldump --quick --master-data=2 --flush-logs --single-transaction -u root -p --all-databases > all.dump

scp all.dump 192.168.137.53:~


--confファイルの設定[スレーブで実施]

vi /etc/my.cnf

[mysqld]



log_bin
server_id=102
binlog_format=ROW
max_binlog_size=100M
expire_logs_days=30
sync_binlog=1
innodb_flush_log_at_trx_commit=1
report_host=mmm053
log_slave_updates
#read_only

 

--MySQLを再起動[スレーブで実施]

systemctl restart mysqld.service


--dumpデータをコピー[スレーブで実施]

source ~/all.dump;


--Slave DBの設定[スレーブで実施]

--バイナリログファイル名と開始位置の確認
\! head -100 all.dump | grep CHANGE

change master to
master_host='192.168.137.52',
master_user='repl',
master_password='repl',
master_log_file='mysqld-bin.000064',
master_log_pos=120;


--レプリケーションを開始[スレーブで実施]
start slave;


--レプリケーションステータス確認[スレーブで実施]
show slave status\G
show global status like 'Slave%';


--レプリケーションホスト確認[マスターで実施]
show slave hosts\G


(5.7)

参考URL : https://qiita.com/ksugawara61/items/fdd5ae9b78931540887f
OS : CentOS7.6
DBバージョン : 5.7.24
同期方式 : 非同期
バイナリロギング形式 : ROW

--confファイルの設定[マスターで実施]

vi /etc/my.cnf

[mysqld]



log_bin
server_id=101
binlog_format=ROW
max_binlog_size=100M
expire_logs_days=30
sync_binlog=1
innodb_flush_log_at_trx_commit=1

--MySQLを再起動[マスターで実施]

systemctl restart mysqld.service

 

--レプリケーション用のDBを作成[マスターで実施]


create database example;

--Slaveアカウントを作成[マスターで実施]

create user 'repl'@'192.168.137.69' identified by 'Aaa!1234';
grant replication slave on *.* to 'repl'@'192.168.137.69';

flush privileges;

--example DBをdump[マスターで実施]
mysqldump --quick --master-data=2 --flush-logs --single-transaction -u root -p example > example.dump

scp example.dump 192.168.137.69:~


--confファイルの設定[スレーブで実施]

vi /etc/my.cnf

[mysqld]



log_bin
server_id=102
binlog_format=ROW
max_binlog_size=100M
expire_logs_days=30
sync_binlog=1
innodb_flush_log_at_trx_commit=1
report_host=mmm069
read_only

--MySQLを再起動[スレーブで実施]

systemctl restart mysqld.service


--dumpデータをコピー[スレーブで実施]

create database example;
use example;
source ~/example.dump;


--Slave DBの設定[スレーブで実施]

--バイナリログファイル名と開始位置の確認
\! head -100 example.dump | grep CHANGE

change master to
master_host='192.168.137.68',
master_user='repl',
master_password='Aaa!1234',
master_log_file='mmm068-bin.000014',
master_log_pos=154;

--example DBをレプリケーション対象のDBとして設定[スレーブで実施] <==5.7で追加 これは設定しないほうがよい
change replication filter replicate_do_db = (example);


--レプリケーションを開始[スレーブで実施]
start slave;


--レプリケーションステータス確認[スレーブで実施]
show slave status\G

--レプリケーションホスト確認[マスターで実施]
show slave hosts\G

(8.0)

参考URL : https://www.pochio.net/entry/2018/07/03/145423
http://gihyo.jp/dev/serial/01/mysql-road-construction-news/0066
https://qiita.com/Tocyuki/items/c224cef57493f536a941

OS : CentOS7.6
DBバージョン : 8.0.13
同期方式 : 準同期
バイナリロギング形式 : ROW

--confファイルの設定[マスターで実施]

vi /etc/my.cnf

[mysqld]



log_bin
server_id=101
binlog_format=ROW
max_binlog_size=100M
expire_logs_days=30
sync_binlog=1
innodb_flush_log_at_trx_commit=1

--MySQLを再起動[マスターで実施]

systemctl restart mysqld.service

 

--レプリケーション用のDBを作成[マスターで実施]


create database example;

--Slaveアカウントを作成[マスターで実施]

create user 'repl'@'192.168.137.74' identified by 'Aaa!1234';
grant replication slave on *.* to 'repl'@'192.168.137.74';

flush privileges;

--example DBをdump[マスターで実施]
mysqldump --quick --master-data=2 --flush-logs --single-transaction -u root -p example > example.dump

scp example.dump 192.168.137.74:~


--confファイルの設定[スレーブで実施]

vi /etc/my.cnf

[mysqld]



log_bin
server_id=102
binlog_format=ROW
max_binlog_size=100M
expire_logs_days=30
sync_binlog=1
innodb_flush_log_at_trx_commit=1
report_host=mmm074
read_only


--MySQLを再起動[スレーブで実施]

systemctl restart mysqld.service


--dumpデータをコピー[スレーブで実施]

create database example;
use example;
source ~/example.dump;


--Slave DBの設定[スレーブで実施]

--バイナリログファイル名と開始位置の確認
\! head -100 example.dump | grep CHANGE

change master to
master_host='192.168.137.73',
master_user='repl',
master_password='Aaa!1234',
master_log_file='mmm073-bin.000002',
master_log_pos=155;

--example DBをレプリケーション対象のDBとして設定[スレーブで実施] <==5.7で追加 これは設定しないほうがよい
change replication filter replicate_do_db = (example);


--レプリケーションを開始[スレーブで実施]
start slave;


--レプリケーションステータス確認[スレーブで実施]
show slave status\G
show processlist\G


Slave_IO_Running:
Slave_SQL_Running:

がNoになっていたらレプリケーションが止まっている。

※Slave_IO_Running: Connecting のまま5分ぐらいまったらYesになった。


--レプリケーションホスト確認[マスターで実施]
show slave hosts\G
show processlist\G


---------------------------------------------------------
--準同期の設定 (MySQL5.5から使用可能)

--プラグインのインストール[マスターで実施]
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
show plugins\G


--プラグインのインストール[スレーブで実施]

INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
show plugins\G


--準同期レプリケーションを有効化[マスターで実施]
SET GLOBAL rpl_semi_sync_master_enabled = 1;

--準同期レプリケーションを有効化[スレーブで実施]
SET GLOBAL rpl_semi_sync_slave_enabled = 1;

 

--稼働中のスレーブのI/Oスレッドを再起動[スレーブで実施]
STOP SLAVE IO_THREAD;
START SLAVE IO_THREAD;

--準同期の確認[マスターで実施]
show global status like 'Rpl_semi_sync%';

show global variables like 'rpl_semi%';

--設定永続化[マスターで実施]
vim /etc/my.cnf

[mysqld]
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=20000 # 20 second

--設定永続化[スレーブで実施]
vim /etc/my.cnf
[mysqld]
rpl_semi_sync_slave_enabled=1


---------------------------------------------------------

(8.0.30)

OS : CentOS7.9
DBバージョン : 8.0.30
同期方式 : 非同期
バイナリロギング形式 : ROW
トランザクション識別方式: GTIDベース


-- 1. confファイルの設定[ソースで実施]

vi /etc/my.cnf

[mysqld]



log_bin = mysql-bin
binlog_format = ROW
server_id = 101
gtid_mode = ON
enforce_gtid_consistency = ON


-- 2. MySQLを再起動[ソースで実施]

systemctl restart mysqld.service

 

-- 3. レプリケーション用のDBを作成[ソースで実施]


create database test;
use test;
create table tab1(col1 int);
insert into tab1 values(1);
select * from tab1;


-- 4. Slaveアカウントを作成[ソースで実施]

create user 'repl'@'%' identified by 'password';
grant replication slave on *.* to 'repl'@'%';

flush privileges;

-- 5. test DBをdump[ソースで実施]
mysqldump -u root -p --set-gtid-purged=ON --all-databases > all.sql

scp all.sql 192.168.137.82:~


-- 6. confファイルの設定[レプリカで実施]

vi /etc/my.cnf

[mysqld]



relay_log = mysql-relay-bin
binlog_format = ROW
server_id = 102
gtid_mode = ON
enforce_gtid_consistency = ON

 

-- 7. MySQLを再起動[レプリカで実施]

systemctl restart mysqld.service


-- 8. dumpデータをコピー[レプリカで実施]

mysql -u root -p < all.sql


-- 9. Slave DBの設定[レプリカで実施]


change replication source to
source_host='192.168.137.81',
source_port=3306,
source_user='repl',
source_password='password',
source_auto_position=1,
source_ssl=1
;

 

-- 10. レプリケーションを開始[レプリカで実施]
show replica status\G
start replica;


-- 11. レプリケーションステータス確認[レプリカで実施]
show replica status\G
show processlist\G

 


-- 12. レプリケーションホスト確認[ソースで実施]
show slave hosts\G
show processlist\G

 

 

 

(9.4)

参考URL : http://hkou.hatenablog.com/entry/2015/05/17/184455
OS : CentOS7.6
DBバージョン : 9.4.20
同期方式 : 非同期


--PostgreSQL9.4のインストール[プライマリとスタンバイで実施]


--レプリケーション用のユーザーを作成する[プライマリで実施]

CREATE USER repl_user REPLICATION PASSWORD 'repl_user';


--マスターとスレーブが接続できるように設定する[プライマリで実施]

vim /var/lib/pgsql/9.4/data/pg_hba.conf

↓記述追加
host replication repl_user 127.0.0.1/32 md5
host replication repl_user 192.168.137.0/24 md5

local all all peer

local all all trust


--postgres.confの設定[プライマリで実施]

mkdir -p /var/lib/pgsql/9.4/archive

cp /var/lib/pgsql/9.4/data/postgresql.conf /var/lib/pgsql/9.4/data/postgresql.conf.bk`date +"%Y%m%d%H%M%S"`
vim /var/lib/pgsql/9.4/data/postgresql.conf

wal_level = hot_standby
synchronous_commit = on
max_wal_senders = 3
archive_mode = on
archive_command = 'test ! -f /var/lib/pgsql/9.4/archive/%f && cp %p /var/lib/pgsql/9.4/archive/%f'
hot_standby = on
log_filename = 'postgresql-%Y-%m-%d.log'
listen_addresses = '*'
hot_standby_feedback = on


systemctl restart postgresql-9.4

--ベースバックアップをスレーブに転送する[スタンバイで実施]

systemctl stop postgresql-9.4.service

su - postgres

mkdir -p /var/lib/pgsql/9.4/archive
mv /var/lib/pgsql/9.4/data /var/lib/pgsql/9.4/data.bak
pg_basebackup -h 192.168.137.52 -U repl_user -D /var/lib/pgsql/9.4/data/ -P --xlog -R

--スレーブDBの設定[スタンバイで実施]

cd /var/lib/pgsql/9.4/data

vim recovery.conf

standby_mode = 'on'
primary_conninfo = 'user=repl_user password=repl_user host=192.168.137.52 port=5432 application_name=mmm053'

※application_nameは同期モードの場合に必須の設定

--スレーブDBの起動[スタンバイで実施]

systemctl start postgresql-9.4.service

--レプリケーションの状態を確認[プライマリで実施]
select * from pg_stat_replication;


----------------------------------------------------
--同期モードに設定する場合
https://qiita.com/U_ikki/items/2d6159f4843ef2b2c5f2#_reference-72e2533d26d8ffe616c0

 

前提:スタンバイのrecovery.confのprimary_conninfoにapplication_name = 'mmm053'が設定済み

プライマリ側のpostgresql.confを修正する

vim postgresql.conf

synchronous_standby_names = 'mmm053'

----------------------------------------------------
--レプリケーションスロット
http://www.atmarkit.co.jp/ait/articles/1411/13/news004_3.html

--postgres.confの設定[スタンバイで実施]
vim postgresql.conf

hot_standby_feedback = on

--postgres.confの設定[プライマリで実施]
vim postgresql.conf

max_replication_slots = 3

サービス再起動

--スロットの作成[プライマリで実施]
SELECT * FROM pg_create_physical_replication_slot('a_slot');


--recovery.confの設定[スタンバイで実施]
vim recovery.conf

primary_slot_name = 'a_slot'

サービス再起動

--スロット使用確認[プライマリで実施]

SELECT slot_name, active FROM pg_replication_slots;


--コンフリクトの確認[スタンバイで実施]

select * from pg_stat_database_conflicts;


----------------------------------------------------

(9.6)

参考URL : https://qiita.com/nyao/items/50c8216050b726838e45
OS : CentOS7.6
DBバージョン : 9.6.11
同期方式 : 非同期


--PostgreSQL9.6のインストール[プライマリとスタンバイで実施]


--レプリケーション用のユーザーを作成する[プライマリで実施]

CREATE USER repl_user REPLICATION PASSWORD 'repl_user';


--マスターとスレーブが接続できるように設定する[プライマリで実施]

vim /var/lib/pgsql/9.6/data/pg_hba.conf

↓記述追加
host replication repl_user 127.0.0.1/32 md5
host replication repl_user 192.168.137.0/24 md5

local all all peer

local all all trust


--postgres.confの設定[プライマリで実施]

mkdir -p /var/lib/pgsql/9.6/archive

cp /var/lib/pgsql/9.6/data/postgresql.conf /var/lib/pgsql/9.6/data/postgresql.conf.bk`date +"%Y%m%d%H%M%S"`
vim /var/lib/pgsql/9.6/data/postgresql.conf

wal_level = replica
synchronous_commit = on
max_wal_senders = 3
archive_mode = on
archive_command = 'test ! -f /var/lib/pgsql/9.6/archive/%f && cp %p /var/lib/pgsql/9.6/archive/%f'
hot_standby = on
log_filename = 'postgresql-%Y-%m-%d.log'
listen_addresses = '*'
hot_standby_feedback = on


systemctl restart postgresql-9.6

--ベースバックアップをスレーブに転送する[スタンバイで実施]

systemctl stop postgresql-9.6.service

su - postgres

mkdir -p /var/lib/pgsql/9.6/archive
mv /var/lib/pgsql/9.6/data /var/lib/pgsql/9.6/data.bak
pg_basebackup -h 192.168.137.68 -U repl_user -D /var/lib/pgsql/9.6/data/ -P --xlog -R

--スレーブDBの設定[スタンバイで実施]

cd /var/lib/pgsql/9.6/data

vim recovery.conf

standby_mode = 'on'
primary_conninfo = 'user=repl_user password=repl_user host=192.168.137.68 port=5432 application_name=mmm069'

※application_nameは同期モードの場合に必須の設定

--スレーブDBの起動[スタンバイで実施]

systemctl start postgresql-9.6.service

--レプリケーションの状態を確認[プライマリで実施]
select * from pg_stat_replication;

 


(10)

参考URL : https://qiita.com/nyao/items/50c8216050b726838e45
OS : CentOS7.6
DBバージョン : 10.6
同期方式 : 非同期


--PostgreSQL10のインストール[プライマリとスタンバイで実施]


--レプリケーション用のユーザーを作成する[プライマリで実施]

CREATE USER repl_user REPLICATION PASSWORD 'repl_user';


--マスターとスレーブが接続できるように設定する[プライマリで実施]

vim /var/lib/pgsql/10/data/pg_hba.conf

↓記述追加
host replication repl_user 127.0.0.1/32 md5
host replication repl_user 192.168.137.0/24 md5

local all all peer

local all all trust


--postgres.confの設定[プライマリで実施]

mkdir -p /var/lib/pgsql/10/archive

cp /var/lib/pgsql/10/data/postgresql.conf /var/lib/pgsql/10/data/postgresql.conf.bk`date +"%Y%m%d%H%M%S"`
vim /var/lib/pgsql/10/data/postgresql.conf

wal_level = replica
synchronous_commit = on
max_wal_senders = 3
archive_mode = on
archive_command = 'test ! -f /var/lib/pgsql/10/archive/%f && cp %p /var/lib/pgsql/10/archive/%f'
hot_standby = on
log_filename = 'postgresql-%Y-%m-%d.log'
listen_addresses = '*'


systemctl restart postgresql-10

--ベースバックアップをスレーブに転送する[スタンバイで実施]

systemctl stop postgresql-10.service

su - postgres

mkdir -p /var/lib/pgsql/10/archive
mv /var/lib/pgsql/10/data /var/lib/pgsql/10/data.bak
pg_basebackup -h 192.168.137.73 -U repl_user -D /var/lib/pgsql/10/data/ -P --wal-method=fetch -R

--スレーブDBの設定[スタンバイで実施]

cd /var/lib/pgsql/10/data

vim recovery.conf

standby_mode = 'on'
primary_conninfo = 'user=repl_user password=repl_user host=192.168.137.73 port=5432 application_name=mmm074'

※application_nameは同期モードの場合に必須の設定

--スレーブDBの起動[スタンバイで実施]

systemctl start postgresql-10.service

--レプリケーションの状態を確認[プライマリで実施]
select * from pg_stat_replication;

 

 

(11)

参考URL : https://qiita.com/nyao/items/50c8216050b726838e45
OS : CentOS7.6
DBバージョン : 11.5
同期方式 : 非同期


--PostgreSQL11のインストール[プライマリとスタンバイで実施]


--レプリケーション用のユーザーを作成する[プライマリで実施]

CREATE USER repl_user REPLICATION PASSWORD 'repl_user';


--マスターとスレーブが接続できるように設定する[プライマリで実施]

vim /var/lib/pgsql/11/data/pg_hba.conf

↓記述追加
host replication repl_user 127.0.0.1/32 md5
host replication repl_user 192.168.137.0/24 md5

local all all peer

local all all trust


--postgres.confの設定[プライマリで実施]

mkdir -p /var/lib/pgsql/11/archive

cp /var/lib/pgsql/11/data/postgresql.conf /var/lib/pgsql/11/data/postgresql.conf.bk`date +"%Y%m%d%H%M%S"`
vim /var/lib/pgsql/11/data/postgresql.conf

wal_level = replica
synchronous_commit = on
max_wal_senders = 3
archive_mode = on
archive_command = 'test ! -f /var/lib/pgsql/11/archive/%f && cp %p /var/lib/pgsql/11/archive/%f'
hot_standby = on
log_filename = 'postgresql-%Y-%m-%d.log'
listen_addresses = '*'


systemctl restart postgresql-11

--ベースバックアップをスレーブに転送する[スタンバイで実施]

systemctl stop postgresql-11.service

su - postgres

mkdir -p /var/lib/pgsql/11/archive
mv /var/lib/pgsql/11/data /var/lib/pgsql/11/data.bak
pg_basebackup -h 192.168.137.71 -U repl_user -D /var/lib/pgsql/11/data/ -P --wal-method=fetch -R

--スレーブDBの設定[スタンバイで実施]

cd /var/lib/pgsql/11/data

vim recovery.conf

standby_mode = 'on'
primary_conninfo = 'user=repl_user password=repl_user host=192.168.137.71 port=5432 application_name=mmm072'

※application_nameは同期モードの場合に必須の設定

--スレーブDBの起動[スタンバイで実施]

systemctl start postgresql-11.service

--レプリケーションの状態を確認[プライマリで実施]
select * from pg_stat_replication;


(12)

参考URL : https://qiita.com/U_ikki/items/e05a063de6a991c84841
OS : CentOS7.7
DBバージョン : 12.1
同期方式 : 非同期


--PostgreSQL12のインストール[プライマリとスタンバイで実施]


--レプリケーション用のユーザーを作成する[プライマリで実施]

CREATE USER repl_user REPLICATION PASSWORD 'repl_user';


--マスターとスレーブが接続できるように設定する[プライマリで実施]

vim /var/lib/pgsql/12/data/pg_hba.conf

↓記述追加
host replication repl_user 127.0.0.1/32 md5
host replication repl_user 192.168.137.0/24 md5

local all all peer

local all all trust


--postgres.confの設定[プライマリで実施]

mkdir -p /var/lib/pgsql/12/archive

cp /var/lib/pgsql/12/data/postgresql.conf /var/lib/pgsql/12/data/postgresql.conf.bk`date +"%Y%m%d%H%M%S"`
vim /var/lib/pgsql/12/data/postgresql.conf

wal_level = replica
synchronous_commit = on
max_wal_senders = 10
archive_mode = on
archive_command = 'test ! -f /var/lib/pgsql/12/archive/%f && cp %p /var/lib/pgsql/12/archive/%f'
hot_standby = on
log_filename = 'postgresql-%Y-%m-%d.log'
listen_addresses = '*'
hot_standby_feedback = on
max_replication_slots = 10
primary_conninfo = 'user=repl_user password=repl_user host=192.168.137.82 port=5432 application_name=mmm081'
primary_slot_name = 'a_slot'

systemctl restart postgresql-12

--スロットの作成[プライマリで実施]
SELECT * FROM pg_create_physical_replication_slot('a_slot');

--ベースバックアップをスレーブに転送する[スタンバイで実施]

systemctl stop postgresql-12.service

su - postgres

mkdir -p /var/lib/pgsql/12/archive
mv /var/lib/pgsql/12/data /var/lib/pgsql/12/data.bak
pg_basebackup -h 192.168.137.81 -U repl_user -D /var/lib/pgsql/12/data/ -P --wal-method=fetch -R

--スレーブDBの設定[スタンバイで実施]

cd /var/lib/pgsql/12/data

vim /var/lib/pgsql/12/data/postgresql.conf

primary_conninfo = 'user=repl_user password=repl_user host=192.168.137.82 port=5432 application_name=mmm081'

primary_conninfo = 'user=repl_user password=repl_user host=192.168.137.81 port=5432 application_name=mmm082'

 

--スレーブDBの起動[スタンバイで実施]

systemctl start postgresql-12.service

--レプリケーションの状態を確認[プライマリで実施]
select * from pg_stat_replication;

--スロット使用確認[プライマリで実施]
SELECT slot_name, active FROM pg_replication_slots;

--コンフリクトの確認[スタンバイで実施]
select * from pg_stat_database_conflicts;

 

(13)

参考URL : https://mebee.info/2020/07/15/post-13465/
OS : CentOS8.2
DBバージョン : 13.0
同期方式 : 非同期


--PostgreSQL13のインストール[プライマリとスタンバイで実施]


--レプリケーション用のユーザーを作成する[プライマリで実施]

CREATE USER repl_user REPLICATION PASSWORD 'repl_user';


--マスターとスレーブが接続できるように設定する[プライマリで実施]

vim /var/lib/pgsql/13/data/pg_hba.conf

↓記述追加
host replication repl_user 127.0.0.1/32 md5
host replication repl_user 192.168.137.0/24 md5

local all all peer

local all all trust


--postgres.confの設定[プライマリで実施]

mkdir -p /var/lib/pgsql/13/archive

cp /var/lib/pgsql/13/data/postgresql.conf /var/lib/pgsql/13/data/postgresql.conf.bk`date +"%Y%m%d%H%M%S"`
vim /var/lib/pgsql/13/data/postgresql.conf

wal_level = replica
synchronous_commit = on
max_wal_senders = 10
archive_mode = on
archive_command = 'test ! -f /var/lib/pgsql/13/archive/%f && cp %p /var/lib/pgsql/13/archive/%f'
hot_standby = on
log_filename = 'postgresql-%Y-%m-%d.log'
listen_addresses = '*'
hot_standby_feedback = on
max_replication_slots = 10
primary_conninfo = 'user=repl_user password=repl_user host=192.168.137.92 port=5432 application_name=mmm091'
primary_slot_name = 'a_slot'

systemctl restart postgresql-13

--スロットの作成[プライマリで実施]
SELECT * FROM pg_create_physical_replication_slot('a_slot');

--ベースバックアップをスレーブに転送する[スタンバイで実施]

systemctl stop postgresql-13.service

su - postgres

mkdir -p /var/lib/pgsql/13/archive
mv /var/lib/pgsql/13/data /var/lib/pgsql/13/data.bak
pg_basebackup -h 192.168.137.91 -U repl_user -D /var/lib/pgsql/13/data/ -P --wal-method=fetch -R

--スレーブDBの設定[スタンバイで実施]

cd /var/lib/pgsql/13/data

vim /var/lib/pgsql/13/data/postgresql.conf

primary_conninfo = 'user=repl_user password=repl_user host=192.168.137.92 port=5432 application_name=mmm091'

primary_conninfo = 'user=repl_user password=repl_user host=192.168.137.91 port=5432 application_name=mmm092'

 

--スレーブDBの起動[スタンバイで実施]

systemctl start postgresql-13.service

--レプリケーションの状態を確認[プライマリで実施]
select * from pg_stat_replication;

--スロット使用確認[プライマリで実施]
SELECT slot_name, active FROM pg_replication_slots;

--コンフリクトの確認[スタンバイで実施]
select * from pg_stat_database_conflicts;

 


(16)

OS : Rocky Linux 9.2
DBバージョン : 16.0
同期方式 : 非同期

前提:OSでFWとSELinux無効化済み

--PostgreSQL16のインストール[プライマリとスタンバイで実施]


--レプリケーション用のユーザーを作成する[プライマリで実施]

CREATE USER repl_user REPLICATION PASSWORD 'repl_user';


--マスターとスレーブが接続できるように設定する[プライマリで実施]

vim /var/lib/pgsql/16/data/pg_hba.conf

↓記述追加
host replication repl_user 127.0.0.1/32 md5
host replication repl_user 192.168.137.0/24 md5

local   all             all                                     peer

local   all             all                                     trust


--postgres.confの設定[プライマリで実施]

mkdir -p /var/lib/pgsql/16/archive

cp /var/lib/pgsql/16/data/postgresql.conf /var/lib/pgsql/16/data/postgresql.conf.bk`date +"%Y%m%d%H%M%S"`
vim /var/lib/pgsql/16/data/postgresql.conf

wal_level = replica
synchronous_commit = on
max_wal_senders = 10
archive_mode = on
archive_command = 'test ! -f /var/lib/pgsql/16/archive/%f && cp %p /var/lib/pgsql/16/archive/%f'
hot_standby = on
log_filename = 'postgresql-%Y-%m-%d.log'
listen_addresses = '*'
hot_standby_feedback = on
max_replication_slots = 10
primary_conninfo = 'user=repl_user password=repl_user host=192.168.137.74 port=5432 application_name=mmm073'
primary_slot_name = 'a_slot'

systemctl restart postgresql-16

--スロットの作成[プライマリで実施]
SELECT * FROM pg_create_physical_replication_slot('a_slot');

--ベースバックアップをスレーブに転送する[スタンバイで実施]

systemctl stop postgresql-16.service

su - postgres

mkdir -p /var/lib/pgsql/16/archive
mv /var/lib/pgsql/16/data /var/lib/pgsql/16/data.bak
pg_basebackup -h 192.168.137.73 -U repl_user -D /var/lib/pgsql/16/data/ -P --wal-method=fetch -R

--スレーブDBの設定[スタンバイで実施]

cd /var/lib/pgsql/16/data

vim /var/lib/pgsql/16/data/postgresql.conf

primary_conninfo = 'user=repl_user password=repl_user host=192.168.137.74 port=5432 application_name=mmm073'

primary_conninfo = 'user=repl_user password=repl_user host=192.168.137.73 port=5432 application_name=mmm074'

 

--スレーブDBの起動[スタンバイで実施]

systemctl start postgresql-16.service

--レプリケーションの状態を確認[プライマリで実施]
select * from pg_stat_replication;

--スロット使用確認[プライマリで実施]
SELECT slot_name, active FROM pg_replication_slots;

--コンフリクトの確認[スタンバイで実施]
select * from pg_stat_database_conflicts;

 

 

https://qiita.com/zaburo/items/5ca86becda6023b90f7e

Always On 可用性グループ

OS:Windows Server2019
DB:SQL Server 2019

mmm160 (ドメインコントローラ) 192.168.137.160
mmm161 (プライマリ) 192.168.137.161
mmm162 (セカンダリ) 192.168.137.162
ADドメイン名 contoso.com
クラスタ名 cluster01
クラスタIP 192.168.137.163
リスナーのDNS名 listener01
リスナーIP 192.168.137.164
リスナーポート 1433
DB名 testdb
可用性グループ名 testag


1.ActiveDirecotryのインストール[mmm160で実施]
サーバの役割の追加から「ActiveDirecotryドメインサービス」を追加
「このサーバーをドメインコントローラーに昇格する」で、ドメインコントローラーに昇格

 

2.ドメインへの参加[mmm161,mmm162で実施]
SQL1,SQL2のDNSとしてADマシンのIPを指定
システムのプロパティからドメインに参加

3.フェールオーバークラスタリングの追加[mmm161,mmm162で実施]
役割と機能の追加で、フェールオーバークラスタリングを追加
フェールオーバークラスターマネージャーの構成の検証を行いクラスター作成まで行う


4.SQLサーバのインストール[mmm161,mmm162で実施]


5.AlwaysOn可用性グループの有効化[mmm161,mmm162で実施]
SQLサーバ構成マネージャのSQL Serverのプロパティ画面でAlwaysOn可用性グループの有効化を行う
SQL Server再起動

6.SQL Server実行ユーザーの作成[mmm160で実施]
ActiveDirectoryユーザーとコンピューターから、ユーザー(sqlservice)を追加

7.SQL Serverログオン(実行)ユーザーの設定[mmm161,mmm162で実施]
SQLサーバ構成マネージャを起動し、ユーザーを変更

8.TCP/IPの有効化[mmm161,mmm162で実施]
SQLサーバ構成ツールのネットワーク構成のプロトコルメニューから、TCP/IPの有効化
SQL Server再起動

9.Windows Firewallの設定[mmm161,mmm162で実施]
1433ポート開放

10.データおよびログファイル格納場所の作成[mmm161,mmm162で実施]
データおよびログファイルの保存フォルダ作成(C:\SQL_AO_Data)
sqlserviceユーザーが書き込めるように権限を付与

11.バックアップデータ共有フォルダの設定[mmm161で実施]
初期データを同期するための共有フォルダを作成(C:\SQL_AO_Share)
共有設定し、かつsqlserviceユーザーからの書込みを許可

12.DBの作成[mmm161で実施]
データとログの保存位置→C:\SQL_AO_Data

13.DBのバックアップ[mmm161で実施]
バックアップ保存先→C:\SQL_AO_Share


14.可用性グループの作成[mmm161で実施]
SSMSのAlways On高可用性から「新しい可用性グループウイザード」を起動
クラスターの種類: Windows Server フェールオーバークラスタ
データベースレベルの正常性検出 YES
データベースごとのDTCサポート NO
データベースを選択
レプリカの追加
自動フェールオーバー YES
可用性モード 同期コミット
読み取り可能なセカンダリ YES
データの同期設定では、「完全なデータベースとログバックアップ」を選択


15.可用性グループへの結合
レプリカ側で「DBが復元しています」のままの場合
可用性データベースから「可用性グループへの結合」を実施


16.リスナー追加[mmm161で実施]
リスナー追加のウイザードを開く

 

17.包含データベースの設定[mmm161,mmm162で実施]
SQL Server全体のプロパティにて、「包含データベース」を"true"にします


18.包含データベースの設定[mmm161で実施]
DBのプロパティにて「包含の種類」を"部分"に設定

19.包含データベースユーザの作成[mmm161で実施]
データベースのセキュリティ、ユーザーから、新しいユーザーを追加(パスワードが設定されたSQLユーザー)


20.接続確認
sqlcmd -S 192.168.137.164 -U user01 -d testdb -P Aaa!1234


※サーバー認証がWindows認証モードになっている場合、混合モードに変更する

※SSMSで接続する場合、追加の接続パラメーターで「DATABASE=testdb」を指定する


select * from sys.availability_groups;
select * from sys.availability_replicas;

select * from sys.dm_hadr_availability_group_states;
select * from sys.dm_hadr_availability_replica_states;
select * from sys.dm_hadr_database_replica_states;
select * from sys.dm_hadr_database_replica_cluster_states;

select * from sys.dm_hadr_cluster;
select * from sys.dm_hadr_cluster_members;