ConnectionOpen

このイベントは、アプリケーション・コンティニュイティのフェイルオーバーとリプレイを実行するために、OracleConnection.Open()メソッドの実行時や接続のオープン時にトリガーされます。

宣言

// C#
public event OracleConnectionOpenEventHandler ConnectionOpen;

イベント・データ

イベント・ハンドラは、ConnectionOpenイベントに関する情報を含む次のプロパティを公開するOracleConnectionOpenEventArgsオブジェクトを受け取ります。

  • Connection

    Open()が呼び出されるOracleConnectionオブジェクト。

例外

  • InvalidOperationException() - CPVersion=1.0およびConnectionOpenイベントが使用されている場合。管理対象外ODP.NETにのみ適用されます。

  • InvalidOperationException() - 接続をオープンしてから、ConnectionOpenイベントが設定された場合。

備考

この機能では、CPVersion=2.0を使用する必要があります。

接続を実行する前に構成するには、Open()を呼び出す前に、アプリケーションでConnectionOpenイベントにコールバックを登録してください。

.NET Framework 4.xおよび.NET (Core)の場合のみサポートされています。

アプリケーション・コンティニュイティのシナリオ

リクエストの開始時のみ状態を設定するアプリケーションの場合、または事前設定された状態の接続を使用することでパフォーマンスが向上するステートフル・アプリケーションの場合は、ConnectionOpenイベントに登録した後に、適切なアクションを実行する前にそのイベントの理由を確認できます。

登録した場合、このイベントは、リカバリ可能なエラーの後に、再接続に成功すると実行されます。イベントのトリガーの理由は、そのイベントで提供されるOracleConnectionOpenEventArgsオブジェクトのConnectionOpenReasonプロパティを介して取得できます。

アプリケーションで、初期化アクションがフェイルオーバー前の元の接続と同じであることを確認する必要があります。このイベントの呼出しに失敗した場合は、その接続でリプレイが無効になります。

// C#
// NOTE: The sample below requires CPVersion=2.0 to be configured in the .NET configuration
using System;
using Oracle.ManagedDataAccess.Client;

class ConOpenEventSample
{
  public static void ConOpenCallback(OracleConnectionOpenEventArgs eventArgs)
  {
    OracleCommand cmd = new OracleCommand("ALTER SESSION SET NLS_LANGUAGE='GERMAN'", eventArgs.Connection);
    cmd.ExecuteNonQuery();
    cmd.Dispose();
  }

  static void Main(string[] args)
  {
    // Establish a connection
    string constr = "user id=hr;password=hr;data source=oracle";
    OracleConnection con = new OracleConnection(constr);
    con.ConnectionOpen += ConOpenCallback;
    con.Open();
    con.Dispose();
  }
}