RMANのアクティブデータベース複製を使ったスタンバイデータベースの作成

以下のような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';
}

特にエラーがなければスタンバイデータベースの作成は完了。

コメント