SQL Server 2005灾难恢复步骤
2010-03-06 15:42:21 来源:WEB开发网4) 还原数据库到一个已知的良好时间点
现在,任何用户意外地删除一张表或者在数据库上造成一些破坏后都不会立即告诉你。有时候,你可能需要自己深入挖掘它,但是这需要花很多时间。由于我们想让数据库尽快地联机,所以我们假设一个众所周知的良好时间点,并且让发掘在稍后的时间里进行。在下面的脚本中,我将选择在我的STOPAT参数中将早上10:42设置成已知的良好时间点,一次达到展示的目的。
RESTOREDATABASENorthwind
FROMDISK=N'D:DBBackupNorthwindBackup.bak'
WITHNORECOVERY,RESTRICTED_USER
GO
RESTORELOGNorthwind
FROMDISK=N'D:DBBackupNorthwindBackupLog.trn'
WITHRESTRICTED_USER,
STOPAT='2008-09-2310:42:44.00',RECOVERY
--usea"knowngood"pointintime
GO
虽然我们已经把数据库恢复到一个已知的良好时间点,但是我们并没有知道我们实际上到底失去了多少数据。我们需要找出在执行DROP TABLE语句之前执行最后的一个INSERT语句的准确时间,这样我们才能恢复尽可能多的数据。但是由于我们需要尽可能快地使数据库联机,所以我们不想在数据库上直接做这些。这正证明了接下来的步骤是有价值的。
你可以通过执行一个针对它的查询来验证删除的表是否已经恢复。
SELECT*
FROMNorthwind.dbo.[OrderDetails]
GO
5) 创建一个恢复点的快照
我们将创建一个还原数据库的数据库快照,以此来做进一步的处理。这个数据库快照将是把数据恢复到执行DROP TABLE语句之前的准确时间的参考。
USEmaster
GO
CREATEDATABASENorthwind_RestorePointSnapshot
ON
(NAME=N'Northwind',
FILENAME=N'D:DBBackupNorthwindData_RestorePontSnapshot.snap')
ASSNAPSHOTOF[Northwind]
GO
依靠这个表模式,我们可以选择让它保持原状,或者像我们对Order Details 表所做的那样,或者多做一些操作。如果这张表有一个现有IDENTITY栏,我们需要在IDENTITY栏的最大值和需要恢复的行的假设数量之间创建一个间隙。这当然取决于在服务器上发生的事务数目。要确定IDENTITY栏的最大值,你可以执行如下显示的DBCC CHECKIDENT命令:
DBCCCHECKIDENT('tableName')
--Displaysthenumberofrowsyouhavefortherestoredtable
GO
这将返回IDENTITY列的最大值。让我们假设这张表每天的事务数目大约是4000条记录,我们可以在最大值和下一个值之间创建一个间隙。如果IDENTITY列的最大值是25000,我们需要将4000加到这个值中,并且再次执行带有RESEED参数的DBCC CHECKIDENT命令(我们简单假设你在一天之内可以恢复失去的数据,那就是值为400):
DBCCCHECKIDENT('tableName',RESEED,29000)
--CreatesagapoffortheIDENTITYcolumntostartthenextvalueat29000
GO
更多精彩
赞助商链接