リファレンスドキュメントhttps://oracle-base.com/articles/11g/data-guard-setup-11gr2Oracle 11GR2
DataGuard(DG)のインストールと構成(フィジカルスタンバイ)
マスターデータベース
前提条件
- オペレーティングシステムを備えた2台のサーバー(物理サーバーまたは仮想マシン)があり、それらにOracleがインストールされています。この例では、Oracle Linux5.6とOracleDatabase11.2.0.2を使用しました。
- メインサーバーには実行中のインスタンスがあります
- スタンバイサーバーはデータベースソフトウェアのみをインストールします
メインサーバーの設定
ロギング
メインデータベースがアーカイブモードになっているかどうかを確認します。
SELECT log_mode FROM v$database; LOG_MODE ------------ NOARCHIVELOG SQL>
アーカイブモードでない場合は、アーカイブモードに切り替えます。
SHUTDOWN IMMEDIATE; STARTUP MOUNT; ALTER DATABASE ARCHIVELOG; ALTER DATABASE OPEN;
Oracleにすべての操作をログに記録させる
ALTER DATABASE FORCE LOGGING;
初期化パラメータ
dbnameおよびdbuniquenameパラメーターの設定を確認してください。現在の例(メインデータベース)では、これらはすべて「DB11G」に設定されています。
SQL> show parameter db_name NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_name string DB11G SQL> show parameter db_unique_name NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_unique_name string DB11G SQL>
スタンバイデータベースのdbnameはプライマリデータベースのdbnameと同じになりますが、プライマリデータベースとスタンバイデータベースのdbunique名の値は異なる必要があります。プライマリデータベースとスタンバイデータベースのdbunique名の値は、LOG_ARCHIVE_CONFIGパラメーターのDG構成設定で使用する必要があります。この例では、スタンバイデータベースの値は「DB11G_STBY」です。
ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(DB11G,DB11G_STBY)
適切なリモートアーカイブログの宛先を設定します。この例では、ローカルロケーションとして高速リカバリ領域を使用しています。以下のパラメーターのSERVICEおよびDB_UNIQUE_NAMEは、スタンバイ・データベース(STANDBY)の値を使用することに注意してください。
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=db11g_stby NOAFFIRM ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DB11G_STBY'; ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE;
LOG_ARCHIVE_FORMAT
また、LOG_ARCHIVE_MAX_PROCESSESパラメーターを適切な値に設定し、REMOTE_LOGIN_PASSWORDFILEパラメーターを排他的に設定する必要があります。ALTER SYSTEM SET LOG_ARCHIVE_FORMAT='%t_%s_%r.arc' SCOPE=SPFILE; ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=30; ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE SCOPE=SPFILE;
以前の設定に加えて、メインサーバーとスタンバイサーバーをいつでも切り替えることができるようにするため。以下のパラメータを設定する必要があります。* _CONVERTパラメーターを調整して、アクティブ・サーバーとスタンバイ・サーバーのファイル名とファイル・パスの違いに適合させます。
ALTER SYSTEM SET FAL_SERVER=DB11G_STBY; --ALTER SYSTEM SET DB_FILE_NAME_CONVERT='DB11G_STBY','DB11G' SCOPE=SPFILE; --ALTER SYSTEM SET LOG_FILE_NAME_CONVERT='DB11G_STBY','DB11G' SCOPE=SPFILE; ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO;
一部のパラメータはデータベースの再起動後にのみ有効になるため(scope = spfile)、上記のパラメータを変更してからデータベースを再起動してください。
サービス設定
$ ORACLE_HOME / network / admin /tnsnames.oraファイルのプライマリデータベースとセカンダリデータベースについて次の情報を入力します。
DB11G = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = ol5-112-dga1)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = DB11G.WORLD) ) ) DB11G_STBY = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = ol5-112-dga2)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = DB11G.WORLD) ) )
メインデータベースをバックアップする
メインデータベースの完全バックアップを実行します。
$ rman target=/ RMAN> BACKUP DATABASE PLUS ARCHIVELOG;
バックアップ制御ファイルとPFILEを作成する
プライマリデータベースにスタンバイデータベースの制御ファイルを作成します。
ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/tmp/db11g_stby.ctl';
プライマリデータベースにスタンバイデータベースのパラメータファイルを作成します。
CREATE PFILE='/tmp/initDB11G_stby.ora' FROM SPFILE;
新しく作成されたパラメータファイル/tmp/initDB11G_stby.oraを変更して、スタンバイデータベースで使用できるようにします(パラメータ値はスタンバイデータベースの関連する値を書き込みます)
*.db_unique_name='DB11G_STBY' *.fal_server='DB11G' *.log_archive_dest_2='SERVICE=db11g ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DB11G'
スタンバイサーバーのインストールと構成(手動)
ファイルをコピーする
スタンバイサーバーに必要なディレクトリを作成します。
$ mkdir -p /u01/app/oracle/oradata/DB11G $ mkdir -p /u01/app/oracle/fast_recovery_area/DB11G $ mkdir -p /u01/app/oracle/admin/DB11G/adump
プライマリサーバーからスタンバイサーバーにファイルをコピーします。
$ # Standby controlfile to all locations. $ scp oracle@ol5-112-dga1:/tmp/db11g_stby.ctl /u01/app/oracle/oradata/DB11G/control01.ctl $ cp /u01/app/oracle/oradata/DB11G/control01.ctl /u01/app/oracle/fast_recovery_area/DB11G/control02.ctl $ # Archivelogs and backups $ scp -r oracle@ol5-112-dga1:/u01/app/oracle/fast_recovery_area/DB11G/archivelog /u01/app/oracle/fast_recovery_area/DB11G $ scp -r oracle@ol5-112-dga1:/u01/app/oracle/fast_recovery_area/DB11G/backupset /u01/app/oracle/fast_recovery_area/DB11G $ # Parameter file. $ scp oracle@ol5-112-dga1:/tmp/initDB11G_stby.ora /tmp/initDB11G_stby.ora $ # Remote login password file. $ scp oracle@ol5-112-dga1:$ORACLE_HOME/dbs/orapwDB11G $ORACLE_HOME/dbs
バックアップはFRAコピーの一部としてスタンバイサーバーにコピーされることに注意してください。バックアップがFRAに保存されていない場合は、バックアップをスタンバイサーバーにコピーし、プライマリサーバーで使用されているのと同じパスにする必要があります。
聞き始める
必ずスタンバイサーバーで監視を開始してください。
$ lsnrctl start
バックアップを復元
変更したPFILEからSPFILEを作成します。
$ export ORACLE_SID=DB11G $ sqlplus / as sysdba SQL> CREATE SPFILE FROM PFILE='/tmp/initDB11G_stby.ora';
制御ファイルとデータファイルを復元する
$ export ORACLE_SID=DB11G $ rman target=/ RMAN> STARTUP MOUNT; RMAN> RESTORE DATABASE;
REDOログを作成する
スタンバイサーバーのオンラインREDOログを作成します。
ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=MANUAL; ALTER DATABASE ADD LOGFILE ('/u01/app/oracle/oradata/DB11G/online_redo01.log') SIZE 50M; ALTER DATABASE ADD LOGFILE ('/u01/app/oracle/oradata/DB11G/online_redo02.log') SIZE 50M; ALTER DATABASE ADD LOGFILE ('/u01/app/oracle/oradata/DB11G/online_redo03.log') SIZE 50M; ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO;
オンラインREDOログに加えて、スタンバイREDOログをスタンバイデータベースとプライマリデータベース(プライマリ/スタンバイスイッチで使用)に作成する必要があります。スタンバイREDOログは、少なくとも最大のオンラインREDOログと同じ大きさで、オンラインログより1つ多く設定する必要があります。以下に示すように、プライマリサーバーとスタンバイサーバーの両方で作成する必要があります。
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 10 ('/u01/app/oracle/oradata/DB11G/standby_redo01.log') SIZE 50M; ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 11 ('/u01/app/oracle/oradata/DB11G/standby_redo02.log') SIZE 50M; ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 12 ('/u01/app/oracle/oradata/DB11G/standby_redo03.log') SIZE 50M; ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 13 ('/u01/app/oracle/oradata/DB11G/standby_redo04.log') SIZE 50M;
上記の操作が完了すると、プライマリデータベースはスタンバイデータベースにログを送信できます。
ログアプリケーションを開始します
スタンバイサーバーでログ受信アプリケーションを起動します。
# Foreground redo apply. Session never returns until cancel. (这个是不会停止会话) #ALTER DATABASE RECOVER MANAGED STANDBY DATABASE; # Background redo apply. Control is returned to the session once the apply process is started. ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
ログアプリケーションをキャンセルする必要がある場合。
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
必要に応じて、次のコマンドを使用してアプリケーションを遅らせることができます。
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DELAY 30 DISCONNECT FROM SESSION; ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; ALTER DATABASE RECOVER MANAGED STANDBY DATABASE NODELAY DISCONNECT FROM SESSION;
スタンバイREDOログを構成している場合は、次のコマンドを使用してリアルタイムログアプリケーションを起動できます。
現在のログファイルを使用したALTERDATABASE RECOVER MANAGED STANDBY DATABASE;
ログ転送のテスト
プライマリサーバーで、アーカイブされた最新のREDOログを確認し、ログの切り替えを強制します。
ALTER SESSION SET nls_date_format='DD-MON-YYYY HH24:MI:SS'; SELECT sequence#, first_time, next_time FROM v$archived_log ORDER BY sequence#; ALTER SYSTEM SWITCH LOGFILE;
新しいアーカイブREDOログがスタンバイ・サーバーに到達し、適用されていることを確認してください。
ALTER SESSION SET nls_date_format='DD-MON-YYYY HH24:MI:SS'; SELECT sequence#, first_time, next_time, applied FROM v$archived_log ORDER BY sequence#;
Dataguardの保護モード(保護モード)
メインデータベースには、次の3つの保護モードがあります。
- 最大可用性:REDO情報が少なくとも1つのスタンバイロケーションのオンラインREDOログおよびスタンバイREDOログに書き込まれる前に、プライマリサービスのトランザクションはコミットされません。使用可能なスタンバイデータベースがない場合、スタンバイデータベースが再び使用可能になるまで、最大パフォーマンスモードと同じように動作します。
- 最大パフォーマンス:プライマリデータベースで送信されたトランザクションは、REDO情報がオンラインREDOログに書き込まれた直後に実行されます。スタンバイサーバーへのREDO情報の送信は非同期であるため、プライマリサーバーのパフォーマンスには影響しません。
- 最大限の保護:REDO情報がオンラインREDOログに書き込まれ、スタンバイREDOログが少なくとも1つの代替場所にある前に、プライマリサービスのトランザクションはコミットされません。適切な代替場所がない場合、プライマリデータベースはシャットダウンされます
デフォルトでは、新しく作成されたスタンバイデータベースの場合、プライマリデータベースは最大パフォーマンスモードになります。
SELECT protection_mode FROM v$database; PROTECTION_MODE -------------------- MAXIMUM PERFORMANCE SQL>
次のコマンドを使用して、これら3つの保護モードを切り替えることができます。
-- Maximum Availability. ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=db11g_stby AFFIRM SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DB11G_STBY'; ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE AVAILABILITY; -- Maximum Performance. ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=db11g_stby NOAFFIRM ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DB11G_STBY'; ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE; -- Maximum Protection. ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=db11g_stby AFFIRM SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DB11G_STBY'; SHUTDOWN IMMEDIATE; STARTUP MOUNT; ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PROTECTION; ALTER DATABASE OPEN;
プライマリデータベースとスタンバイデータベース間の切り替え(切り替え)
次のステートメントを使用して、プライマリデータベースとスタンバイデータベースの役割の切り替えを実行できます。切り替えプロセス全体でデータが失われることはありません。
プライマリデータベースは次のコマンドを実行してスタンバイデータベースに切り替えます
-- Convert primary database to standby CONNECT / AS SYSDBA ALTER DATABASE COMMIT TO SWITCHOVER TO STANDBY; -- Shutdown primary database SHUTDOWN IMMEDIATE; -- Mount old primary database as standby database STARTUP NOMOUNT; ALTER DATABASE MOUNT STANDBY DATABASE; ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
スタンバイサーバーは次のコマンドを実行してプライマリデータベースに切り替えます
-- Convert standby database to primary CONNECT / AS SYSDBA ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY; -- Shutdown standby database SHUTDOWN IMMEDIATE; -- Open old standby database as primary STARTUP;
これが完了したら、ログ転送をテストします。すべてが正常な場合は、別のスイッチを使用してプライマリデータベースを元のサーバーに戻します。
フェイルオーバー
プライマリデータベースが使用できない場合は、次のステートメントを使用して、スタンバイデータベースをプライマリデータベースとしてアクティブ化できます。
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH; ALTER DATABASE ACTIVATE STANDBY DATABASE;
スタンバイデータベースがプライマリデータベースになっているため、完全バックアップをすぐに実行する必要があります
フラッシュバックデータベース
スイッチオーバーはプライマリデータベースとスタンバイデータベースの両方で安全ですが、フェイルオーバーにより、元のプライマリデータベースがスタンバイデータベースに変換されなくなります。フラッシュバックデータベースが有効になっていない場合は、元のプライマリデータベースを破棄して、スタンバイデータベースとして再作成する必要があります。
もう1つの方法は、プライマリデータベースでフラッシュバックデータベースを有効にすることです(必要に応じて、スタンバイデータベースを有効にすることもできます)。これにより、フェイルオーバーが発生した場合に、プライマリデータベースをフェイルオーバー前の時間にフラッシュバックし、すばやく変換できます。スタンバイデータベース。
詳細については、公式リリースドキュメントを参照してください:https://docs.oracle.com/cd/E11882_01/server.112/e41134/scenarios.htm#SBYDB00910
読み取り専用スタンバイデータベースおよび(ADG)Active Data Guard
読み取り専用モードで開くと、アーカイブログの配布は続行されますが、スタンバイデータベースでのログの適用が停止するため、ログリカバリがオンになるまでスタンバイデータベースはますます陳腐化していきます。
SHUTDOWN IMMEDIATE; STARTUP MOUNT; ALTER DATABASE OPEN READ ONLY;
ログアプリケーションを復元するには、実行してください
SHUTDOWN IMMEDIATE; STARTUP MOUNT; ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
11gで、OracleはActive DataGuard機能を導入しました。これにより、スタンバイデータベースを読み取り専用モードで開くことができますが、REDO情報は適用されます。これは、代替のサービスクエリを使用できることを意味しますが、それらはまだ最新です。この機能を使用するには、ライセンスを購入する必要があります。次のコマンドは、ADGを有効にする方法を示しています。
SHUTDOWN IMMEDIATE; STARTUP MOUNT; ALTER DATABASE OPEN READ ONLY; ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;