老师,求一条Transact-SQL 语句,用于创建sql server 2005 的数据库快照  
 语句怎么写呢?

解决方案 »

  1.   

    --我们先来为数据库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为128KUSE NORTHWINDGO--现在Northwind数据库进行更新操作UPDATE DBO.CUSTOMERSSET 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 FROMDATABASE_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