03
十一

SQLSERVER - 快照(SNAPSHOT)

快照(SNAPSHOT),是自SQLServer 2k5之后加入的新功能,能记录数据库某一时刻的只读静态视图。

实现的原理很简单,SQLServer的数据存储的基本单位是页,创建数据库快照时会创建一个稀疏文件,如果在快照创建之后,源数据库的某个页发生变化,则将旧的页复制到稀疏文件中,写入页和复制页是同时进行的。

查询快照时,如果涉及到变动的页则查询稀疏文件中的备份,否则依然查询源数据中的页。

数据库快照的常用场景
1、维护历史数据以生成报表
2、在进行重大更新之前创建快照来保护数据。
3、减少用户失误带来的影响,比如可以每24小时创建6到12个滚动快照,每创建一个新的快照,就删除最早的快照。
4、用来进行数据库测试和恢复。

对源数据库的限制
1、不能对源数据库进行删除、分离或还原,必须先删除数据库快照,但可以备份
2、源数据库性能会受到影响,因为每次更新页都会对快照执行“写入时复制”操作。
3、源数据库必须处于连接状态,除非该数据库在数据库镜像会话中式镜像数据库。
4、若要在镜像数据库中创建数据库快照,数据库必须处于同步镜像状态。

数据库快照的限制
1、必须与源数据库在同一个服务器实例上
2、始终对整个数据库拍摄快照
3、禁止对model、master、tempdb数据库创建快照
4、不能更改数据库快照文件的任何规范
5、不能备份和还原,附加或分离数据库快照
6、不能在FAT32文件系统或RAW分区上创建快照,应为所用的稀疏文件由NTFS文件系统提供。
7、不支持全文索引,所以若从快照恢复会清除全文索引

创建、恢复、删除数据库快照
CREATE DATABASE SNAPSHOT_NAME ON
(NAME=DB_NAME,FILENAME='physical path')
AS SNAPSHOT OF DB_NAME

RESTORE DATABASE DB_NAME FROM DATABASE_SNAPSHOT='SNAPSHOT_NAME'

DROP DATABASE SNAPSHOT_NAME
 
还没有评论!
    第一个发布评论?
发表评论
 名字(必须)
 邮箱(可选)
 网址(可选)