2

私は、Oracle Universal Connection Pool (UCP) バージョン 11.2.0.1.0 の Fast Connection Failover (FCF) サポートをテストしています。試行中のシナリオは、計画停止イベントです。Oracle Database 11g Release 11.2.0.2.0 standard edition が、使用されているデータベース バージョンです。以下は、私のテストで従う手順です

  1. 接続を取得し、接続先のインスタンスを出力します
  2. いずれかのノードで「srvctl stop instance -d -n」を実行します
  3. 最初のステップで取得した接続に対してクエリを実行します。

3 番目のステップは、計画的な停止イベントであるため、エラー (ORA-03113: end-of-file on communication channel) で失敗します。ucp ログを分析すると、FAN イベントが jdbc クライアントによって受信され、接続ステータスを「STATUS_CLOSE_ON_RETURN」としてマークすることによって処理されることがわかりましたが、借用した接続を使用してクエリを実行すると失敗します。

期待される結果は、借用した接続で実行されたすべてのクエリが成功し、接続がプールに返されるまで有効なままになることです。その後、プールによって閉じられる必要があります。これが完了するまで、インスタンスの停止コマンドは成功しません。

構成に欠けているものはありますか? 上記の srvctl コマンドは正しいですか?

Oracle プールの構成は次のとおりです。



PoolDataSourceImpl pds = new PoolDataSourceImpl();
        try {
            pds.setConnectionPoolName("Connection Pool");
            pds.setConnectionFactoryClassName("oracle.jdbc.pool.OracleDataSource");
            pds.setConnectionFactoryProperties(getOracleDataSourceProperties());
            pds.setDataSourceName("DataSource");
            pds.setServerName(SERVER_NAME);
            pds.setUser("system");
            pds.setPassword("pass");
            pds.setPortNumber(1521);
            pds.setMinPoolSize(0);
            pds.setMaxPoolSize(25);
            pds.setMaxIdleTime(1800);
            pds.setValidateConnectionOnBorrow(true);
            pds.setONSConfiguration("nodes=v-ind-db-11g-01:6200,v-ind-db-11g-02:6200");
            pds.setFastConnectionFailoverEnabled(true);
            pds.setInactiveConnectionTimeout(20);
            pds.setConnectionWaitTimeout(20);
            pds.setPropertyCycle(60);

            pds.startPool();
        } catch (SQLException e) {
            throw new RuntimeException("Cannot create project datasource", e);
        }

        .......
        Properties getOracleDataSourceProperties() {
            Properties p = new Properties();
            p.put("driverType", "oci");
            p.put("networkProtocol", "tcp");
            p.put("serviceName", SERVICE_NAME);
            return p;
        }

4

2 に答える 2

1

FCF の UCP サポートを 2 つの変更でテストできました

  1. 新しいサービスの作成。最初の試行で使用されたサービスはデフォルトのサービスであり、FCF 機能はデフォルト サービスでは機能しませ

  2. インスタンスの代わりにサービスを停止します。インスタンスを停止すると、計画的な停止ではなく、計画外の停止がシミュレートされます。

于 2012-02-20T12:21:55.413 に答える
1

SHUTDOWN NORMALを実行してからトランザクションを完了した場合、アプリは正常に続行されますか?

これを行う必要があるよう srvctl stop instance -d XXX -n YYY -o normalです。

このスレッドは、srvctl のデフォルトのシャットダウン方法が「即時」であることを示唆しています。

于 2012-02-17T14:24:33.107 に答える