###前提・実現したいこと
VB.netで作成したアプリをWindowsサービスで起動しています。
ソケット通信で受信してDB(SQL Server)にデータを登録しています。
DB接続はTableAdapterを使っています。
あるタイミングからデータ取得(Fill)で「トランザクションの状態に対して操作が有効ではありません」という例外エラーが発生するようになりました。
それまでは正常に動作していたのですが、エラーが出始めてからは100%発生しています。
トランザクションはTracsactionScopeを使用していますが、ある特定のテーブルのみで発生します。
そのテーブルのデータ取得までには他のテーブルにも接続していますが、
エラーは発生しません。
どういったことが考えられるでしょうか?
###発生している問題・エラーメッセージ
場所 System.Transactions.TransactionState.EnlistPromotableSinglePhase(InternalTransaction tx, IPromotableSinglePhaseNotification promotableSinglePhaseNotification, Transaction atomicTransaction) 場所 System.Transactions.Transaction.EnlistPromotableSinglePhase(IPromotableSinglePhaseNotification promotableSinglePhaseNotification) 場所 System.Data.SqlClient.SqlInternalConnection.EnlistNonNull(Transaction tx) 場所 System.Data.SqlClient.SqlInternalConnection.Enlist(Transaction tx) 場所 System.Data.SqlClient.SqlInternalConnectionTds.Activate(Transaction transaction) 場所 System.Data.ProviderBase.DbConnectionInternal.ActivateConnection(Transaction transaction) 場所 System.Data.ProviderBase.DbConnectionPool.PrepareConnection(DbConnection owningObject, DbConnectionInternal obj, Transaction transaction) 場所 System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection) 場所 System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) 場所 System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection) 場所 System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) 場所 System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) 場所 System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry) 場所 System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry) 場所 System.Data.SqlClient.SqlConnection.Open() 場所 System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) 場所 System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior) 場所 System.Data.Common.DbDataAdapter.Fill(DataTable dataTable) トランザクションの状態に対して操作が有効ではありません
###該当のソースコード
vb
1'トランザクション開始 2Dim TOption As New TransactionOptions() 3TOption.IsolationLevel = Transactions.IsolationLevel.ReadCommitted 4TOption.Timeout = TransactionManager.DefaultTimeout 5Using ts As New System.Transactions.TransactionScope(TransactionScopeOption.Required, TOption) 6 7 ・・・ 8 9 'データ取得(ここまでに他のテーブルのデータは取得できている) 10 Dim tableAdapter As New TestDataSetTableAdapters.TestTableAdapter 11 Dim dataTable As New TestDataSetTable.TestDataTable 12 tableAdapter.Fill(dataTable) ←ここでエラー 13 14 ・・・ 15 16 ts.Complete() 17 18End Using 19
###試したこと
アプリもテーブル定義も変わってませんが急にエラーとなりました。
DB再起動は本番環境のためできていません。
DB等をテスト環境に復元しても再現はしません。
問題のテーブルはこのアプリしか接続しておらず、ロックが発生しているか
調べましたが、特に原因となりそうなものが見つかりません。
処理が始まってからエラーが発生するまで2分ほどかかっており、
タイムアウトしているようにも思います。
###補足情報(言語/FW/ツール等のバージョンなど)
Windows 2012 Server
SQL Server2012
.Net FrameWork 4.5

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/08/23 08:43
退会済みユーザー
2017/08/23 10:11