0

古いデータを本番サーバーからアーカイブサーバーに転送する必要があるプロジェクトに取り組んでいます。ここでは、転送の途中で障害が発生した場合に、サーバー間のデータの一貫性を処理する際に問題が発生します。トランザクションを実装することに他なりません。

データ転送中にシステム障害が発生した場合は常に、プロセスは転送されたすべてのレコードをアーカイブサーバーから削除し、システムが戻ったときに転送プロセス全体を新しいものとして開始する必要があります。

注:クライアントの構内での権限/設定の理由により、分散トランザクションを使用して達成することはできません。

C#.netまたはSQL Server 2008でこれを処理する方法はありますか?

4

2 に答える 2

0

次のコードは、トランザクション全体のいずれかの部分が失敗したときにデータベースが編集される前に「ロールバック」するために使用されます。ニーズに合わせて変更してみてください。

(最初にSystem.Transactions-namespaceを参照します)

    System.Transactions

    using(TransactionScope transaction = new TransactionScope())
    {
        try
        {
            //modify your database here

            transaction.Complete();
        }
        catch(Exception)
        {
            transaction.Dispose();
        }
    }
于 2012-08-08T06:49:28.063 に答える
0
    DECLARE  @TranCounter INT; 

    SET @TranCounter = @@TRANCOUNT; 

    IF @TranCounter > 0 
      SAVE TRANSACTION savepointrb1; 
    ELSE 
      BEGIN TRANSACTION; 

   BEGIN TRY

       -- your code will be here. if you are using multiple stored procedures then                
          apply this code on that

       IF @TranCounter = 0 
        COMMIT TRANSACTION;     

    END TRY 

    BEGIN CATCH 
      IF @TranCounter = 0 
        ROLLBACK TRANSACTION; 
      ELSE 
        IF Xact_state() <> -1 
          ROLLBACK TRANSACTION savepointrb1; 

        END CATCH   
于 2012-08-08T07:45:34.263 に答える