none
Transaction mit LinkedServer RRS feed

  • Frage

  • Hallo,

    bei der verwendung einer Transaktion im Kontext mit einem LinkedServer bekomme ich immer folgende Fehlermeldung:

    7412: OLE DB provider "SQLNCLI" for linked server "100.10.100.1" returned message "The transaction has already been implicitly or explicitly committed or aborted".

    Verwende ich die einzelnen Statements ohne Verwendung der Transaktion werden diese ausgeführt.
    Der MSDTC läuft korrekt (jedenfalls denke ich das ;-) )

    Anbei der Quelltext:

    USE DB
    GO
    -- Zählvariable
    DECLARE @Anzahl INT;

    -- sind Daten vorhanden
    SELECT @Anzahl = (SELECT COUNT(Feld) AS Anzahl FROM DBO.QuellTabelle)
    IF @Anzahl > 0


    BEGIN DISTRIBUTED TRANSACTION UpdateZieltabelle;

    -- Fehlerüberwachung einschalten
    BEGIN TRY

      -- alte Daten aus der Tabelle löschen
      DELETE FROM [IP].[DB].[dbo].[Zieltabelle]

    --  INSERT INTO [IP].[DB].[dbo].[Zieltabelle]
    --           ([Feld 1], [Feld2], ...,   [FeldN])
    --
    --  SELECT [Feld 1], [Feld2], ...,   [FeldN]
    --        
    --  FROM  DBO.QuellTabelle)
    --
    --  --  Aktualisierungsdatum setzen
    --  UPDATE [IP].[DB].[dbo].[Zieltabelle]
    --  SET aktualisiert_am = GETDATE()

    END TRY

    -- wenn ein Fehler aufgetreten ist, werden alle Aktionen rückgänig gemacht
    BEGIN CATCH
       ROLLBACK TRANSACTION UpdateZieltabelle;
       INSERT INTO dbo.StatusJobs
                (Feld1, Feld2, ... , Feldn)
                VALUES ('Wert1', 'Wert2',  ..., 'Wertn');
    END CATCH

    -- wenn Transaction erfolgreich war, werden die Änderungen übermittelt
    IF @@TRANCOUNT = 1
      BEGIN
        COMMIT TRANSACTION UpdateZieltabelle;
        NSERT INTO dbo.StatusJobs
                (Feld1, Feld2, ... , Feldn)
                VALUES ('Wert1', 'Wert2',  ..., 'Wertn');
      END

    Kann mir bitte jemand helfen?

     

    Gruß
    Uwe

    Montag, 10. Januar 2011 10:31

Antworten

Alle Antworten