SQL Server 数据库快照

1. 数据库快照概述(SQL Server)
2. 查看数据库快照的稀疏文件大小 (Transact-SQL)
3. 创建数据库快照 (Transact-SQL)
4. 查看数据库快照 (SQL Server)
5. 将数据库恢复到数据库快照
6. 删除数据库快照 (Transact-SQL)



1. 数据库快照概述(SQL Server)

功能概述:

数据库快照在数据页级运行。在第一次修改源数据库页之前,先将原始页从源数据库复制到快照。快照将存储原始页,保留它们在创建快照时的数据记录。对要进行第一次修改的每一页重复此过程。对于用户而言,数据库快照似乎始终保持不变,因为对数据库快照的读操作始终访问原始数据页,而与页驻留的位置无关。
为了存储复制的原始页,快照使用一个或多个“稀疏文件”。最初,稀疏文件实质上是空文件,不包含用户数据并且未被分配存储用户数据的磁盘空间。随着源数据库中更新的页越来越多,文件的大小也不断增长。下图说明了两种相对的更新模式对快照大小的影响。更新模式 A 反映的是在快照使用期限内仅有 30% 的原始页更新的环境。更新模式 B 反映的是在快照使用期限内有 80% 的原始页更新的环境。


数据库快照有点:

A. 快照可用于报告目的。
客户端可以查询数据库快照,这对于基于创建快照时的数据编写报表是很有用的。

B. 维护历史数据以生成报表。
快照可以从特定时点扩展用户对数据的访问权限。例如,您可以在给定时间段(例如,财务季度)要结束的时候创建数据库快照以便日后制作报表。然后便可以在快照上运行期间要结束时创建的报表。如果磁盘空间允许,还可以维护任意多个不同期间要结束时的快照,以便能够对这些时间段的结果进行查询。例如,调查单位性能。

C. 使用为了实现可用性目标而维护的镜像数据库来减轻报表负载。
使用带有数据库镜像的数据库快照,使您能够访问镜像服务器上的数据以生成报表。而且,在镜像数据库上运行查询可以释放主体数据库上的资源。有关详细信息,请参阅数据库镜像和数据库快照 (SQL Server)。

D. 使数据免受管理失误所带来的影响。

E. 如果源数据库上出现用户错误,您可将源数据库恢复到创建给定数据库快照时的状态。丢失的数据仅限于创建该快照后数据库中发生更新的数据。
例如,在进行重大更新(比如大容量更新或架构更改)前,对数据库创建数据库快照以保护数据。一旦进行了错误操作,可以使用快照将数据库恢复到生成快照时的状态。为此目的进行的恢复很可能比从备份还原快得多;但是,此后您无法对数据进行前滚操作。

数据库快照的限制:

● 数据库快照必须与源数据库在相同的服务器实例上创建和保留。
● 始终对整个数据库制作数据库快照。
● 数据库快照依赖于源数据库,但不是冗余存储。它们无法防止磁盘错误或其他类型的损坏。因此,使用数据库快照恢复数据库不能代替备份和还原策略。严格按计划执行备份仍然至关重要。如果必须将源数据库还原到创建数据库快照的时间点,请实施允许您执行该操作的备份策略。
● 当将源数据库中更新的页强制压入快照时,如果快照用尽磁盘空间或者遇到其他错误,则该快照将成为可疑快照并且必须将其删除。
● 快照为只读。
● 禁止对 model 数据库、master 数据库和 tempdb 数据库创建快照。
● 不能更改数据库快照文件的任何规范。
● 不能从数据库快照中删除文件。
● 不能备份或还原数据库快照。
● 不能附加或分离数据库快照。
● 不能在 FAT32 文件系统或 RAW 分区上创建数据库快照。数据库快照所用的稀疏文件由NTFS文件系统提供。
● 数据库快照不支持全文索引。不从源数据库传播全文目录。
● 数据库快照将继承快照创建时其源数据库的安全约束。由于快照是只读的,因此无法更改继承的权限,对源数据库的更改权限将不反映在现有快照中。
● 快照始终反映创建该快照时的文件组状态:联机文件组将保持联机状态,脱机文件组将保持脱机状态。有关详细信息,请参阅本主题后面的“含有脱机文件组的数据库快照”。
● 如果源数据库的状态为 RECOVERY_PENDING,可能无法访问其数据库快照。但是,当解决了源数据库的问题之后,快照将再次变成可用快照。
● 只读文件组和压缩文件组不支持恢复操作。尝试恢复包含下列任意一种文件组的数据库将失败。
● 在日志传送配置中,只能针对主数据库,而不能针对辅助数据库创建数据库快照。如果您在主服务器实例和辅助服务器实例之间切换角色,则在将主数据库设置为辅助数据库之前,必须先删除所有数据库快照。
● 不能将数据库快照配置为可缩放共享数据库。
● 数据库快照不支持 FILESTREAM 文件组。如果源数据库中存在 FILESTREAM 文件组,则它们在数据库快照中被标识为脱机状态,且其数据库快照不能用于恢复数据库。


2. 查看数据库快照的稀疏文件大小 (Transact-SQL)

创建数据库快照期间,可以使用 CREATE DATABASE 语句中的文件名来创建稀疏文件。 这些文件名存储在 sys.master_files中的physical_name列中。 在 sys.database_files 中(无论是在源数据库中还是在快照中),physical_name 列中始终包含源数据库文件的名称。

验证数据库文件是稀疏文件:
在 SQL Server 实例上:
从数据库快照的 sys.database_files 中或从 sys.master_files中选择 is_sparse列。 该值指示文件是否是稀疏文件,如下所示:
1 = 文件是稀疏文件。
0 = 文件不是稀疏文件。

查看稀疏文件的实际大小:
注意:

稀疏文件按 64 KB 的增量增长;因此,磁盘上稀疏文件的大小始终是 64 KB 的倍数。
若要查看磁盘上当前使用的每个快照稀疏文件的字节数,请查询 SQL Server sys.dm_io_virtual_file_stats 动态管理视图的size_on_disk_bytes列。
若要查看稀疏文件占用的磁盘空间,在 Microsoft Windows 中右键单击文件,再单击“属性”,然后查看“占用空间”值。

查看稀疏文件的最大大小:
稀疏文件最大只能增长到创建快照时相应的源数据库文件的大小。 若要了解此大小,可以使用下列方法之一:
--使用 Windows 命令提示符:
--使用 Windows dir 命令。
在 Windows 中,选择稀疏文件,打开文件“属性”对话框,然后查看“大小”值。
在 SQL Server 实例上:
从数据库快照的 sys.database_files 中或从 sys.master_files 中选择 size 列。 “大小”列的值反映快照可以使用的最大空间(SQL 页数);

此值相当于 Windows 的“大小”字段,不同的是此值以文件中包含的 SQL 页数表示;大小(以字节为单位)为:( number_of_pages * 8192)


3. 创建数据库快照 (Transact-SQL)

根据源数据库的当前大小,确保有足够的磁盘空间存放数据库快照。数据库快照的最大大小为创建快照时源数据库的大小。

使用 AS SNAPSHOT OF 子句对文件执行CREATE DATABASE语句。创建快照需要指定源数据库的每个数据库文件的逻辑名称

CREATE DATABASE database_snapshot_name
    ON
    (
        NAME = logical_file_name,
        FILENAME = 'os_file_name'
    ) [ ,...n]
    AS SNAPSHOT OF source_database_name
[;]

示例:

--(示例中使用的扩展名 .ss 是随意选择的)
CREATE DATABASE TestDB_dbss1800 ON
( 
NAME = TestDB,--数据库文件名  
FILENAME = 'C:\Documents and Settings\Administrator\桌面\TestDB_Data_1800.ss' )
AS SNAPSHOT OF TestDB;--数据库名

GO


4. 查看数据库快照 (SQL Server)

使用 SQL Server Management Studio:
在对象资源管理器中,连接到 SQL Server 数据库引擎实例,然后展开该实例。
展开“数据库”。
展开“数据库快照”,然后选择要查看的快照。

使用 Transact-SQL:
连接到数据库引擎。
在标准菜单栏上,单击“新建查询”。
若要列出 SQL Server 实例的数据库快照,对于非 NULL 值请查询 sys.databases 目录视图的 source_database_id 列。

SELECT * FROM  sys.databases where source_database_id is not null



5. 将数据库恢复到数据库快照

RESTORE DATABASE 数据库名 FROM DATABASE_SNAPSHOT = '快照名'
RESTORE DATABASE TestDB FROM DATABASE_SNAPSHOT = 'TestDB_dbss1800'

6. 删除数据库快照 (Transact-SQL)

DROP DATABASE 快照名
DROP DATABASE TestDB_dbss1800



更多参考:http://msdn.microsoft.com/zh-cn/library/ms175158.aspx







  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值