none
Microsoft OLE DB Provider for Oracleのコマンドタイムアウト設定が効かない RRS feed

  • 質問

  • タイトルの件でご質問がございます。
    解決方法をご教授お願いします。

    ■質問

    .NET Framework を使用しWindowsアプリケーションを開発しております。
    そのアプリケーションの機能の中でOracleDatabaseの操作に対応しているのですが、
    コマンドタイムアウトを設定しても永遠にコマンドタイムアウトが効きません。
    設定の可否、可能であれば設定方法をご教授いただければと思います。

    □接続に使用しているプロバイダー情報
    ・Oracle Instant Client Version 12.1.0.2.0 (Windows 32bit)をインストール

    □開発しているアプリケーション情報
    ・.NET Framework 4.0 を使用。
    ・x86ビルド
    ・C# Windowsアプリケーション
    ・実装方法は下記をご確認ください。SQL Serverに対してはコマンドタイムアウト値が正常に反映されます。

    DbProviderFactory factory = null;
    switch (DBMappingData.AnalyzeConnectString(dst))
    {
        case DBMappingData.DBProviderType.SQLServer:
            factory = DbProviderFactories.GetFactory(DBMappingData.PROVIDER_OLEDB);
            break;
        case DBMappingData.DBProviderType.Oracle:
            factory = DbProviderFactories.GetFactory(DBMappingData.PROVIDER_OLEDB);
            break;
        // ...一部省略 
    }
    
    using(DbConnection connection = factory.CreateConnection())
    {
        connection.ConnectionString = connectionString;
        connection.Open();
    
        // トランザクションの開始
        DbTransaction tran = connection.BeginTransaction();
    
        DbCommand cmd = connection.CreateCommand();
        cmd.CommandText = strSelect;
        cmd.Transaction = tran;
        cmd.CommandTimeout = cmdTimeout;  // ここでコマンドタイムアウトを設定しています。
    
        DbDataAdapter adpt = factory.CreateDataAdapter();
        adpt.SelectCommand = cmd;
        dtSource = new DataTable();
        adpt.FillSchema(dtSource, SchemaType.Mapped);
        
        // ...以下処理を実装しています。
    }

    □アプリケーション実行時の条件
    ・OracleDatabase関連ソフトの『SQL Developer』で使用するテーブルに対しトランザクションを実行。
    ・『LOCK TABLE CARDINFO IN EXCLUSIVE MODE WAIT ○○』の記述でテーブルをロック。(○○はロック時間です。)
    ・テーブルをロック中にアプリケーションを実行し、設定したタイムアウト値以上の時間テーブルをロックし続けても
    タイムアウトしません。

    □参考ページ
    ・<https://docs.oracle.com/cd/E82638_01/ODPNT/CommandCommandTimeout.htm>
    ↑上記設定が効いてしまっていて、C# アプリケーションからの設定が反映されていないように思います。

    以上、よろしくお願い致します。

    2018年2月13日 4:31

回答

すべての返信