本番データベースのアーカイブ機能を実行するために、c# でクラス ライブラリを作成しています (SQLServer 2000 を使用)。この関数では、レコードを運用データベースから複数のテーブルのアーカイブ データベースに移動し、transactionScope を使用して何かが失敗した場合に変更をロールバックしています。
大規模なデータが本番データベースからアーカイブ データベースに移動されるため、少なくとも 1/2 時間かかります。transactionScope を削除すると、すべて正常に動作しますが、transactionScope を使用すると、9 ~ 10 分後に以下のエラーが発生します。
分散トランザクションが完了しました。このセッションを新しいトランザクションまたは NULL トランザクションに登録してください。
以下は擬似コードです
using (TransactionScope ts = new TransactionScope(TransactionScopeOption.Required, new TimeSpan(2, 0, 0)))
{
Open connection
Check data present in production DB
Insert into Archivedb.dbo.table1(field1,field2,field3....) Select * from Proddb.dbo.table1 where date between date1 and date2
Insert into Archivedb.dbo.table2(field1,field2,field3....) Select * from Proddb.dbo.table2 where date between date1 and date2
Insert into Archivedb.dbo.table3(field1,field2,field3....) Select * from Proddb.dbo.table3 where date between date1 and date2
Insert into Archivedb.dbo.table4(field1,field2,field3....) Select * from Proddb.dbo.table4 where date between date1 and date2
}
タイムアウトをどこかに設定する必要がありますか?
編集
長い間頭を悩ませた後、以下のリンクで解決策を見つけました http://blogs.msdn.com/b/dotnetinterop/archive/2005/12/16/504604.aspx 他の人にも役立つことを願っています。