以下のようなDataGuard環境を作成する手順のメモ。
- Oracle Database 19c シングルインスタンスデータベース
- プライマリとスタンバイは別筐体
- 高速リカバリ領域を使用
- データファイルの格納パスはプライマリとスタンバイで異なる
- DB_NAMEとプライマリのDB_UNIQUE_NAMEはdb19p
- スタンバイのDB_UNIQUE_NAMEはdb19s
プライマリ・スタンバイ双方の設定
tnsnames.oraにお互いの接続設定を追記しておく。
db19p =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = oradbs.dn.home)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = db19p)
)
)
db19s =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = oradbs2.dn.home)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = db19s)
)
)
プライマリ側の設定
事前にデータベースは作成済みの前提。
listener.oraにリスナーの静的構成の設定を行う。
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = db19p)
(ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1)
(SID_NAME = db19p)
)
)
リスナーは再起動するかリロードしておく。
lsnrctl reload
データベースをアーカイブログモードに変更し、強制ロギングを有効化する。
shu immediate
startup mount
alter database archivelog;
alter database force logging;
スタンバイREDOログを作成する。既存のREDOログと同じサイズのものを、既存のREDOロググループの数+1となるように作成する。
-- 既存のREDOログの確認
SQL> select group#, bytes/1024/1024 MB from v$log;
GROUP# MB
---------- ----------
1 200
3 200
2 200
alter database add standby logfile
group 4 ('/u01/app/oracle/oradata/DB19P/stredo01.log') size 200M,
group 5 ('/u01/app/oracle/oradata/DB19P/stredo02.log') size 200M,
group 6 ('/u01/app/oracle/oradata/DB19P/stredo03.log') size 200M,
group 7 ('/u01/app/oracle/oradata/DB19P/stredo04.log') size 200M;
関連する初期化パラメータを変更し、再起動する。
alter system set log_archive_config='dg_config=(db19p,db19s)';
alter system set log_archive_dest_1='location=use_db_recovery_file_dest valid_for=(all_logfiles,all_roles) db_unique_name=db19p';
alter system set log_archive_dest_2='service=db19s async valid_for=(online_logfiles,primary_role) db_unique_name=db19s';
alter system set log_archive_dest_state_1=enable;
alter system set log_archive_dest_state_2=enable;
alter system set db_file_name_convert='/DB19S/','/DB19P/' scope=spfile;
alter system set log_file_name_convert='/DB19S/','/DB19P/' scope=spfile;
alter system set fal_client='db19p';
alter system set fal_server='db19s';
alter system set standby_file_management=auto;
alter system set remote_login_passwordfile=exclusive scope=spfile;
shu immediate
startup
スタンバイにパスワードファイルをコピーする。
scp $ORACLE_HOME/dbs/orapwdb19p oracle@oradbs2.dn.home:$ORACLE_HOME/dbs/orapwdb19s
スタンバイ側の設定
listener.oraにリスナーの静的構成の設定を行う。
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = db19s)
(ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1)
(SID_NAME = db19s)
)
)
リスナーは再起動するかリロードしておく。
lsnrctl reload
DB_NAMEだけ記載した初期化パラメータファイルを作成。
cat <<EOF > $ORACLE_HOME/dbs/initdb19s.ora
db_name='db19p'
EOF
必要なディレクトリを作成。監査ファイルの出力先と、高速リカバリ領域、データファイルの格納先。
mkdir -p $ORACLE_BASE/admin/db19s/adump
mkdir $ORACLE_BASE/fast_recovery_area
mkdir $ORACLE_BASE/oradata/DB19S
ORACLE_SID を設定して、インスタンスを nomount で起動。
export ORACLE_SID=db19s
sqlplus / as sysdba
startup nomount
RMANでDuplicateコマンドを実行し、スタンバイデータベースを作成。
rman target sys/oracle@db19p auxiliary sys/oracle@db19s
run {
allocate channel prim type disk;
allocate auxiliary channel stby type disk;
duplicate target database for standby from active database
spfile
parameter_value_convert 'db19p','db19s'
set db_name='db19p'
set db_unique_name='db19s'
set log_archive_config='dg_config=(db19p,db19s)'
set log_archive_dest_1='location=use_db_recovery_file_dest valid_for=(all_logfiles,all_roles) db_unique_name=db19s'
set log_archive_dest_2='service=db19p async valid_for=(online_logfiles,primary_role) db_unique_name=db19p'
set db_file_name_convert='/DB19P/','/DB19S/'
set log_file_name_convert='/DB19P/','/DB19S/'
set fal_client='db19s'
set fal_server='db19p'
set control_files='/u01/app/oracle/oradata/DB19S/control01.ctl';
}
特にエラーがなければスタンバイデータベースの作成は完了。
コメント