2012-09-20 112 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