DBMS_DG
パッケージを使用すると、アプリケーションでフェイルオーバーの原因となる状況が発生した場合にファスト・スタート・フェイルオーバーを開始するように、アプリケーションからOracle Data Guard Broker環境内のプライマリ・データベースまたはファスト・スタート・フェイルオーバー・ターゲット・データベースに通知できます。
関連項目: ブローカ構成でのファスト・スタート・フェイルオーバーの実行方法の詳細は、『Oracle Data Guard Broker』を参照してください。 |
この章では、次の項目について説明します。
Oracle Databaseの外部で実行されているアプリケーションによって検出可能な状況には、Oracle Data Guard Brokerがファスト・スタート・フェイルオーバーを実行する原因となる可能性があるものがあります。原因となる可能性がある状況の範囲はほぼ無制限であるため、ファスト・スタート・フェイルオーバーを実行する原因となっている状況の判別は、アプリケーションによって行われます。
このような状況が発生すると、アプリケーションによってDBMS_DG
.INITIATE_FS_FAILOVER
プロシージャがコールされ、アプリケーションでファスト・スタート・フェイルオーバーの即時実行が必要であることがプライマリ・データベースまたはファスト・スタート・フェイルオーバー・ターゲット・スタンバイ・データベースのいずれかにアラートとして通知されます。次に、プロシージャのコール元のデータベースからオブザーバに通知され、オブザーバは、スタンバイ・データベースがフェイルオーバーの受入れに有効なファスト・スタート・フェイルオーバー状態(「監視」および「同期」または「遅延内」のいずれか)であるかぎり、ファスト・スタート・フェイルオーバーを即時開始します。構成が有効なファスト・スタート・フェイルオーバー状態でない場合は、INITIATE_FS_FAILOVER
サブプログラムによってORAエラー・メッセージが戻され(例外は通知されません)、ファスト・スタート・フェイルオーバーを実行できないことがコール元のアプリケーションに通知されます。
注意: マルチテナント・コンテナ・データベース(CDB)で操作している場合は、DBMS_DG 内のファンクションはルート・レベルでのみ実行されます。個々のプラガブル・データベース(PDB)レベルではなく、ルート・レベルで接続していることを確認してください。 |
表59-1 DBMS_DGパッケージのサブプログラム
サブプログラム | 説明 |
---|---|
|
アプリケーションでフェイルオーバーの原因となる状況が発生した場合にファスト・スタート・フェイルオーバーが必要であることをアプリケーションからプライマリ・データベースまたはファスト・スタート・フェイルオーバー・ターゲット・スタンバイ・データベースのいずれかに通知できます。このプロシージャは、プライマリ・データベースまたはファスト・スタート・フェイルオーバー・スタンバイ・データベースに接続している場合にのみコールできます。 |
このプロシージャは、状況文字列の指定に使用します。この文字列と一致する状況がアプリケーションで発生した場合、アプリケーションでファスト・スタート・フェイルオーバーの起動をリクエストできます。
使用上の注意
このプロシージャは、2進整数を戻します。
ファスト・スタート・フェイルオーバーが最後に実行された時間および原因を参照するには、V$FS_FAILOVER_STATS
ビューを問い合せます。
このプロシージャは、プライマリ・データベースまたはファスト・スタート・フェイルオーバー・スタンバイ・データベースに接続している場合にのみコールできます。
エラー
表59-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;