当前位置: 首页 > 科技观察

SQL中如何使用快照恢复被误删除的数据?

时间:2023-03-14 08:39:10 科技观察

什么是快照数据库快照是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(提示:可以左右滑动代码)也可以直接在SSMS中创建测试数据库通过图形界面,这里就不多说了。创建好数据库后,我们新建了一张测试表,我们先往里面插入测试数据。如下:usesnapshot_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;结果:然后我们马上创建快照,快照也是使用CREATEDATABASE语句创建的,如下:创建数据库快照执行如下语句创建快照createdatabaseSnapshot_Test_shotON(--是源数据库的逻辑名Name=Snapshot_Test,--快照文件地址FileName='D:\SqlData\Snapshot_Test_shot.ss')ASSNAPSHOTOFSnapshot_Test;结果:当前快照应该和我们新建的数据库一模一样,可以通过sqlserver的对象浏览器查看数据库快照,我们可以使用USE[快照库名]查询数据库快照useSnapshot_Test_shot;goSELECT*FROMdbo.test;结果:删除测试数据库数据接下来我们删除测试数据库中的数据useSnapshot_Test;goDELETEFROMdbo.测试;结果:使用快照恢复数据库。上面的删除是我们模拟误删数据库中的数据,还好我们做了数据库的快照。快照可用于恢复刚刚被误删除的数据。--SyntaxRESTOREDATABASEDB_NAMEFROMDATABASE_SNAPSHOT='DB_SNAPSHOT_NAME'我们按照上面的语法RESTOREDATABASEnapshot_testFROMDATABASE_SNAPSHOT='Snapshot_test_shot'进行恢复,执行上面的恢复语句后,我们再查询测试库中的表useSnapshot_Test;通过创建快照来恢复被误删除的数据。注意:1.快照是只读的,一旦创建就不能修改。2、快照只能恢复数据库,不能恢复指定的表。3.为了防止误删除,快照必须在数据插入或更新到数据库后创建,否则会在插入或更新前创建快照,插入或更新的数据被删除且无法恢复.4、快照一般与定时任务配合使用,可以定时创建不同的快照,防止数据丢失。删除数据库快照与删除数据库的语法相同。DROPDATABASESnapshot_Test_shot结果:数据库快照下没有快照,说明已经删除。应用场景数据库快照在MSDN中的典型应用有:1)维护历史数据生成报表。2)使用为可用性目标维护的镜像数据库卸载报告。3)保护数据免受管理错误的影响。4)保护数据免受用户错误的影响。【责任编辑:吴晓燕电话:(010)68476606】