--------------------ファイルコピーによる方法--------------------
(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データをコピー[レプリカで実施]
-- 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;