7 DG PDB環境でのスイッチオーバーおよびフェイルオーバー

Oracle Data Guard Brokerを使用して、DG PDB環境でスイッチオーバーおよびフェイルオーバー操作を管理する方法について学習します。

この章のトピックは、次のとおりです:

DG PDB環境でのスイッチオーバーおよびフェイルオーバーの概要

Oracle Data Guard Brokerでは、スイッチオーバー操作またはフェイルオーバー操作を使用して、ソースPDBおよびその指定されたターゲットPDBのロールを元に戻すことができます。

  • PDBのスイッチオーバー

    ソースPDBとその指定されたターゲットPDB間の計画的なロール・リバーサルです。ブローカは、ロールを切り替える前に、ターゲットPDBがソースPDBによって生成されたすべてのREDOを適用したことを確認します。

    スイッチオーバーの管理の一環として、ブローカは、新しいソースPDBから指定されたターゲットPDBへのREDO転送を自動的に設定し、新しいターゲットPDBでREDO Applyサービスを開始します。

  • PDBのフェイルオーバー

    ロール遷移のことで、ソースPDBに障害が発生したかアクセスできなくなった後に、指定されたターゲットPDBがソースPDBロールに遷移します。ソースPDBが使用できない場合にのみフェイルオーバーを実行することをお薦めします。

PDBスイッチオーバーの実行

PDBスイッチオーバーは、ソースPDBとその指定されたターゲットPDB間のロール・リバーサルです。DGMGRLコマンドを使用してPDBスイッチオーバーを実行します。

ブローカによるDG PDB環境でのスイッチオーバーの実行方法

スイッチオーバーを開始すると、ブローカは次の処理を実行します。

  1. 指定されたターゲット・データベースがアクセス可能であり、ターゲットPDBが存在し、ターゲットPDBが指定されたDG PDBであることを確認します。

  2. ソースPDBおよびターゲットPDBが正しい状態であることを確認します。ソースPDBが読取り/書込みモードでオープンしており、ターゲットPDBがリカバリ・モードである必要があります。

  3. ターゲットPDBがソースPDBの現在のREDOストリームをリカバリしていることを確認します。

  4. すべてのインスタンスでソースPDBをクローズします。

  5. ソースPDBをスタンバイ・ロールに変換します。スイッチオーバーが完了すると、ソースPDBがターゲットPDBになります。

  6. ターゲットPDBがソースPDBによって生成されたすべてのREDOを介してリカバリされ、リカバリが取り消された後、ターゲットPDBをプライマリ・ロールに変換します。

  7. ターゲットPDBを新しいソースPDBとしてオープンします。

  8. ターゲットPDBからのREDOが元のソースPDBに登録された後にリカバリを開始します。

PDBへのスイッチオーバーの開始

スイッチオーバーが開始されると、ソースPDBおよびターゲットPDBのREDOラグはできるだけ小さくする必要があります。

PDBスイッチオーバーを開始するには:

  • SWITCHOVER PLUGGABLE DATABASEコマンドを実行します。プライマリ・ロールを実行する必要があるPDBの名前を指定します。

ブローカは残りのPDBスイッチオーバーを制御します。

例7-1 PDBスイッチオーバーの実行

この例では、PDB bos_salesnyc_salesの間でスイッチオーバーを実行します。スイッチオーバー操作が完了すると、ターゲット・データベースnewyork内のターゲットPDB nyc_salesがプライマリ・ロールに変わり、新しいソースPDBになります。

DGMGRL> SWITCHOVER TO PLUGGABLE DATABASE nyc_sales AT newyork; 
Verifying conditions for Switchover... 

  Source pluggable database is 'BOS_SALES' at database 'boston' 

Performing switchover NOW, please wait... 

  Closing pluggable database 'BOS_SALES'... 
  Switching 'BOS_SALES' to standby role... 
  Waiting for 'NYC_SALES' to recover all redo data... 
  Stopping recovery at 'NYC_SALES'... 
  Converting 'NYC_SALES' to primary role... 
  Opening new primary 'NYC_SALES'... 
  Waiting for redo data from new primary 'NYC_SALES'... 
  Starting recovery at new standby 'BOS_SALES'... 

Switchover succeeded, new primary is "NYC_SALES" 

PDBフェイルオーバーの実行

PDBフェイルオーバーは、ソースPDBとその指定されたターゲットPDB間のロール・リバーサルです。この操作は、通常、ソースPDBに障害が発生し、適切なタイミングでリカバリする可能性がない場合に実行されます。

次のタイプのPDBフェイルオーバーのいずれかを実行できます。

  • 完全なPDBフェイルオーバー

    これはデフォルトです。データが失われることはなく、推奨されるオプションです。このオプションは、ソースPDBに問題があるが、ソースCDBが使用可能な場合に使用します。

  • 即時PDBフェイルオーバー

    これは最も高速なPDBフェイルオーバーのタイプです。ただし、PDBフェイルオーバーを起動すると、ターゲットPDBに追加のデータは適用されません。即時フェイルオーバー操作の後、新しいソースPDBのターゲットPDBとして機能する前に、前のソースPDBを回復する必要があります。このオプションは、ソースCDBが使用できないときに使用します。このような状況では、データ損失の可能性が高くなります。

    即時フェイルオーバー操作の後、前のソースPDBを削除する必要があります。即時PDBフェイルオーバー後の新しいソースPDBは保護されません。データ保護を再開するには、新しいDGPDBを追加する必要があります。

DG PDBフェイルオーバーを開始する前に

PDBフェイルオーバーを実行する前に、いくつかの要因を考慮する必要があります。

  • ソースPDBをリカバリする可能性がないことを確認します。

ブローカによるDG PDB環境でのフェイルオーバーの実行方法

PDBフェイルオーバーを開始すると、ブローカは一連のステップを実行します。

  1. ターゲット・データベースがアクセス可能であることを確認します。ターゲット・データベースに到達できない場合、フェイルオーバーは実行できません。

  2. ソースPDBおよびターゲットPDBが正しい状態であることを確認します。ソースPDBはオープンまたはクローズできます。ターゲットPDBはリカバリ・モードである必要があります。

    この検証は、即時PDBフェイルオーバーには実行されないことに注意してください。

  3. ターゲットPDBがソースPDBの現在のREDOストリームをリカバリしていることを確認します。

  4. すべてのインスタンスでソースPDBをクローズします。

  5. ターゲット・データベースが未適用のREDOデータの適用を終了するのを待ってから、REDO Applyを停止します。即時フェイルオーバーの実行時に、未適用のREDOは適用されません。

  6. 次のように、ターゲットPDBをソースPDBに遷移させます。

    • ターゲットPDBのロールをソースPDBに変更します。

    • 新しいソースPDBを読取り/書込みモードでオープンします。

フェイルオーバーの完了後、ブローカでは新しいターゲットPDB (元のソースPDB)でリカバリは実行されません。新しいターゲット・データベースを再起動したり、ENABLE DATABASEコマンドを実行した場合でも、リカバリは開始されません。障害の原因となった問題に対処したら、SET STATE=APPLY-ONオプションを指定してEDIT PLUGGABLE DATABASEコマンドを実行してリカバリを開始します。

PDBフェイルオーバーの開始

DGMGRLを使用して、PDBの完全フェイルオーバー(推奨)または即時フェイルオーバーを実行します。

フェイルオーバーの実行時にソースPDBをオープンする必要はありません。

PDBフェイルオーバーを実行するには:

  1. ターゲット・データベースに接続します。
  2. ターゲットPDBの名前およびターゲットPDBを含むターゲット・データベースの名前を指定して、FAILOVER PLUGGABLE DATABASEコマンドを実行します。

    この例では、bos_sales PDBへのフェイルオーバーを実行します。フェイルオーバー操作が完了すると、ターゲット・データベースboston内のターゲットPDB bos_salesがプライマリ・ロールに変わります。

    DGMGRL> FAILOVER TO PLUGGABLE DATABASE bos_sales AT boston; 
    Verifying conditions for Failover... 
    
      Source pluggable database is 'NYC_SALES' at database 'newyork' 
    
    Performing failover NOW, please wait... 
    
      Closing pluggable database 'NYC_SALES'... 
      Converting 'NYC_SALES' to standby role... 
      Waiting for 'BOS_SALES' to recover all redo data... 
      Stopping recovery at 'BOS_SALES'... 
      Converting 'BOS_SALES' to primary role... 
      Opening new primary 'BOS_SALES'... 
      Waiting for redo data from new primary 'BOS_SALES'... 
    
    Failover succeeded, new primary is "BOS_SALES".

    ターゲットPDBがソースPDBロールに変更される前に、累積されたREDOがすべて適用されます。

    即時フェイルオーバーを実行するには、コマンドにIMMEDIATEキーワードを含めます。この場合、ソースPDBロールは累積されたREDOデータを適用せずに変更されます。

PDBフェイルオーバー操作が完了したら、EDIT PLUGGABLE DATABASEコマンドをSET STATE=APPLY-ONとともに使用して、前のソースPDBが完全フェイルオーバーであった場合にREDO Applyを開始し、フェイルオーバーの原因となった問題に対処しておく必要があります。