2010-02-01 13 views
15

Czy istnieje sposób, abyśmy mogli cofnąć zapytanie o aktualizację SQL?Aktualizacja SQL cofnąć

+0

Nie mów, co baza danych używasz.Jeśli korzystasz z Oracle, możesz wypróbować zapytanie flashback, aby odzyskać niepotrzebne dane. –

Odpowiedz

16

Nie można, chyba że został uruchomiony wewnątrz transaction.

W zależności od transakcji DBMS transakcje będą obsługiwane inaczej, dlatego należy przeczytać dokumentację. Na przykład z mysql oto jak to działa:

START TRANSACTION; 
SELECT @A:=SUM(salary) FROM table1 WHERE type=1; 
UPDATE table2 SET [email protected] WHERE type=1; 
COMMIT; 

Z Postresql:

BEGIN; 
UPDATE accounts SET balance = balance - 100.00 
    WHERE name = 'Alice'; 
-- etc etc 
COMMIT; 

Z TSQL:

DECLARE @TranName VARCHAR(20) 
SELECT @TranName = 'MyTransaction' 
BEGIN TRANSACTION @TranName 
GO 
USE pubs 
GO 
UPDATE roysched 
SET royalty = royalty * 1.10 
WHERE title_id LIKE 'Pc%' 
GO 
COMMIT TRANSACTION MyTransaction 
GO 

Istnieją również pewne działania, które nie mogą być wprowadzane do transakcji , ale w większości systemów zarządzania bazami danych, które można znaleźć w tych dniach, powinieneś być w stanie wycofać update.

Na koniec zawsze można cofnąć aktualizację, jeśli prowadzisz dokładny rejestr wszystkiego, co dzieje się w bazie danych, ale to już inna historia.

5

Po uruchomieniu aktualizacji w ramach transakcji można wycofać transakcję.

SQL Server:

begin transaction 

update [Table] set col1 = 'test' where Id = 3 

rollback transaction 

Inna technika może być dodanie wyzwalacz aktualizacji do stołu, i wszędzie rekord jest aktualizowany, zapisać poprzednie wartości off do „historii” tabeli. To może, ale nie musi być dobrym pomysłem, jeśli ta tabela jest intensywnie używana.

2

Cofanie w języku SQL nosi nazwę rollback. Po wykonaniu operacji commit nie można jej cofnąć bez przywracania kopii zapasowych.

Należy pamiętać, że cofnięcie wycofania spowoduje cofnięcie całej transakcji, co oznacza każdą aktualizację, wstawienie i usunięcie od rozpoczęcia transakcji, co zwykle ma miejsce od ostatniego zatwierdzenia lub wycofania. Oznacza to, że jeśli wykonasz dwie kolejne aktualizacje, nie możesz cofnąć tylko drugiej. Niektóre bazy danych zapewniają "punkty zapisu", które pozwalają na to.

1

Tylko jeśli jesteś w transakcji (jak marcgg) powiedział, czy masz najnowszą kopię zapasową ... odzyskanie w ten sposób robi stretch termin „cofnąć” rathermuch ..

0

Można użyć narzędzia firm trzecich jak Red Gate's Log Rescue. Istnieje 14-dniowy bezpłatny, funkcjonalny okres próbny ich narzędzi SQL Toolkit. (Zakładając SQL Server 2000!).

6

SQL Server nie obsługuje tego po wyjęciu z pudełka, ale w niektórych przypadkach możliwe jest odzyskanie danych przez odczytanie dziennika transakcji. Działa to, jeśli baza danych była w pełnym trybie odzyskiwania i potrzebne są narzędzia innych firm, takie jak ApexSQL Log lub Log Rescue. Istnieje również sposób odczytu t-log za pomocą polecenia DBCC LOG, ale prawdopodobnie okaże się to zbyt trudne.

Można również sprawdzić następujące tematy gdzie to jest omówione:

How can I rollback an UPDATE query in SQL server 2005?

Read the log file (*.LDF) in SQL Server 2008