合 MSSQL的数据库快照
Tags: MSSQLSQL Server整理自网络数据库快照
简介
数据库快照是 SQL Server 数据库(“源数据库”)的只读静态视图。 自创建快照那刻起,数据库快照在事务上与源数据库一致。 数据库快照始终与其源数据库位于同一服务器实例上。 虽然数据库快照提供与创建快照时处于相同状态的数据的只读视图,但快照文件的大小随着对源数据库的更改而增大。
使用 CREATE DATABASE T-SQL 语法(使用 AS SNAPSHOT OF
语法)创建数据库快照。
给定源数据库中可以存在多个快照。 在数据库所有者显式删除每个数据库快照之前,该快照将一直保留。
备注
数据库快照与快照备份、Transact-SQL 快照备份、事务的快照隔离或快照复制无关。
数据库快照概述
数据库快照在数据页级运行。 在第一次修改源数据库页之前,先将原始页从源数据库复制到快照。 快照将存储原始页,保留它们在创建快照时的数据记录。 对要进行第一次修改的每一页重复此过程。 对于用户而言,数据库快照似乎始终保持不变,因为对数据库快照的读操作始终访问原始数据页,而与页驻留的位置无关。
为了存储复制的原始页,快照使用一个或多个“稀疏文件” 。 最初,稀疏文件实质上是空文件,不包含用户数据并且未被分配存储用户数据的磁盘空间。 随着源数据库中更新的页越来越多,文件的大小也不断增长。 下图说明了两种相对的更新模式对快照大小的影响。 更新模式 A 反映的是在快照使用期限内仅有 30% 的原始页更新的环境。 更新模式 B 反映的是在快照使用期限内有 80% 的原始页更新的环境。
数据库快照的优点
快照可用于报告目的。
客户端可以查询数据库快照,这对于基于创建快照时的数据编写报表是很有用的。
维护历史数据以生成报表。
快照可以从特定时点扩展用户对数据的访问权限。 例如,您可以在给定时间段(例如,财务季度)要结束的时候创建数据库快照以便日后制作报表。 然后便可以在快照上运行期间要结束时创建的报表。 如果磁盘空间允许,还可以维护任意多个不同期间要结束时的快照,以便能够对这些时间段的结果进行查询。例如,调查单位性能。
使用为了实现可用性目标而维护的镜像数据库来减轻报表负载。
使用带有数据库镜像的数据库快照,使您能够访问镜像服务器上的数据以生成报表。 而且,在镜像数据库上运行查询可以释放主体数据库上的资源。 有关详细信息,请参阅 数据库镜像和数据库快照 (SQL Server)。
使数据免受管理失误所带来的影响。
如果源数据库上出现用户错误,您可将源数据库恢复到创建给定数据库快照时的状态。 丢失的数据仅限于创建快照后数据库更新的数据。
例如,在进行重大更新(比如大容量更新或架构更改)前,对数据库创建数据库快照以保护数据。 一旦进行了错误操作,可以使用快照将数据库恢复到生成快照时的状态。 为此目的进行的恢复很可能比从备份还原快得多;但是,此后您无法对数据进行前滚操作。
重要
无法对脱机或损坏的数据库进行恢复。 因此,为了保护数据库,非常有必要定期执行备份并测试还原计划。
备注
数据库快照与源数据库相关。 因此,使用数据库快照恢复数据库不能代替备份和还原策略。 严格按计划执行备份仍然至关重要。 如果必须将源数据库还原到创建数据库快照的时间点,请实施允许您执行该操作的备份策略。
使数据免受用户失误所带来的影响。
定期创建数据库快照,可以减轻重大用户错误(例如,删除的表)的影响。 为了很好地保护数据,可以创建时间跨度足以识别和处理大多数用户错误的一系列数据库快照。 例如,根据磁盘资源,可以每 24 小时创建 6 到 12 个滚动快照。 每创建一个新的快照,就删除最早的快照。
- 若要从用户错误中恢复,可以将数据库恢复到在错误发生的前一时刻的快照。 为此目的进行的恢复很可能比从备份还原快得多;但是,此后您无法对数据进行前滚操作。
- 或者,也可以利用快照中的信息,手动重新创建删除的表或其他丢失的数据。 例如,可以将快照中的数据大容量复制到数据库中,然后手动将数据合并回数据库中。
备注
使用数据库快照的原因,决定了数据库需要多少个并发快照、多久创建一次新快照以及将其保留多久。
管理测试数据库。
在测试环境中,当每一轮测试开始时针对要包含相同数据的数据库重复运行测试协议将十分有用。 在运行第一轮测试前,应用程序开发人员或测试人员可以在测试数据库中创建数据库快照。 每次运行测试之后,数据库都可以通过恢复数据库快照快速返回到它以前的状态。
术语和定义
数据库快照
一个数据库(源数据库)的事务一致的只读静态视图。
源数据库
对于数据库快照,指的是在其上创建快照的数据库。 数据库快照与源数据库相关。 数据库快照必须与数据库在同一服务器实例上。 此外,如果数据库因某种原因而不可用,则它的所有数据库快照也将不可用。
稀疏文件
NTFS 文件系统提供的文件,需要的磁盘空间要比其他文件格式少很多。 稀疏文件用于存储复制到数据库快照的页面。 首次创建稀疏文件时,稀疏文件占用的磁盘空间非常少。 随着数据写入数据库快照,NTFS 会将磁盘空间逐渐分配给相应的稀疏文件。
数据库快照的先决条件
可以使用任何恢复模式的源数据库必须满足以下先决条件:
服务器实例必须在支持数据库快照的 SQL Server 版本上运行。 有关详细信息,请参阅 SQL Server 2016 各个版本支持的功能。
源数据库必须处于联机状态,除非该数据库是数据库镜像会话中的镜像数据库。
您可在可用性组中的任何主数据库或辅助数据库上创建数据库快照。 副本角色必须是 PRIMARY 或 SECONDARY,且不处于 RESOLVING 状态。
当您创建一个数据库快照时,我们建议数据库同步状态是 SYNCHRONIZING 或 SYNCHRONIZED。 但是,当数据库同步状态为 NOT SYNCHRONIZING 时,可以创建数据库快照。
有关详细信息,请参阅 含有 AlwaysOn 可用性组的数据库快照 (SQL Server)。
若要在镜像数据库中创建数据库快照,数据库必须处于 SYNCHRONIZED 镜像状态。
不能将源数据库配置为可缩放共享数据库。
在 SQL Server 2019 之前,源数据库不得包含 MEMORY_OPTIMIZED_DATA 文件组。 SQL Server 2019 中添加了对内存数据库快照的支持。
所有恢复模式都支持数据库快照。
源数据库的限制
只要存在数据库快照,快照的源数据库就存在以下限制:
- 不能对数据库进行删除、分离或还原。
- 可以备份源数据库,这方面将不受数据库快照的影响。
- 源数据库的性能受到影响。由于每次更新页时都会对快照执行“写入时复制”操作,导致源数据库上的 I/O 增加。
- 不能从源数据库或任何快照中删除文件。
数据库快照的限制
数据库快照存在以下限制:
数据库快照必须与源数据库在相同的服务器实例上创建和保留。
始终对整个数据库制作数据库快照。
数据库快照依赖于源数据库,但不是冗余存储。 它们无法防止磁盘错误或其他类型的损坏。 因此,使用数据库快照恢复数据库不能代替备份和还原策略。 严格按计划执行备份仍然至关重要。 如果必须将源数据库还原到创建数据库快照的时间点,请实施允许您执行该操作的备份策略。
当将源数据库中更新的页强制压入快照时,如果快照用尽磁盘空间或者遇到其他错误,则该快照将成为可疑快照并且必须将其删除。
快照为只读。 由于它们为只读,所以无法升级。 因此,可以知道数据库快照在升级后会不可用。
禁止对
model
、master
和tempdb
数据库创建快照。本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信dbaup66,谢谢!