Sql Server 2005 数据库快照创建删除与恢复操作方法
数据库快照(atabase snapshot)是一个只读的,静态的数据库视图。一个数据库可以有多个数据库快照,每个数据库快照在被显性的删除之前将一直存在。数据库快照将保持和源数据库快照被创建时刻一致,所以可被用来做一些报表。并且由于数据库快照的存在,我们可以很容易的把数据库回复到快照创建时刻。
数据库快照提供了一个把数据库回复到一个特定时间点的有效途径。一个数据库快照将记录从这个数据库快照被创建后已经提交的所有事务,这样你在对数据库进行错误操作后也不会发出“如果上天能够再给我一次机会的话,我。。。。。。”的感慨。由于是只记录数据库发生的改变,也不是在当前的那一时刻数据库的状态,所以数据库文件并不会很大,如下例:
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
--我们先来为数据库Northwind创建一个数据库快照,命名为NORTHWIND_DBSS1200,
--并让此数据库快照的文件存储在C:\NORTHWIND_DATA_1200.SS文件中
CREATE DATABASE NORTHWIND_DBSS1200 ON
( NAME = NORTHWIND, FILENAME =
'C:\NORTHWIND_DATA_1200.SS' )
AS SNAPSHOT OF NORTHWIND;
GO
--可以看到这个数据库快照文件的属性,如下:可以看到现在Size on disk为128K
USE NORTHWIND
GO
--现在Northwind数据库进行更新操作
UPDATE DBO.CUSTOMERS
SET COMPANYNAME='NEWEGG.COM'
--可以看到现在Size on disk为384K
--看一下Northwind数据库中被更新的列中存储的内容是已经被更新过的
SELECT DISTINCT COMPANYNAME FROM NORTHWIND.DBO.CUSTOMERS
--看一下NORTHWIND_DBSS1200数据库中被更新的列中存储的内容还是被更新以前的内容
SELECT DISTINCT COMPANYNAME FROM NORTHWIND_DBSS1200.DBO.CUSTOMERS
--IF AN ERROR DAMAGES A DATABASE, YOU MAY CHOOSE TO REVERT THE DATABASE
--TO A DATABASE SNAPSHOT THAT PREDATES THE ERROR. REVERTING OVERWRITES
--THE ORIGINAL SOURCE DATABASE WITH THE REVERTED DATABASE.
--从数据库快照中恢复数据库到快照创建的时刻
RESTORE DATABASE NORTHWIND FROM
DATABASE_SNAPSHOT = 'NORTHWIND_DBSS1200'
GO
--确认
SELECT DISTINCT COMPANYNAME FROM NORTHWIND.DBO.CUSTOMERS
--删除数据库快照
DROP DATABASE NORTHWIND_DBSS1200
--【创建快照】
CREATE DATABASE Snapshot_Test_20090303 --快照名称
ON
( NAME = 'Snapshot_Test', --不详,可能是mdf的文件名
FILENAME = 'D:\database\Snapshot\Snapshot_Test_20090303.ss' ) --稀疏文件存储路径
AS SNAPSHOT OF Snapshot_Test;
GO
--【恢复快照】
--删除其他任何数据库快照。(有多个快照的情况,只保留一个)
IF EXISTS (SELECT dbid FROM sys.databases
WHERE NAME='Snapshot_Test_20090302') --假设存在‘Snapshot_Test_20090302’快照
DROP DATABASE Snapshot_Test_20090302;
GO
--恢复操作要求对源数据库具有 RESTORE DATABASE 权限。
--若要恢复数据库,请使用下列 Transact-SQL 语句:
--RESTORE DATABASE <数据库名称> FROM DATABASE_SNAPSHOT = <数据库快照名称>
--其中,<数据库名称> 是源数据库的名称,<数据库快照名称> 是要将数据库恢复到的快照的名称。
--注意,必须在此语句中指定快照名称而非备份设备。
RESTORE DATABASE Snapshot_Test FROM DATABASE_SNAPSHOT = 'Snapshot_Test_20090303';
GO
--【删除快照】
DROP DATABASE Snapshot_Test_20090303; -- 删除快照
GO
--并让此数据库快照的文件存储在C:\NORTHWIND_DATA_1200.SS文件中
CREATE DATABASE NORTHWIND_DBSS1200 ON
( NAME = NORTHWIND, FILENAME =
'C:\NORTHWIND_DATA_1200.SS' )
AS SNAPSHOT OF NORTHWIND;
GO
--可以看到这个数据库快照文件的属性,如下:可以看到现在Size on disk为128K
USE NORTHWIND
GO
--现在Northwind数据库进行更新操作
UPDATE DBO.CUSTOMERS
SET COMPANYNAME='NEWEGG.COM'
--可以看到现在Size on disk为384K
--看一下Northwind数据库中被更新的列中存储的内容是已经被更新过的
SELECT DISTINCT COMPANYNAME FROM NORTHWIND.DBO.CUSTOMERS
--看一下NORTHWIND_DBSS1200数据库中被更新的列中存储的内容还是被更新以前的内容
SELECT DISTINCT COMPANYNAME FROM NORTHWIND_DBSS1200.DBO.CUSTOMERS
--IF AN ERROR DAMAGES A DATABASE, YOU MAY CHOOSE TO REVERT THE DATABASE
--TO A DATABASE SNAPSHOT THAT PREDATES THE ERROR. REVERTING OVERWRITES
--THE ORIGINAL SOURCE DATABASE WITH THE REVERTED DATABASE.
--从数据库快照中恢复数据库到快照创建的时刻
RESTORE DATABASE NORTHWIND FROM
DATABASE_SNAPSHOT = 'NORTHWIND_DBSS1200'
GO
--确认
SELECT DISTINCT COMPANYNAME FROM NORTHWIND.DBO.CUSTOMERS
--删除数据库快照
DROP DATABASE NORTHWIND_DBSS1200
--【创建快照】
CREATE DATABASE Snapshot_Test_20090303 --快照名称
ON
( NAME = 'Snapshot_Test', --不详,可能是mdf的文件名
FILENAME = 'D:\database\Snapshot\Snapshot_Test_20090303.ss' ) --稀疏文件存储路径
AS SNAPSHOT OF Snapshot_Test;
GO
--【恢复快照】
--删除其他任何数据库快照。(有多个快照的情况,只保留一个)
IF EXISTS (SELECT dbid FROM sys.databases
WHERE NAME='Snapshot_Test_20090302') --假设存在‘Snapshot_Test_20090302’快照
DROP DATABASE Snapshot_Test_20090302;
GO
--恢复操作要求对源数据库具有 RESTORE DATABASE 权限。
--若要恢复数据库,请使用下列 Transact-SQL 语句:
--RESTORE DATABASE <数据库名称> FROM DATABASE_SNAPSHOT = <数据库快照名称>
--其中,<数据库名称> 是源数据库的名称,<数据库快照名称> 是要将数据库恢复到的快照的名称。
--注意,必须在此语句中指定快照名称而非备份设备。
RESTORE DATABASE Snapshot_Test FROM DATABASE_SNAPSHOT = 'Snapshot_Test_20090303';
GO
--【删除快照】
DROP DATABASE Snapshot_Test_20090303; -- 删除快照
GO