2016-04-04 4 views
0

Dans la transaction de restauration SQL, à partir de laquelle il annule l'état? Je veux dire où les données sont stockées afin que l'annulation puisse le reprendre.Dans la transaction de restauration SQL, à partir de laquelle il annule l'état?

+1

Ceci est spécifique à l'implémentation. –

+0

Le journal des transactions. SQL Lorsqu'une mise à jour se produit dans SQL Server, elle se produit d'abord dans le journal des transactions, puis les données sont écrites. Lorsqu'elle est restaurée, elle supprime les entrées du journal et l'état de la base de données est tel qu'il était avant la transaction. arrivé. modifier * SQL Server spécifique. – Jeremy

Répondre

0

Pour Oracle, il enregistre les modifications dans le journal de reprise jusqu'à la validation. Chaque RDMS a sa propre stratégie.

+0

C'est en fait l'UNDO d'Oracle, pas le refaire. –

0

vous pouvez utiliser le code sûr et facile pour l'exécution de 100% (courir toute ligne de requête) ou ne lancez pas de hors les

| requête 1 | = comme insérer dans ou sélectionner ou ... | nombre de lignes | = Nombre de requête

DECLARE @rowcount int set @rowcount = 0 ; 
 
    BEGIN TRANSACTION [Tran1] 
 
    BEGIN TRY 
 
    <Query 1> ; set @rowcount = (@rowcount + @@ROWCOUNT); 
 
    <Query 2> ; set @rowcount = (@rowcount + @@ROWCOUNT); 
 
    ... 
 
    IF @rowcount = <count of lines> 
 
     COMMIT TRANSACTION[Tran1] 
 
    ELSE 
 
     ROLLBACK TRANSACTION[Tran1] 
 
    END TRY 
 
     BEGIN CATCH 
 
     ROLLBACK TRANSACTION[Tran1] 
 
    END CATCH

par exemple cette exécution de code 2, insérer dans la requête de ligne, mais ou courir tout de lui ou pas quoi que ce soit courir et ROLLBACK

DECLARE @rowcount int set @rowcount = 0 ; 
 
    BEGIN TRANSACTION [Tran1] 
 
    BEGIN TRY 
 
    insert into [database].[dbo].[tbl1] (fld1) values('1') ; 
 
     set @rowcount = (@rowcount + @@ROWCOUNT); 
 
    insert into [database].[dbo].[tbl2] (fld1) values('2') ; 
 
     set @rowcount = (@rowcount + @@ROWCOUNT); 
 

 
    IF @rowcount = 2 
 
     COMMIT TRANSACTION[Tran1] 
 
    ELSE 
 
     ROLLBACK TRANSACTION[Tran1] 
 
    END TRY 
 
     BEGIN CATCH 
 
     ROLLBACK TRANSACTION[Tran1] 
 
    END CATCH