Oracle 12c環境下でのDataGuard構築
フィジカルスタンバイ構成でのDataGuardを構成。
それぞれなぜやっている手順か不明だったりしたので
手順に勝手な解釈入れて備忘録として記載。
■作業前提
・ホスト名はadg-01,adg-02でインスタンス名はそれぞれorcl01,orcl02
・Oracle 12c環境
・Oracleはnode1,node2でインストール済み
・DB作成自体はnode1のみで実施済み。node2のDBはrmanの複製で作る。
■作業手順
1.force loggingモード設定
(node1)
DataGuardがREDOを使った動機を行うため、nologgingによる更新で
プライマリ、スタンバイ間での不整合を防ぐためだと思われる。
SQL> alter database force logging;
2.アーカイブログモード設定
(node1)
SQL> archive log list;
SQL> alter database archivelog;
3.パスワードファイルをスタンバイ側に転送
(node1)
これをやらないと後続で実施するrmanによるスタンバイ側への接続が少なくともできない。
/u01/app/oracle/product/12.1.0/dbhome_1/dbs/orapworcl01
を
/u01/app/oracle/product/12.1.0/dbhome_1/dbs/orapworcl02
としてnode2に転送。
4.スタンバイREDOログファイル作成
(node1)
プライマリ側で実施しているが、最終的にDBの複製が行われるためスタンバイDB側にこのREDO設定が反映される。
プライマリ側はスタンバイREDOログ不要っぽく感じるが、切替が発生した場合にプライマリ側も
スタンバイとして動く可能性があるから作ると勝手に想像してる。
SQL> ALTER DATABASE ADD standby logfile
2 group 4('/DATA/orcl01/stnby04.log') size 100M,
3 group 5('/DATA/orcl01/stnby05.log') size 100M,
4 group 6('/DATA/orcl01/stnby06.log') size 100M,
5 group 7('/DATA/orcl01/stnby07.log') size 100M;
5.スタンバイ用pfile作成
(node1)
プライマリ側でパラメータファイル出力させることで、スタンバイ側の
パラメータファイルを一からつくる手間を減らすためにやってるのかな。たぶん。
スタンバイ用の初期化パラメータファイルを作成する理由は、
とりあえずrmanのためのnomount状態での起動実現を確保するため。
SQL> create pfile from spfile;
を実行後に
/u01/app/oracle/product/12.1.0/dbhome_1/dbs/initorcl01.ora
を
/u01/app/oracle/product/12.1.0/dbhome_1/dbs/initorcl02.ora
としてnode2に転送。
■スタンバイデータベース側のpfile
.__data_transfer_cache_size=0
.__db_cache_size=1275068416
.__java_pool_size=16777216
.__large_pool_size=33554432
.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
.__pga_aggregate_target=1207959552
.__sga_target=1811939328
.__shared_io_pool_size=83886080
.__shared_pool_size=385875968
.__streams_pool_size=0
*.audit_file_dest='/u01/app/oracle/admin/orcl02/adump'
*.audit_trail='db'
*.compatible='12.1.0.2.0'
*.control_files='/DATA/orcl02/control01.ctl','/DATA/orcl02/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='orcl01'
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orcl02XDB)'
*.encrypt_new_tablespaces='DDL'
*.log_archive_format='%t_%s_%r.dbf'
*.memory_target=2880m
*.nls_language='JAPANESE'
*.nls_territory='JAPAN'
*.open_cursors=300
*.processes=300
*.remote_login_passwordfile='EXCLUSIVE'
*.undo_tablespace='UNDOTBS1'
###
# changing parameter for Data Guard
# refer https://docs.oracle.com/cd/E57425_01/121/SBYDB/create_ps.htm
###
*.db_unique_name='orcl02'
*.log_archive_config='dg_config=(orcl01,orcl02)'
*.log_archive_dest_1='LOCATION=/DATA/archive VALID_FOR=(all_logfiles,all_roles) DB_UNIQUE_NAME=orcl02'
*.log_archive_dest_2='SERVICE=orcl01 ASYNC VALID_FOR=(online_logfiles,primary_role) DB_UNIQUE_NAME=orcl01'
*.fal_server='orcl01'
*.db_file_name_convert='/DATA/orcl01','/DATA/orcl02'
*.log_file_name_convert='/DATA/orcl01','/DATA/orcl02'
*.standby_file_management='AUTO'
■プライマリデータベース側のpfile
.__data_transfer_cache_size=0
.__db_cache_size=1275068416
.__java_pool_size=16777216
.__large_pool_size=33554432
.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
.__pga_aggregate_target=1207959552
.__sga_target=1811939328
.__shared_io_pool_size=83886080
.__shared_pool_size=385875968
.__streams_pool_size=0
*.audit_file_dest='/u01/app/oracle/admin/orcl01/adump'
*.audit_trail='db'
*.compatible='12.1.0.2.0'
*.control_files='/DATA/orcl01/control01.ctl','/DATA/orcl01/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='orcl01'
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orcl01XDB)'
*.local_listener='LISTENER_ORCL01'
*.log_archive_format='%t_%s_%r.dbf'
*.memory_target=2880m
*.nls_language='JAPANESE'
*.nls_territory='JAPAN'
*.open_cursors=300
*.processes=300
*.remote_login_passwordfile='EXCLUSIVE'
*.undo_tablespace='UNDOTBS1'
###
# changing parameter for Data Guard
# refer https://docs.oracle.com/cd/E57425_01/121/SBYDB/create_ps.htm
###
*.log_archive_config='dg_config=(orcl02,orcl01)'
*.log_archive_dest_1='LOCATION=/DATA/archive VALID_FOR=(all_logfiles,all_roles) DB_UNIQUE_NAME=orcl01'
*.log_archive_dest_2='SERVICE=orcl02 ASYNC VALID_FOR=(online_logfiles,primary_role) DB_UNIQUE_NAME=orcl02'
*.remote_login_passwordfile='EXCLUSIVE'
*.fal_server='orcl02'
*.db_file_name_convert='/DATA/orcl02','/DATA/orcl01'
*.log_file_name_convert='/DATA/orcl02','/DATA/orcl01'
*.standby_file_management='AUTO'
6.スタンバイ側にlistner.oraファイルとtnsnames.oraファイル作成
(node2)
$ vi listener.ora
# listener.ora Network Configuration File: /u01/app/oracle/product/12.1.0/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = adg-02)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(SID_NAME=orcl02)
(ORACLE_HOME=/u01/app/oracle/product/12.1.0/dbhome_1)
)
)
$ vi tnsnames.ora
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/12.1.0/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
ORCL01 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = adg-01)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl01)
)
)
ORCL02 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = adg-02)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl02)
)
)
$ lsnrctl start
7.プライマリ側のtnsnames.oraファイル修正
$ vi tnsnames.ora
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/12.1.0/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
LISTENER_ORCL01 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = adg-01.compute-a15933.oraclecloud.internal)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl01)
)
)
ORCL01 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = adg-01)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl01)
)
)
ORCL02 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = adg-02)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl02)
)
)
8.pfileからspfile作成
(node1,node2両方)
$ sqlplus / as sysdba
SQL> create spfile froafile;
9.rmanによる接続用にnomount起動
(node2)
!mkdir -p /u01/app/oracle/admin/orcl02/adump
!mkdir -p /DATA/orcl02/controlfile
startup nomount
10.rmanによる複製
(node1)
$ rman target 'sys/WS@orcl01' auxiliary 'sys/WS@orcl02'
RMAN> duplicate target database for standby from active database;
11.DBロールの確認
(node1,node2)
select database_role from v$database;
プライマリ側は
DATABASE_ROLE
----------------
PRIMARY
と表示されて
スタンバイ側は
DATABASE_ROLE
------------------------------------------------
PHYSICAL STANDBY
と表示されるはず。
11.REDO適用の開始
スタンバイ側をOPENでなおかつバックグラウンドでREDO適用が開始されるような状況にする。
(node2)
ALTER DATABASE OPEN ;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;
SQL> select process,pid,status,thread#,sequence# from v$managed_standby where process='MRP0';
PROCESS
---------------------------
PID
------------------------------------------------------------------------
STATUS THREAD# SEQUENCE#
------------------------------------ ---------- ----------
MRP0
15497
APPLYING_LOG 1 22
SQL> SELECT open_mode FROM v$database;
OPEN_MODE
------------------------------------------------------------
READ ONLY WITH APPLY