66 DBMS_DG
DBMS_DG
パッケージを使用すると、アプリケーションでフェイルオーバーの原因となる状況が発生した場合にファスト・スタート・フェイルオーバーを開始するように、アプリケーションからOracle Data Guard Broker環境内のプライマリ・データベースまたはファスト・スタート・フェイルオーバー・ターゲット・データベースに通知できます。
ノート:
マルチテナント・コンテナ・データベースが、Oracle Database 21c以降のリリースで唯一サポートされているアーキテクチャです。ドキュメントが改訂されている間は、従来の用語が残っている可能性があります。ほとんどの場合、"データベース"と"非CDB"は、文脈に応じてCDBまたはPDBを指しています。アップグレードなどでは、"非CDB"が以前のリリースの非CDBを指している場合もあります。
この章のトピックは、次のとおりです:
66.1 DBMS_DGの使用方法
Oracle Databaseの外部で実行されているアプリケーションによって検出可能な状況には、Oracle Data Guard Brokerがファスト・スタート・フェイルオーバーを実行する原因となる可能性があるものがあります。原因となる可能性がある状況の範囲はほぼ無制限であるため、ファスト・スタート・フェイルオーバーを実行する原因となっている状況の判別は、アプリケーションによって行われます。
このような状況が発生すると、アプリケーションによってDBMS_DG
.INITIATE_FS_FAILOVER
プロシージャがコールされ、アプリケーションでファスト・スタート・フェイルオーバーの即時実行が必要であることがプライマリ・データベースまたはファスト・スタート・フェイルオーバー・ターゲット・スタンバイ・データベースのいずれかにアラートとして通知されます。次に、プロシージャのコール元のデータベースからオブザーバに通知され、オブザーバは、スタンバイ・データベースがフェイルオーバーの受入れに有効なファスト・スタート・フェイルオーバー状態(「監視」および「同期」または「遅延内」のいずれか)であるかぎり、ファスト・スタート・フェイルオーバーを即時開始します。構成が有効なファスト・スタート・フェイルオーバー状態でない場合は、INITIATE_FS_FAILOVER
サブプログラムによってORAエラー・メッセージが戻され(例外は通知されません)、ファスト・スタート・フェイルオーバーを実行できないことがコール元のアプリケーションに通知されます。
ノート:
マルチテナント・コンテナ・データベース(CDB)で操作している場合は、DBMS_DG
内のファンクションはルート・レベルでのみ実行されます。個々のプラガブル・データベース(PDB)レベルではなく、ルート・レベルで接続していることを確認してください。
66.3 DBMS_DGサブプログラムの要約
DBMS_DG
パッケージには、1つのサブプログラム、INITIATE_FS_FAILOVER
プロシージャが含まれます。
表66-1 DBMS_DGパッケージのサブプログラム
サブプログラム | 説明 |
---|---|
アプリケーションでフェイルオーバーの原因となる状況が発生した場合にファスト・スタート・フェイルオーバーが必要であることをアプリケーションからプライマリ・データベースまたはファスト・スタート・フェイルオーバー・ターゲット・スタンバイ・データベースのいずれかに通知できます。このプロシージャは、プライマリ・データベースまたはファスト・スタート・フェイルオーバー・スタンバイ・データベースに接続している場合にのみコールできます。 |
66.3.1 INITIATE_FS_FAILOVERプロシージャ
このプロシージャは、状況文字列の指定に使用します。この文字列と一致する状況がアプリケーションで発生した場合、アプリケーションでファスト・スタート・フェイルオーバーの起動をリクエストできます。
構文
DBMS_DG.INITIATE_FS_FAILOVER ( condstr IN VARCHAR2) RETURN BINARY_INTEGER;
パラメータ
表66-2 INITIATE_FS_FAILOVERプロシージャのパラメータ
パラメータ | 説明 |
---|---|
condstr |
ファスト・スタート・フェイルオーバーをリクエストする必要がある条件文字列を指定します。条件文字列引数を指定しなかった場合は、デフォルトの文字列「アプリケーション・フェイルオーバーがリクエストされました。」がブローカ・ログ・ファイルおよびプロシージャのコール元のデータベースのデータベース・アラート・ログに記録されます。 |
使用上のノート
-
このプロシージャは、2進整数を戻します。
-
ファスト・スタート・フェイルオーバーが最後に実行された時間および原因を参照するには、
V$FS_FAILOVER_STATS
ビューを問い合せます。 -
このプロシージャは、プライマリ・データベースまたはファスト・スタート・フェイルオーバー・スタンバイ・データベースに接続している場合にのみコールできます。
エラー
表66-3 INITIATE_FS_FAILOVERプロシージャのエラー
エラー | 説明 |
---|---|
|
ファスト・スタート・フェイルオーバーの開始リクエストがオブザーバに転送されました。 |
|
ブローカ構成が存在しないか、またはファスト・スタート・フェイルオーバーが使用可能になっていません。 |
|
|
|
構成が同期化されていない場合に、使用可能な最大のファスト・スタート・フェイルオーバー構成で |
|
|
|
|
|
構成がユーザー指定のREDO遅延制限内でない場合に、最大パフォーマンスのファスト・スタート・フェイルオーバー構成で |
例
この例では、ファスト・スタート・フェイルオーバーが無効のときに、プログラムがファスト・スタート・フェイルオーバーを開始しようとします。この例を使用するには、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;