SQL Server Snapshot

Snapshot是SQL Server 2005引入的一个新特性,只有在Enterprise版本中有这个功能。

创建Snapshot:

创建Snapshot的语句和创建Database的语句类似,只是在末尾多了AS SNAPSHOT OF。(注意:暂时还不支持用Sql Server Management Studio以图形化的方式创建Snapshot)
CREATE DATABASE RMS_V3_SQA_snapshot_20110928 ON
( NAME = N'RMS_V3',
FILENAME = N'H:\INTEL_DB_DUMPS\JABDW1239\DONT_TOUCH\RMS_V3_SQA_snapshot_20110928.snap' )
AS SNAPSHOT OF RMS_V3_SQA;
注意:其中的NAME必须和源数据库的logical name匹配。

Snapshot的工作原理:

Snapshot是一个只读的、静态的数据库视图,当Snapshot创建时,SQL Server会做以下几个方面:
1. 创建一个稀疏文件(sparse file),该文件在Windows上显示的大小(Size)和源数据文件一样,但是实际占用大小(Size on disk)却很小,几乎为空。
2. 源数据库触发Checkpoint(即把所有的脏数据从内存写入到磁盘);
3. 对于为提交的事务,在Snapshot端将会回滚;
一旦Snapshot创建之后,copy-on-write机制便开始起作用了:当源数据库的某个page发生改变时,在它改变之前,先把该page复制到Snapshot的稀疏文件。当一个查询语句到达Snapshot时,SQL Server会先判断查询的page是否被修改过,如果已经被修改过,SQL Server访问Snapshot的稀疏文件,如果未被修改过,SQL Server访问源数据库的page。

这样做的好处是使得创建Snapshot非常快,占用的空间也很小;缺点是太依赖于源数据库,且对源数据库的性能有一些影响(当源数据库发生改变时,需要维护Snapshot)

Snapshot的主要用途:

1.防止用户误操作: 在做复杂操作之前,先创建一个snapshot,万一出现问题,可以用以下语句从snapshot中恢复源数据库:
RESTORE DATABASE RMS_V3_SQA
from DATABASE_SNAPSHOT = 'RMS_V3_SQA_snapshot_20110928'
2.保存历史数据

Snapshot的限制:

1.Snapshot必须得和源数据库在同一个实例中;
2.不能备份、恢复、attach,detach Snapshot
3.对master,model,tempdb数据库不能创建Snapshot;
4.一旦Snapshot创建之后,源数据库不能被删除、恢复。

参考文献: http://www.simple-talk.com/sql/database-administration/sql-server-2005-snapshots/
请使用浏览器的分享功能分享到微信等