sql2005 数据库快照是什么?

sql2005 数据库快照是什么?,第1张

数据库快照是MSSQL2005的新功能,仅在 Microsoft SQL Server 2005 Enterprise Edition 中可用。而且SQL Server Management Studio 不支持创建数据库快照,创建快照的唯一方式是使用 Transact-SQL。

数据库快照是数据库(称为“源数据库”)的只读静态视图。在创建时,每个数据库快照在事务上都与源数据库一致。在创建数据库快照时,源数据库通常会有打开的事务。在快照可以使用之前,打开的事务会回滚以使数据库快照在事务上取得一致。

客户端可以查询数据库快照,这对于基于创建快照时的数据编写报表是很有用的。而且,如果以后源数据库损坏了,便可以将源数据库恢复到它在创建快照时的状态。

创建数据库快照可以:

·<!--[if !supportLists]--><!--[endif]-->维护历史数据以生成报表。可以通过快照访问特定时间点的数据。例如,您可以在给定时间段(例如,财务季度)要结束的时候创建数据库快照以便日后制作报表。然后便可以在快照上运行期间要结束时创建的报表。

·<!--[if !supportLists]-->将查询实施在数据库的快照上,可以释放主体数据库上的资源。

·<!--[if !supportLists]-->加快恢复 *** 作效率,使用快照将数据库恢复到生成快照时的状态比从备份还原快得多;但是,此后您无法对数据进行前滚 *** 作。根据磁盘资源,可以每 24 小时创建 6 到 12 个滚动快照。每创建一个新的快照,就删除最早的快照。如果要恢复,可以将数据库恢复到在错误发生的前一时刻的快照。或者,也可以利用快照中的信息,手动重新创建删除的表或其他丢失的数据。例如,可以将快照中的数据大容量复制到数据库中,然后手动将数据合并回数据库中。

但是只要存在数据库快照,快照的源数据库就存在以下限制:

·<!--[if !supportLists]-->必须在与源数据库相同的服务器实例上创建数据库快照。

·<!--[if !supportLists]--><!--[endif]-->数据库快照捕获开始创建快照的时间点,去掉所有未提交的事务。未提交的事务将在创建数据库快照期间回滚,因为数据库引擎 将对快照执行恢复 *** 作(数据库中的事务不受影响)。

·<!--[if !supportLists]-->当将源数据库中更新的页强制压入快照时,如果快照用尽磁盘空间或者遇到某些错误,则该快照将成为可疑快照并且必须将其删除。有关详细信息,请参阅删除数据库快照。

·<!--[if !supportLists]-->快照为只读。

·<!--[if !supportLists]--><!--[endif]-->禁止对 model 数据库、master 数据库和 tempdb 数据库创建快照。

·<!--[if !supportLists]--><!--[endif]-->不能更改数据库快照文件的任何规范。

·<!--[if !supportLists]--><!--[endif]-->不能从快照中删除文件。

·<!--[if !supportLists]-->不能备份或还原快照。

·<!--[if !supportLists]-->不能附加或分离快照。

·<!--[if !supportLists]-->不能在 FAT32 文件系统或 RAW 分区中创建快照。

·<!--[if !supportLists]--><!--[endif]-->数据库快照不支持全文索引,不能从源数据库传播全文目录。

·<!--[if !supportLists]-->数据库快照将继承快照创建时其源数据库的安全约束。由于快照是只读的,因此无法更改继承的权限,对源数据库的更改权限将不反映在现有快照中。

·<!--[if !supportLists]-->快照始终反映创建该快照时的文件组状态:在线文件组将保持在线状态,离线文件组将保持离线状态。有关详细信息,请参阅本主题后面的“含有离线文件组的数据库快照”。

·<!--[if !supportLists]-->如果源数据库的状态为 RECOVERY_PENDING,可能无法访问其数据库快照。但是,当解决了源数据库的问题之后,快照将再次变成可用快照。

·<!--[if !supportLists]-->只读文件组和压缩文件组不支持恢复。尝试恢复到这两类文件组将失败。有关恢复的详细信息,请参阅恢复到数据库快照。

SQLServer数据库的快照只能通过SQL语句创建,以msdb数据库为例进行说明:

1、执行以下代码,看看MSDB数据库有多少数据文件

EXEC SP_HELPDB msdb

2、为每一个数据文件创建快照,代码如下:

create database snap_MSDBData_1811221202

ON ( NAME = MSDBData, FILENAME= 'D:\userdata\temp\Snap_MSDBData.snap')

AS SNAPSHOT OF MSDB

3、在“数据库快照”那里就可以看到刚刚创建snap_MSDBData_1811221202这个快照了,对比一下快照和原库,内容是一样的

4、数据库快照其实也是一个数据库,可以在上面执行任何SQL语句,我们执行一个查询语句看看效果

SELECT *  FROM [MSDB].[dbo].[MSdbms]

SELECT *  FROM [snap_MSDBData_1811221202].[dbo].[MSdbms]

查询结果是完全一样的。

(如有帮助,请采纳,谢谢)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10803009.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-11
下一篇 2023-05-11

发表评论

登录后才能评论

评论列表(0条)

保存