Data Guard プライマリ データベースを準備する

Data Guard には、プライマリ データベースと少なくとも 1 つのスタンバイ データベースが必要です。Bare Metal Solution 上に Data Guard を設定する前に、プライマリ データベースを作成してください。

このガイド全体を通して、次の例を使用します。

データベースの一意の名前 サーバーのホスト名 RAC インスタンス名 役割
DBDG_SITE1 site1db1site1db2 DBDG_SITE11DBDG_SITE12 プライマリ
DBDG_SITE2 site2db1site2db2 DBDG_SITE21DBDG_SITE22 スタンバイ

このガイドの Oracle を実行する Bare Metal Solution サーバーには、次の環境変数が構成されています。

環境変数名
ORACLE_BASE /apps/oracle/oracle_base
ORACLE_HOME /apps/oracle/19.0.0/db_home1

設定によっては、環境変数のパスの変更が必要になる場合があります。

プライマリ データベースを設定する

  1. プライマリ データベースをホストする最初の Bare Metal Solution サーバーにログインします。

  2. /etc/oratab ファイルで、oraenv コマンドがプライマリ データベースの環境変数を設定できるようにエントリを追加します。各ノードで実行中のインスタンスと一致するようにインスタンス名を変更し、Oracle データベース ホームのフルパスを指定します。

    DBDG_SITE11:ORACLE_HOME:N
    
  3. プライマリ データベースに接続できるように、ORACLE_SID 環境変数を設定します。

    source oraenv <<< "DBDG_SITE11"
    

    レスポンス The Oracle base has been set to /apps/oracle/oracle_base が返されます。

データベース ロギングを構成し、フラッシュバック データベースを有効にする

  1. SQL*Plus を起動して force logging を有効にし、データベースに追加された nologging テーブルスペースがログに記録されるようにします。

    sqlplus / as sysdba
    
    ALTER DATABASE FORCE LOGGING;
    
  2. archivelog modeflashback database がオンであることを確認します。

    ARCHIVE LOG LIST;
    SELECT LOG_MODE, FLASHBACK_ON FROM V$DATABASE;
    

    archivelog modeflashback database がオフになっている場合は、次の SQL コマンドでオンにします。

    1. クラスタ化されたデータベースを停止して、必要な変更を行います。

       srvctl stop database -d 
      
    2. 必要な SQL コマンドを実行して archivelog modeflashback database をオンにします。

       STARTUP MOUNT;
       ALTER DATABASE ARCHIVELOG;
       ALTER DATABASE FLASHBACK ON;
       ALTER SYSTEM SET DB_FLASHBACK_RETENTION_TARGET=1440 SID='*' SCOPE=BOTH;
       ALTER DATABASE OPEN;
       SHUTDOWN IMMEDIATE;
       EXIT;
      
    3. クラスタ化されたデータベースを再び開始します。

       srvctl start database -d DBDG_SITE1
      

Data Guard 用にデータベースを準備する

  1. プライマリ データベースをホストする最初の Bare Metal Solution サーバーにログインし、プライマリ データベースに接続できるように ORACLE_SID 環境変数を設定します。

    source oraenv <<< "DBDG_SITE11"
    

    レスポンス The Oracle base has been set to /apps/oracle/oracle_base が返されます。

  2. SQL*Plus を起動して、Data Guard の構成とサービスに必要なデータベース初期化パラメータを変更します。

    sqlplus / as sysdba
    
    ALTER SYSTEM SET LOG_ARCHIVE_FORMAT='%t_%s_%r.arc' SID='*' SCOPE=SPFILE;
    ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=8 SID='*' SCOPE=BOTH;
    ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE SID='*' SCOPE=SPFILE;
    ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO SID='*' SCOPE=BOTH;
    
  3. データベースにスタンバイ REDO ログが存在することを確認します。各スレッドには、オンライン REDO ロググループの数よりも 1 つ多いスタンバイ REDO ロググループが必要です。

    SELECT 'Logfile groups in thread ' || THREAD# || ': ' || COUNT(*) FROM V$LOG GROUP BY THREAD#
    UNION
    SELECT 'Standby logfile groups in thread ' || THREAD# || ': ' || COUNT(*) FROM V$STANDBY_LOG GROUP BY THREAD#;
    

    次の例では、スレッドごとに 4 つのオンライン REDO ログがあり、スタンバイ REDO ロググループは作成されていません。オンライン REDO ロググループは 4 つあるため、スレッドごとに 5 つのスタンバイ REDO ロググループを作成する必要があります。

    Logfile groups in thread 1: 4
    Logfile groups in thread 2: 4
    
  4. 十分なスタンバイ REDO ロググループが存在する場合は、この手順をスキップします。スタンバイ REDO ロググループは、各オンライン REDO ロググループと同じサイズにする必要があります。次の PL/SQL コードで、必要な数のスタンバイ REDO ロググループを作成します。

    SET FEEDBACK OFF
    SET SERVEROUTPUT ON
    DECLARE
      CURSOR cur_thread IS
        SELECT THREAD# THREAD, COUNT(*) COUNT FROM V$LOG GROUP BY THREAD#;
      standbylog_count NUMBER := 0;
      standbylog_group NUMBER := 0;
      standbylog_size NUMBER := 0;
      last_group_number NUMBER;
      sqlstmt VARCHAR2(200);
    BEGIN
      SELECT MAX(GROUP#), MAX(BYTES)
    INTO last_group_number, standbylog_size
    FROM V$LOG;
      standbylog_group := last_group_number + 1;
      FOR rec_thread IN cur_thread LOOP
    standbylog_count := rec_thread.count + 1;
    FOR i IN 1..standbylog_count LOOP
      sqlstmt := 'ALTER DATABASE ADD STANDBY LOGFILE THREAD ' || rec_thread.thread || ' GROUP ' || TO_CHAR(standbylog_group) || ' SIZE ' || standbylog_size || ';';
      DBMS_OUTPUT.PUT_LINE( sqlstmt);
      standbylog_group := standbylog_group + 1;
    END LOOP;
      END LOOP;
    END;
    /
    SET FEEDBACK ON
    

    次の出力例では、2 つのスレッドのそれぞれに 5 つのスタンバイ REDO ロググループを作成するよう指示しています。

    ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP  9 SIZE 2147483648;
    ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 10 SIZE 2147483648;
    ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 11 SIZE 2147483648;
    ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 12 SIZE 2147483648;
    ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 13 SIZE 2147483648;
    ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 GROUP 14 SIZE 2147483648;
    ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 GROUP 15 SIZE 2147483648;
    ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 GROUP 16 SIZE 2147483648;
    ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 GROUP 17 SIZE 2147483648;
    ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 GROUP 18 SIZE 2147483648;
    
  5. 構成に対してスタンバイ REDO ログが正しく設定されていることを確認します。

    SELECT 'Logfile groups in thread ' || THREAD# || ': ' || COUNT(*) FROM V$LOG GROUP BY THREAD#
    UNION
    SELECT 'Standby logfile groups in thread ' || THREAD# || ': ' || COUNT(*) FROM V$STANDBY_LOG GROUP BY THREAD#;
    

    次の出力には、スレッドごとに 4 つのオンライン REDO ロググループと、スレッドごとに 5 つのスタンバイ REDO ロググループがあります。

    Logfile groups in thread 1: 4
    Logfile groups in thread 2: 4
    Standby logfile groups in thread 1: 5
    Standby logfile groups in thread 2: 5
    
  6. SQL*Plus を終了します。

    EXIT;
    

データベース パラメータとパスワード ファイルをスタンバイ サーバーにコピーする

  1. データベース パラメータ ファイルを作成してスタンバイ サーバーにコピーします。

    1. スタンバイ データベース パラメータ ファイル(pfile)用のフォルダを作成します。

      mkdir /home/oracle/backup
      
    2. SQL*Plus を起動して、スタンバイ データベース pfile を作成します。

      sqlplus / as sysdba
      
      CREATE PFILE='/home/oracle/backup/initDBDG_SITE21.ora' FROM SPFILE;
      
    3. SQL*Plus を終了してから、pfile をスタンバイの場所にある最初の Bare Metal Solution サーバーにコピーします。

      EXIT;
      
      scp /home/oracle/backup/initDBDG_SITE21.ora ORACLE_USERNAME@site2db1:/apps/oracle/19.0.0/db_home1/dbs/initDBDG_SITE21.ora
      
  2. SYS リモート ログインのパスワードは安全に保管してください。パスワードがわからない場合は、パスワードを再設定します。

  3. パスワード ファイルをスタンバイ クラスタにコピーします。

    1. srvctl コマンドを使用して、パスワード ファイルの場所を取得します。

      srvctl config database -db DBDG_SITE1 | grep -i password
      

      次の出力は、ASM 内のパスワード ファイル ストアの場所を示しています。

        Password file: +DATA/DBDG_SITE1/PASSWORD/pwdDBDG_SITE1.287.1086459663
      
    2. asmcmd コマンドを使用して、ローカル ファイル システム上にパスワード ファイルの一時コピーを作成します。

      asmcmd cp +DATA/DBDG_SITE1/PASSWORD/pwdDBDG_SITE1.287.1086459663 /tmp/orapwDBDG_SITE21
      
    3. スタンバイの場所にある最初の Bare Metal Solution サーバーにパスワード ファイルをコピーし、プライマリの場所にある Bare Metal Solution サーバーからこの一時コピーを削除します。

      scp /tmp/orapwDBDG_SITE21 ORACLE_USERNAME@site2db1:/apps/oracle/19.0.0/db_home1/dbs/orapwDBDG_SITE21
      rm /tmp/orapwDBDG_SITE21
      

データベース接続を構成する

プライマリ データベースの場所にある Bare Metal Solution サーバーにある $ORACLE_HOME/network/admin/tsnames.ora ファイルを編集し、ネットサービスの構成を更新します。このファイルには、各データベースのエントリと、データベース複製時に使用される一時エントリ(後で削除します)の 3 つのエントリがあります。

DBDG_SITE1 =
  (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = DBDG_SITE1_SCAN_HOSTNAME)(PORT = 1521))
      (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = DBDG_SITE1) (UR=A)
      )
  )

DBDG_SITE2 =
 (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = DBDG_SITE2_SCAN_HOSTNAME)(PORT = 1521))
      (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = DBDG_SITE2) (UR=A)
      )
  )

DBDG_SITE2_FOR_DUPLICATION =
  (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = site2db1)(PORT = 1523))
      (CONNECT_DATA =
          (SERVER = DEDICATED)
          (INSTANCE_NAME = DBDG_SITE21) (UR=A)
      )
  )

これで、プライマリ データベースを Data Guard 構成で使用できるようになりました。

次のステップ

Data Guard のスタンバイ データベースを作成します。