LoginSignup
15
16

More than 5 years have passed since last update.

Oracle DataGuard(フィジカルスタンバイ)で確認する項目

Last updated at Posted at 2015-05-10

内容

フィジカルスタンバイの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

/tmp/log_archive_dest_2.xml
<?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
---------
15
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
16