sql >> データベース >  >> RDS >> Oracle

ネットワーク障害が発生すると、c3p0がgetConnectionでハングする

    同じ問題が発生しました。私の場合、JDBCドライバーがソケット障害時にタイムアウトするようにセットアップされていないことが原因でした。 C3P0 ComboPooledDataSourceに次の追加を行いました 構成:

    cpds = new ComboPooledDataSource();
    ...
    
    //--------------------------------------------------------------------------------------
    // NOTE: Once you decide to use cpds.setProperties() to set some connection properties,
    //       all properties must be set, including user/password, otherwise an exception
    //       will be thrown
    Properties prop = new Properties();
    prop.setProperty("oracle.net.CONNECT_TIMEOUT",
        Integer.toString(JDBC_CONNECTION_TIMEOUT_IN_MILLISECONDS));
    prop.setProperty("oracle.jdbc.ReadTimeout",
        Integer.toString(JDBC_SOCKET_TIMEOUT_IN_MILLISECONDS));
    prop.setProperty("user", username);
    prop.setProperty("password", password);
    cpds.setProperties(prop);
    //--------------------------------------------------------------------------------------
    
    ...
    

    Oracleドライバのプロパティは、C3P0がConnectionを作成するときに適用されます。 物体。特にこれらの2つのプロパティにより、ソケット接続が30秒を超えて非アクティブになると、例外がスローされます。

    Oracleデータベースに接続していない場合は、他のデータベースベンダーの他のJDBCドライバにも同様のプロパティがあります。それらのいくつかは、このページ




    1. MySQLで週ごとにグループ化

    2. SQL ServerのPAGEIOLATCH_SH待機タイプとは何ですか?

    3. 休止状態でデータベースをバックアップ/フェイルオーバーとして使用するにはどうすればよいですか?

    4. SQLクエリ:ある列から別の列とペアになっているアイテムを取得する方法。