合 MSSQL的数据库快照
Tags: MSSQLSQL Server整理自网络数据库快照
简介
数据库快照是 SQL Server 数据库(“源数据库”)的只读静态视图。 自创建快照那刻起,数据库快照在事务上与源数据库一致。 数据库快照始终与其源数据库位于同一服务器实例上。 虽然数据库快照提供与创建快照时处于相同状态的数据的只读视图,但快照文件的大小随着对源数据库的更改而增大。
使用 CREATE DATABASE T-SQL 语法(使用 AS SNAPSHOT OF
语法)创建数据库快照。
给定源数据库中可以存在多个快照。 在数据库所有者显式删除每个数据库快照之前,该快照将一直保留。
备注
数据库快照与快照备份、Transact-SQL 快照备份、事务的快照隔离或快照复制无关。
数据库快照概述
数据库快照在数据页级运行。 在第一次修改源数据库页之前,先将原始页从源数据库复制到快照。 快照将存储原始页,保留它们在创建快照时的数据记录。 对要进行第一次修改的每一页重复此过程。 对于用户而言,数据库快照似乎始终保持不变,因为对数据库快照的读操作始终访问原始数据页,而与页驻留的位置无关。
为了存储复制的原始页,快照使用一个或多个“稀疏文件” 。 最初,稀疏文件实质上是空文件,不包含用户数据并且未被分配存储用户数据的磁盘空间。 随着源数据库中更新的页越来越多,文件的大小也不断增长。 下图说明了两种相对的更新模式对快照大小的影响。 更新模式 A 反映的是在快照使用期限内仅有 30% 的原始页更新的环境。 更新模式 B 反映的是在快照使用期限内有 80% 的原始页更新的环境。
数据库快照的优点
快照可用于报告目的。
客户端可以查询数据库快照,这对于基于创建快照时的数据编写报表是很有用的。
维护历史数据以生成报表。
快照可以从特定时点扩展用户对数据的访问权限。 例如,您可以在给定时间段(例如,财务季度)要结束的时候创建数据库快照以便日后制作报表。 然后便可以在快照上运行期间要结束时创建的报表。 如果磁盘空间允许,还可以维护任意多个不同期间要结束时的快照,以便能够对这些时间段的结果进行查询。例如,调查单位性能。
使用为了实现可用性目标而维护的镜像数据库来减轻报表负载。
使用带有数据库镜像的数据库快照,使您能够访问镜像服务器上的数据以生成报表。 而且,在镜像数据库上运行查询可以释放主体数据库上的资源。 有关详细信息,请参阅 数据库镜像和数据库快照 (SQL Server)。
使数据免受管理失误所带来的影响。
如果源数据库上出现用户错误,您可将源数据库恢复到创建给定数据库快照时的状态。 丢失的数据仅限于创建快照后数据库更新的数据。
例如,在进行重大更新(比如大容量更新或架构更改)前,对数据库创建数据库快照以保护数据。 一旦进行了错误操作,可以使用快照将数据库恢复到生成快照时的状态。 为此目的进行的恢复很可能比从备份还原快得多;但是,此后您无法对数据进行前滚操作。
重要
无法对脱机或损坏的数据库进行恢复。 因此,为了保护数据库,非常有必要定期执行备份并测试还原计划。
备注
数据库快照与源数据库相关。 因此,使用数据库快照恢复数据库不能代替备份和还原策略。 严格按计划执行备份仍然至关重要。 如果必须将源数据库还原到创建数据库快照的时间点,请实施允许您执行该操作的备份策略。
使数据免受用户失误所带来的影响。
定期创建数据库快照,可以减轻重大用户错误(例如,删除的表)的影响。 为了很好地保护数据,可以创建时间跨度足以识别和处理大多数用户错误的一系列数据库快照。 例如,根据磁盘资源,可以每 24 小时创建 6 到 12 个滚动快照。 每创建一个新的快照,就删除最早的快照。
- 若要从用户错误中恢复,可以将数据库恢复到在错误发生的前一时刻的快照。 为此目的进行的恢复很可能比从备份还原快得多;但是,此后您无法对数据进行前滚操作。
- 或者,也可以利用快照中的信息,手动重新创建删除的表或其他丢失的数据。 例如,可以将快照中的数据大容量复制到数据库中,然后手动将数据合并回数据库中。
备注
本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!