这将很有效地使数据库脱机,停止所有活动的连接。这是分秒必争的时刻,我们需要采取行动。当进行到下面的步骤时,请牢记你的RPO和RTO。
(3) 备份事务日志
一个好的数据库管理员应该知道当灾难来临时,首先要做的是备份事务日志 – 假设你的数据库被设置成全数据库备份。这是为了确保在上次备份之后你还保存所有活动的事务。在我们的场景中,由于上次的备份 – 全备份,在这个例子中 – 发生于早上6:00。
BACKUP LOG NorthwindTO DISK = N'D:\DBBackup\NorthwindBackupLog.trn'
WITH NAME = N'Transaction Log Backup'
, DESCRIPTION = 'Getting everything to current point in time.',
STATS = 10
GO
(4)还原数据库到一个已知的良好时间点
现在,任何用户意外地删除一张表或者在数据库上造成一些破坏后都不会立即告诉你。有时候,你可能需要自己深入挖掘它,但是这需要花很多时间。由于我们想让数据库尽快地联机,所以我们假设一个众所周知的良好时间点,并且让发掘在稍后的时间里进行。在下面的脚本中,我将选择在我的STOPAT参数中将早上 10:42设置成已知的良好时间点,一次达到展示的目的。
FROM DISK = N'D:\DBBackup\NorthwindBackup.bak'
WITH NORECOVERY, RESTRICTED_USER
GO
RESTORE LOG Northwind
FROM DISK = N'D:\DBBackup\NorthwindBackupLog.trn'
WITH RESTRICTED_USER,
STOPAT = '2008-09-23 10:42:44.00', RECOVERY
-- use a "known good" point in time
GO
虽然我们已经把数据库恢复到一个已知的良好时间点,但是我们并没有知道我们实际上到底失去了多少数据。我们需要找出在执行DROP TABLE语句之前执行最后的一个INSERT语句的准确时间,这样我们才能恢复尽可能多的数据。但是由于我们需要尽可能快地使数据库联机,所以我们不想在数据库上直接做这些。这正证明了接下来的步骤是有价值的。
你可以通过执行一个针对它的查询来验证删除的表是否已经恢复。
SELECT *FROM Northwind.dbo.[Order Details]
GO
(5)创建一个恢复点的快照
我们将创建一个还原数据库的数据库快照,以此来做进一步的处理。这个数据库快照将是把数据恢复到执行DROP TABLE语句之前的准确时间的参考。
文章来源于领测软件测试网 https://www.ltesting.net/