内容
フィジカルスタンバイのDataGuardで、確認しといたほうが良い項目のメモ。
確認項目
・データベースロール (プライマリ/スタンバイ)
プライマリ機が「PRIMARY」スタンバイ機が「PHYSICAL STANDBY」になっていることを確認。
SQL> select DATABASE_ROLE from v$database;
DATABASE_ROLE
------------------------------------------------
PRIMARY
・保護モード (プライマリ/スタンバイ)
SQL> select protection_mode from v$database;
PROTECTION_MODE
------------------------------------------------------------
MAXIMUM PERFORMANCE
-- MAXIMUM PROTECTION - 保護モード
-- MAXIMUM AVAILABILITY - 可用性モード
-- MAXIMUM PERFORMANCE - パフォーマンスモード
-- RESYNCHRONIZATION - 再同期化モード
-- UNPROTECTED - 保護対象外
-- (プライマリがマウント済だがオープンされていない場合に発生)
・スイッチオーバーの可/不可 (プライマリ/スタンバイ)
詳細はマニュアル参照。
プライマリ機では「TO STANDBY」、スタンバイ機では「NOT ALLOWED」等になっている。
select switchover_status from v$database;
SQL> select switchover_status from v$database;
SWITCHOVER_STATUS
------------------------------------------------------------
TO STANDBY
・Data Guard Broker (プライマリ/スタンバイ)
Data Guard Brokerの有効/無効確認。
SQL> select dataguard_broker from v$database;
DATAGUARD_BROKER
------------------------
DISABLED
・ファストスタート・フェイルオーバー (プライマリ/スタンバイ)
ファストスタート・フェイルオーバーの有効/無効を確認。
SQL> SELECT FS_FAILOVER_STATUS FROM V$DATABASE;
FS_FAILOVER_STATUS
------------------------------------------------------------------
DISABLED
FS_FAILOVER_STATUSre列が「DISABLED」の場合、ファストスタート・フェイルオーバーは無効化されている。
その他のステータスに関しては、以下を参照。
V$DATABASEビューのFS_FAILOVER_STATUS列
http://docs.oracle.com/cd/E16338_01/server.112/b56304/sofo.htm#CHDIDBGI
最後に発生したファストスタート・フェイルオーバーの時刻を確認。
SELECT * FROM V$FS_FAILOVER_STATS;
LAST_FAILOVER_TIME LAST_FAILOVER_REASON
-------------------- ----------------------
2015-05-06 16:09:49 Primary Disconnected
・強制ロギング (プライマリ)
プライマリ機の強制ロギングが有効であることを確認。
-- プライマリで以下を実行。
SQL> SELECT FORCE_LOGGING FROM V$DATABASE;
FORCE_LOG
---------
YES
-- YES - 強制ロギングが有効
-- NO - 強制ロギングが無効
強制ロギング有効/無効の切り替えは、以下のSQLで実施。
-- 有効化
SQL> ALTER DATABASE FORCE LOGGING;
データベースが変更されました。
-- 無効化
SQL> ALTER DATABASE NO FORCE LOGGING;
データベースが変更されました。
・REDOログ/STANDBY REDOログ (プライマリ/スタンバイ)
REDOログ、STANDBY REDOログの構成を確認。
-- ファイルの場所
SQL> select GROUP#,TYPE,MEMBER from v$logfile;
GROUP# TYPE MEMBER
---------- --------------------- --------------------------------------------------
1 ONLINE /u01/app/oracle/oradata/DGTEST/redo01.log
2 ONLINE /u01/app/oracle/oradata/DGTEST/redo02.log
3 ONLINE /u01/app/oracle/oradata/DGTEST/redo03.log
4 STANDBY /u01/app/oracle/oradata/DGTEST/sredo01.log
5 STANDBY /u01/app/oracle/oradata/DGTEST/sredo02.log
6 STANDBY /u01/app/oracle/oradata/DGTEST/sredo03.log
7 STANDBY /u01/app/oracle/oradata/DGTEST/sredo04.log
-- ファイルサイズ
SQL> SELECT GROUP#, THREAD#, BYTES/1024/1024 MB FROM V$LOG
2 UNION
3 SELECT GROUP#, THREAD#, BYTES/1024/1024 MB FROM V$STANDBY_LOG;
GROUP# THREAD# MB
---------- ---------- ----------
1 1 50
2 1 50
3 1 50
4 0 50
5 0 50
6 0 50
7 0 50
・アーカイブREDOログ転送状況 (プライマリ/スタンバイ)
アーカイブREDOログが、プライマリ機→スタンバイ機へ転送されていることを確認。
スタンバイ機の状況を確認。
SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY 1;
SEQUENCE# FIRST_TIME NEXT_TIME
---------- ------------------- -------------------
16 2015-05-06 16:07:39 2015-05-06 16:09:49
17 2015-05-06 16:09:49 2015-05-06 16:32:17
18 2015-05-06 16:32:17 2015-05-06 16:32:20
プライマリ機でログスイッチを複数回実施。
SQL> ALTER SYSTEM SWITCH LOGFILE;
システムが変更されました。
SQL> ALTER SYSTEM SWITCH LOGFILE;
システムが変更されました。
SQL> ALTER SYSTEM SWITCH LOGFILE;
システムが変更されました。
再度、スタンバイ機の状況を確認。
SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
SEQUENCE# FIRST_TIME NEXT_TIME
---------- ------------------- -------------------
16 2015-05-06 16:07:39 2015-05-06 16:09:49
17 2015-05-06 16:09:49 2015-05-06 16:32:17
18 2015-05-06 16:32:17 2015-05-06 16:32:20
19 2015-05-06 16:32:20 2015-05-06 16:37:07
20 2015-05-06 16:37:07 2015-05-06 16:37:09
21 2015-05-06 16:37:09 2015-05-06 16:37:11
・REDO Apply(MRPプロセス) (スタンバイ)
REDO Applyが動作しているかどうか確認。
-- スタンバイ機で以下を実施
SQL> SELECT PROCESS, STATUS FROM V$MANAGED_STANDBY WHERE PROCESS LIKE 'MRP%';
-- REDO Applyが起動している場合
PROCESS STATUS
--------------------------- ------------------------------------
MRP0 APPLYING_LOG
-- REDO Applyが停止している場合
レコードが選択されませんでした。
REDO Applyの起動・停止は、以下のSQLで実施。
-- 起動
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
データベースが変更されました。
-- 停止
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
データベースが変更されました。
・REDOログ適用状況 (プライマリ/スタンバイ)
REDOログの適用状況を確認。
-- スタンバイ機で以下のSQLを実施。
-- APPLIED列が「YES」になっていることを確認。
SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
SEQUENCE# FIRST_TIME NEXT_TIME APPLIED
---------- ------------------- ------------------- ---------------------------
…(省略)…
29 2015-05-09 22:15:14 2015-05-09 22:15:16 YES
30 2015-05-09 22:15:16 2015-05-09 22:15:21 YES
31 2015-05-09 22:15:21 2015-05-10 00:18:21 YES
32 2015-05-10 00:18:21 2015-05-10 00:41:37 NO
33 2015-05-10 00:41:37 2015-05-10 00:41:38 NO
34 2015-05-10 00:41:38 2015-05-10 00:41:40 NO
APPLIEDに「NO」がある場合、REDO Applyが起動していることを確認。
-- REDO Applyの状況確認
SQL> SELECT PROCESS, STATUS FROM V$MANAGED_STANDBY WHERE PROCESS LIKE 'MRP%';
レコードが選択されませんでした。
-- REDO Applyの起動
SQL> alter database recover managed standby database using current logfile disconnect from session;
データベースが変更されました。
-- 適用状況の確認
SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
SEQUENCE# FIRST_TIME NEXT_TIME APPLIED
---------- ------------------- ------------------- ---------------------------
…(省略)…
29 2015-05-09 22:15:14 2015-05-09 22:15:16 YES
30 2015-05-09 22:15:16 2015-05-09 22:15:21 YES
31 2015-05-09 22:15:21 2015-05-10 00:18:21 YES
32 2015-05-10 00:18:21 2015-05-10 00:41:37 YES
33 2015-05-10 00:41:37 2015-05-10 00:41:38 YES
34 2015-05-10 00:41:38 2015-05-10 00:41:40 IN-MEMORY
・アーカイブギャップ (スタンバイ)
アーカイブギャップが発生していないことを確認。
-- スタンバイ機で以下を実施
SQL> SELECT * FROM V$ARCHIVE_GAP;
-- アーカイブギャップが発生してない場合
レコードが選択されませんでした。
-- アーカイブギャップが発生している場合
THREAD# LOW_SEQUENCE# HIGH_SEQUENCE#
----------- ------------- --------------
1 7 10
・アーカイブトレース (プライマリ/スタンバイ)
アーカイブトレースの有効/無効を確認。
SQL> select name,value from v$parameter where name = 'log_archive_trace';
NAME VALUE
-------------------- ------------------------------
log_archive_trace 0
詳細は以下を参照
http://docs.oracle.com/cd/E16338_01/server.112/b56302/trace.htm#g638947
・LOG_ARCHIVE_DEST_n初期化パラメータ (プライマリ/スタンバイ)
LOG_ARCHIVE_DEST_nの内容を確認。初期化パラメータとv$archive_destビューを使用した詳細な情報を確認する。
-- LOG_ARCHIVE_DEST_nの設定値を確認。
SQL> select name,value from v$parameter where name in ('log_archive_dest_2','log_archive_dest_state_2');
NAME VALUE
------------------------------ --------------------------------------------------
log_archive_dest_2 SERVICE=DGTESTS ASYNC VALID_FOR=(ONLINE_LOGFILES,
PRIMARY_ROLE) DB_UNIQUE_NAME=DGTESTS
log_archive_dest_state_2 ENABLE
-- LOG_ARCHIVE_DEST_nの詳細な設定値を確認。
-- print_tableプロシージャについては、以下を参照。
-- https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1035431863958
SQL> set serveroutput on
SQL> exec print_table('select * from v$archive_dest where dest_name = ''LOG_ARCHIVE_DEST_2''') ;
================
DEST_ID : 2
DEST_NAME : LOG_ARCHIVE_DEST_2
STATUS : VALID
BINDING : OPTIONAL
NAME_SPACE : SYSTEM
TARGET : STANDBY
ARCHIVER : LGWR
SCHEDULE : ACTIVE
DESTINATION : DGTESTS
LOG_SEQUENCE : 41
REOPEN_SECS : 300
DELAY_MINS : 0
MAX_CONNECTIONS : 1
NET_TIMEOUT : 30
PROCESS : LGWR
REGISTER : YES
FAIL_DATE :
FAIL_SEQUENCE : 0
FAIL_BLOCK : 0
FAILURE_COUNT : 1
MAX_FAILURE : 0
ERROR :
ALTERNATE : NONE
DEPENDENCY : NONE
REMOTE_TEMPLATE : NONE
QUOTA_SIZE : 0
QUOTA_USED : 0
MOUNTID : 0
TRANSMIT_MODE : ASYNCHRONOUS
ASYNC_BLOCKS : 61440
AFFIRM : NO
TYPE : PUBLIC
VALID_NOW : YES
VALID_TYPE : ONLINE_LOGFILE
VALID_ROLE : PRIMARY_ROLE
DB_UNIQUE_NAME : DGTESTS
VERIFY : NO
COMPRESSION : DISABLE
APPLIED_SCN : 313063
================
PL/SQLプロシージャが正常に完了しました。
現場ではprint_tableプロシージャを作れないので、XMLで取得を検討。
-- 「-S」オプションでログイン
-- sqlplus -S / as sysdba
SQL> set pages 0
SQL> set lines 10000
SQL> set long 10000000
SQL> set trimspool on
SQL> col xml for a1000
SQL> spool /tmp/log_archive_dest_2.xml
SQL> select dbms_xmlgen.getxml('select * from v$archive_dest where dest_name = ''LOG_ARCHIVE_DEST_2''') xml from dual;
SQL> spool off
SQL> exit
<?xml version="1.0"?>
<ROWSET>
<ROW>
<DEST_ID>2</DEST_ID>
<DEST_NAME>LOG_ARCHIVE_DEST_2</DEST_NAME>
<STATUS>VALID</STATUS>
<BINDING>OPTIONAL</BINDING>
…(省略)…
<VALID_ROLE>PRIMARY_ROLE</VALID_ROLE>
<DB_UNIQUE_NAME>DGTESTS</DB_UNIQUE_NAME>
<VERIFY>NO</VERIFY>
<COMPRESSION>DISABLE</COMPRESSION>
<APPLIED_SCN>313063</APPLIED_SCN>
</ROW>
</ROWSET>
linuxの場合、grepやsedで整形してみたりする。
コマンド
echo '---------'; grep -v '<?xml version="1.0"?>\|<.*ROWSET>\|<ROW>' log_archive_dest_2.xml | sed -e 's/^[ ]*//g; s/<\/ROW>/---------/g; s/<\/.*>//g; s/<\(.*\)>/\1: /g'
結果
---------
DEST_ID: 2
DEST_NAME: LOG_ARCHIVE_DEST_2
STATUS: VALID
BINDING: OPTIONAL
…(省略)…
VALID_ROLE: PRIMARY_ROLE
DB_UNIQUE_NAME: DGTESTS
VERIFY: NO
COMPRESSION: DISABLE
APPLIED_SCN: 313063
---------