长话短说,我试图使用Management studio快速更新SQL Server中的单行,只是键入UPDATE table SET column='value'并忘记了该WHERE other_column='other_value'部分.去吃午饭,回来了,还有15封未读的电子邮件等着我.发生在大约一个小时前,等待数据库人回来查看上次备份的时间.虽然有没有神奇的UNDO功能?
Sco*_*vey 19
是的,有 - 这是交易日志.要从这样的事情中恢复,只要您的数据库处于完全恢复模型,您只需执行另一个事务日志备份,然后使用设置的STOPAT选项进行恢复,以告知恢复在此时停止恢复.在您开始交易之前的时间.这将使数据库恢复到您的错误点.
有关使用STOPAT选项的更多信息,请参见此处 - http://msdn.microsoft.com/en-us/library/ms186858(SQL.90).aspx.
你的脚本看起来像这样......
-- backup the existing log
BACKUP LOG [MyDatabase]
TO DISK = N'\\MyServer\Share\MyDatabase.trn'
-- options left out for brevity
GO
-- restore the database first
RESTORE DATABASE [MyDatabase]
FROM DISK = N'\\MyServer\Share\MyDatabase.bak'
WITH FILE = 1,
NORECOVERY,
NOUNLOAD,
STATS = 10
GO
/* Previous transaction logs in the chain go here... */
/* restore your log that you backed up after the mistake
took place, stopping at your point where the problem happened */
RESTORE LOG [MyDatabase]
FROM DISK = N'\\MyServer\Share\MyDatabase.trn'
WITH FILE = 1,
NORECOVERY,
NOUNLOAD,
STATS = 10,
STOPAT = '2010-03-12 13:00'
GO
Run Code Online (Sandbox Code Playgroud)