我们今天要介绍的数据恢复功能叫做快照。什么是快照数据库快照是sqlserver2005的一个新特性,它在MSDN上的定义是:数据库快照是一个数据库(称为“源数据库”)的只读静态视图。在创建时,每个数据库快照都与源数据库在事务上保持一致。创建数据库快照时,源数据库通常有打开的事务。打开的事务被回滚以使数据库快照在事务上保持一致,然后才能使用快照。客户端可以查询数据库快照,这对于根据拍摄快照时的数据编写报告很有用。此外,如果源数据库稍后损坏,源数据库可以恢复到拍摄快照时的状态。让我们练习一下数据库快照的创建和使用。创建示例数据库UseMASTER;GOCREATEDATABASE[Snapshot_Test]ONPRIMARY(NAME=N'Snapshot_Test',--数据库名FILENAME=N'C:\ProgramFiles\MicrosoftSQLServer\MSSQL13.MSSQLSERVER\MSSQL\DATA\Snapshot_Test.mdf',--datafile存储位置和数据文件名SIZE=3072KB,--初始容量MAXSIZE=UNLIMITED,--最大容量FILEGROWTH=1024KB--增长容量)LOGON(NAME=N'Snapshot_Test_log',FILENAME=N'C:\ProgramFiles\MicrosoftSQLServer\MSSQL13.MSSQLSERVER\MSSQL\DATA\Snapshot_Test_log.ldf',SIZE=504KB,MAXSIZE=UNLIMITED,FILEGROWTH=10%)COLLATEChinese_PRC_CI_ASGOEXECdbo.sp_dbcmptlevel@dbname=N'Snapshot_Test',@new_cmptlevel=130GOUSE[Snapshot_Test]GOSETANSIATENULLFITEDABLESONGOSETQ].[test]([id][int]NOTNULL,[name][nvarchar](50)COLLATEChinese_PRC_CI_ASNOTNULL)ON[PRIMARY]GO(提示:可以左右滑动代码)创建数据库后,我们马上创建快照,创建快照使用CREATEDATABASE语句也如下:createdatabasesnapshotcreatedatabaseSnapshot_Test_shotON(--是源数据库的逻辑名Name=Snapshot_Test,--快照文件地址FileName='D:\SqlData\Snapshot_Test_shot.ss')ASSNAPSHOTOFSnapshot_Test;result:当前快照应该和我们新建的数据库一模一样,可以使用sqlserver的objectbrowser查看数据库快照,我们可以使用USE[快照库名]查询数据库快照useSnapshot_Test_shot;goSELECT*FROMdbo.test;结果:上述语句执行后,dbo.test中没有数据。接下来,我们向源数据库表Datausesnapshot_Test中插入一些条目;goINSERTINTOTEST(id,name)values(1,'hello1');INSERTINTOTEST(id,name)values(2,'hello2');INSERTINTOTEST(id,name)values(3,'hello3');INSERTINTOTEST(id,name)values(4,'hello4');GOSELECT*FROMdbo.test;结果:我们再次查询快照数据库中的数据useSnapshot_Test_shot;goSELECT*FROMdbo.test;结果:仍然没有数据,那是因为一旦快照被created数据不能写入其中,它是一个只读文件。使用快照恢复数据库从数据库快照恢复数据库usemaster;GORESTOREDATABASESnapshot_TestfromDATABASE_SNAPSHOT='Snapshot_Test_shot';使用快照测试;SELECT*FROMdbo.test结果:可以证明快照将数据库恢复到创建快照的时刻。删除数据库快照的语法与删除数据库的语法相同。DROPDATABASESnapshot_Test_shot结果:数据库快照下没有快照,说明已经删除。应用场景数据库快照在MSDN中的典型应用有:1)维护历史数据生成报表。2)使用为可用性目标维护的镜像数据库卸载报告。3)保护数据免受管理错误的影响。4)保护数据免受用户错误的影响。
