57 DBMS_DG

DBMS_DGパッケージを使用すると、アプリケーションでフェイルオーバーの原因となる状況が発生した場合にファスト・スタート・フェイルオーバーを開始するように、アプリケーションからOracle Data Guard Broker環境内のプライマリ・データベースまたはファスト・スタート・フェイルオーバー・ターゲット・データベースに通知できます。

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

57.1 DBMS_DGの使用方法

Oracle Databaseの外部で実行されているアプリケーションによって検出可能な状況には、Oracle Data Guard Brokerがファスト・スタート・フェイルオーバーを実行する原因となる可能性があるものがあります。原因となる可能性がある状況の範囲はほぼ無制限であるため、ファスト・スタート・フェイルオーバーを実行する原因となっている状況の判別は、アプリケーションによって行われます。

このような状況が発生すると、アプリケーションによってDBMS_DG.INITIATE_FS_FAILOVERプロシージャがコールされ、アプリケーションでファスト・スタート・フェイルオーバーの即時実行が必要であることがプライマリ・データベースまたはファスト・スタート・フェイルオーバー・ターゲット・スタンバイ・データベースのいずれかにアラートとして通知されます。次に、プロシージャのコール元のデータベースからオブザーバに通知され、オブザーバは、スタンバイ・データベースがフェイルオーバーの受入れに有効なファスト・スタート・フェイルオーバー状態(「監視」および「同期」または「遅延内」のいずれか)であるかぎり、ファスト・スタート・フェイルオーバーを即時開始します。構成が有効なファスト・スタート・フェイルオーバー状態でない場合は、INITIATE_FS_FAILOVERサブプログラムによってORAエラー・メッセージが戻され(例外は通知されません)、ファスト・スタート・フェイルオーバーを実行できないことがコール元のアプリケーションに通知されます。

注意:

マルチテナント・コンテナ・データベース(CDB)で操作している場合は、DBMS_DG内のファンクションはルート・レベルでのみ実行されます。個々のプラガブル・データベース(PDB)レベルではなく、ルート・レベルで接続していることを確認してください。

57.2 DBMS_DGのセキュリティ・モデル

DBMS_DGパッケージは実行者の権限で実行され、SYSDBA権限が必要です。

57.3 DBMS_DGサブプログラムの要約

DBMS_DGパッケージには、1つのサブプログラム、INITIATE_FS_FAILOVERプロシージャが含まれます。

表57-1 DBMS_DGパッケージのサブプログラム

サブプログラム 説明

INITIATE_FS_FAILOVERプロシージャ

アプリケーションでフェイルオーバーの原因となる状況が発生した場合にファスト・スタート・フェイルオーバーが必要であることをアプリケーションからプライマリ・データベースまたはファスト・スタート・フェイルオーバー・ターゲット・スタンバイ・データベースのいずれかに通知できます。このプロシージャは、プライマリ・データベースまたはファスト・スタート・フェイルオーバー・スタンバイ・データベースに接続している場合にのみコールできます。

57.3.1 INITIATE_FS_FAILOVERプロシージャ

このプロシージャは、状況文字列の指定に使用します。この文字列と一致する状況がアプリケーションで発生した場合、アプリケーションでファスト・スタート・フェイルオーバーの起動をリクエストできます。

構文

DBMS_DG.INITIATE_FS_FAILOVER (
     condstr          IN VARCHAR2)
RETURN BINARY_INTEGER;

パラメータ

表57-2 INITIATE_FS_FAILOVERプロシージャのパラメータ

パラメータ 説明

condstr

ファスト・スタート・フェイルオーバーをリクエストする必要がある条件文字列を指定します。条件文字列引数を指定しなかった場合は、デフォルトの文字列「アプリケーション・フェイルオーバーがリクエストされました。」がブローカ・ログ・ファイルおよびプロシージャのコール元のデータベースのデータベース・アラート・ログに記録されます。

使用上の注意

  • このプロシージャは、2進整数を戻します。

  • ファスト・スタート・フェイルオーバーが最後に実行された時間および原因を参照するには、V$FS_FAILOVER_STATSビューを問い合せます。

  • このプロシージャは、プライマリ・データベースまたはファスト・スタート・フェイルオーバー・スタンバイ・データベースに接続している場合にのみコールできます。

エラー

表57-3 INITIATE_FS_FAILOVERプロシージャのエラー

エラー 説明

ORA-00000: 正常に完了しました。

ファスト・スタート・フェイルオーバーの開始リクエストがオブザーバに転送されました。

ORA-16646: ファスト・スタート・フェイルオーバーは使用不可です

ブローカ構成が存在しないか、またはファスト・スタート・フェイルオーバーが使用可能になっていません。

ORA-16666: その他のスタンバイ・データベースでファスト・スタート・フェイルオーバーを開始できません

DBMS_DG.INITIATE_FS_FAILOVERは、その他のスタンバイ・データベースで起動されました。つまり、プライマリ・データベースまたはファスト・スタート・フェイルオーバー・ターゲット・スタンバイ・データベースでは起動されませんでした。

ORA-16817: ファスト・スタート・フェイルオーバーの構成が同期化されていません

構成が同期化されていない場合に、使用可能な最大のファスト・スタート・フェイルオーバー構成でDBMS_DG.INITIATE_FS_FAILOVERが起動されました。

ORA-16819: ファスト・スタート・フェイルオーバー・オブザーバが起動されていません

DBMS_DG.INITIATE_FS_FAILOVERは起動されましたが、オブザーバは起動されていません。

ORA-16820: ファスト・スタート・フェイルオーバー・オブザーバはこのデータベースを監視しなくなりました

DBMS_DG.INITIATE_FS_FAILOVERが起動されましたが、構成によって、オブザーバが実行されていない可能性があることが検出されました。

ORA-16829: ファスト・スタート・フェイルオーバー構成の遅延

構成がユーザー指定のREDO遅延制限内でない場合に、最大パフォーマンスのファスト・スタート・フェイルオーバー構成でDBMS_DG.INITIATE_FS_FAILOVERが起動されました。

この例では、ファスト・スタート・フェイルオーバーが無効のときに、プログラムがファスト・スタート・フェイルオーバーを開始しようとします。この例を使用するには、SYDDBA権限を持つSYSユーザーとして接続します。

set serveroutput on

declare
status integer;

begin
status := dbms_dg.initiate_fs_failover(''Failover Requested'');

dbms_output.put_line(''Fast-Start Failover is disabled: Expected status = ORA-16646'');
dbms_output.put_line(''                  Actual Status = ORA-'' || status);

end;
/
exit;