2016-04-04 27 views
0

SQL geri alma işleminde, durumu geri yüklediği yerden? Verilerin saklandığı yerde geri almanın geri alabileceği anlamına gelir.SQL geri alma işleminde, durumu geri yüklediği yerden?

+1

Bu, uygulamaya özgüdür. –

+0

İşlem günlüğü. SQL SQL Server'da bir güncelleme gerçekleştiğinde, önce işlem günlüğünde olur, sonra veriler yazılır, böylece geri döndüğünde, t-günlük girişlerini kaldırır ve DB'nin durumu işlem öncesindeki gibi olur. olmuş. düzenleme * SQL Server'a özgü. – Jeremy

cevap

0

Oracle için, redo günlüğünde değişiklikler tahakkuk edene kadar kaydediliyor. Her RDMS'nin kendi stratejisi vardır.

+0

Aslında Oracle'daki UNDO, yineleme değil. –

0
Eğer onlardan uzak çalıştırmak% 100 (sorgunun tüm çizgi çalıştırın) veya hiç vadede herhangi için güvenli ve kolay bir kodu kullanabilirsiniz

| sorgu 1 | = eklemek veya seçmek gibi veya ... | satır sayısı | = Sayı kapalı sorgu

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

örneğin bu kod çalıştırma 2 insert kendisine veya hiç çalıştırmak şey bütün çalıştırın ve ROLLBACK hat sorguya ama ya

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