2012-09-20 113 views
8

我犯了一個巨大的錯誤,我執行此查詢:如何回滾不交易

update Contact set ContaPassword = '7FD736A3070CB9766' 

我忘了WHERE條款,所以這種方式更新所有用戶的密碼。 :(

有沒有辦法這個查詢之前,我可以恢復數據?

+0

從您的備份中恢復。 – Oded

+11

[請參閱此處的答案](http://dba.stackexchange.com/a/998/3690) –

+0

SQL Server中沒有Ctrl + Z。 –

回答

6

不能撤消的變化,如果你運行它一個BEGIN TRANSACTION/ROLLBACK之外。這就是爲什麼我開始任何形式的生產數據更新:。

BEGIN TRANSACTION 

-- report the bad or undesired data condition before-hand 
SELECT ... 

-- change the data 
INSERT/UPDATE/DELETE ... 

-- ensure we changed a reasonable number of records; may not be accurate if table has triggers 
SELECT @@ROWCOUNT 

-- get the data condition afterwards and be sure it looks good. 
SELECT ... 

-- always start with this enabled first 
ROLLBACK 

-- don't do this until you are very sure the change looks good 
-- COMMIT 

馬丁·史密斯在這個題目中指出this excellent post by Brent Ozar on dba.stackexchange.com在完全恢復模式,就可以檢查日誌文件,看看有什麼變化

而且,俄德指出的那樣,如果你有備份,這並不難回到原始數據。您可以在某處恢復備份並複製原始數據。

+0

謝謝你的回答,其實沒關係,我們正在爲數據庫進行每日備份,所以我們恢復了數據,這很酷:) – kbaccouche