3

本番データベースのアーカイブ機能を実行するために、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 他の人にも役立つことを願っています。

4

0 に答える 0