热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

SQLSERVER数据库快照的工作方式-mysql教程

SQLSERVER数据库快照的工作方式翻译自:HowDatabaseSnapshotsWork最近有一个帖子《errorlog中的异常信息rolledforward和rolledback》里面说到:每周六凌晨1点会出现以下信息,服务器及数据库未出现重启,节点未切换,filestreamaccesslevel0,

SQLSERVER数据库快照的工作方式 翻译自:How Database Snapshots Work 最近有一个帖子《errorlog中的异常信息rolled forward 和rolled back》 里面说到: 每周六凌晨1点会出现以下信息,服务器及数据库未出现重启,节点未切换,filestream access level =0,

SQLSERVER数据库快照的工作方式

翻译自:How Database Snapshots Work

最近有一个帖子《errorlog中的异常信息rolled forward 和rolled back》

里面说到:

每周六凌晨1点会出现以下信息,服务器及数据库未出现重启,节点未切换,filestream access level =0,请各位高手帮忙解释,是什么原因导致的。

Configuration option 'user options' changed from 0 to 0. Run the RECONFIGURE statement to install.

FILESTREAM: effective level = 0, configured level = 0, file system access share name = 'MSSQLSERVER'.

148 transactions rolled forward in database 'XX_DB' (12). This is an informational message only. No user action is required.

1 transactions rolled back in database 'XX_DB' (12). This is an informational message only. No user action is required.

Recovery completed for database XX_DB (database ID 12) in 21 second(s) (analysis 22 ms, redo 15062 ms, undo 3293 ms.) This is an informational message only. No user action is required.

为什麽会有rolled back和rolled forward?

回复者给出了下面答案:

是DBCC CHECKDB造成的,由于DBCC CHECKDB在执行时要先创建一个数据库快照,所以才会有这些提示。

这些提示并不是针对当前数据库,而是针对快照库,所以当前数据库不会有rolled forward和 rolled back。

如果还有伴有其它error信息,才可能是真的遇到问题了。

参考:

但是回复者还没有回复一个问题:

Configuration option 'user options' changed from 0 to 0. Run the RECONFIGURE statement to install.

FILESTREAM: effective level = 0, configured level = 0, file system access share name = 'MSSQLSERVER'.

为什麽会出现FILESTREAM??LZ说他们的系统没有使用到FILESTREAM的相关功能

今晚又看了一篇文章《》

里面说到:

正常情况下,CHECKDB/CHECKTABLE的运行不会对数据库使用排它锁,而是使用内部数据库快照(internal database snapshot)。

这个内部数据库快照实质就是Sparse Filestream, 它使用sparse file,COPY-ON-WRITE技术。详细的工作原理可以参考如下的文档:

数据库快照的工作方式
(v=SQL.105).aspx

我决定翻译一下这篇文章,看文章里是否有说到FILESTREAM

正文

数据库快照提供了一个在源数据库创建快照的时候只读的静态视图,这个静态视图会把还没有提交的事务去除掉

没有提交的事务会在新创建的数据库快照里被回滚,因为数据库引擎会在数据库快照创建完之后运行修复检查程序

但是,源数据库中的事务不会受到任何影响

数据库快照是独立于源数据库的。快照数据库会作为一个数据库存在于同一数据库服务器实例中

此外,无论什么原因,当数据库变为不可用的状态的时候,快照数据库也一样变为不可用

快照数据库不单只可以用来做报表之用,当在源数据库发生一个用户错误的时候,你可以修复源数据库到数据库快照被创建的那个时刻

自从数据库快照被创建之后,数据丢失仅仅限于快照创建之后的那些数据库数据更新的丢失

而且,创建数据库快照对于在一个大的数据库更新操作之前特别有用,例如改变数据库的架构或者表结构

对于更多数据库快照的用途,大家可以看一下数据库快照的典型应用

理解数据库快照的工作方式是很有帮助的,虽然不一定要使用数据库快照。数据库快照操作的级别是“页面级别”

在源数据库的一个页面被第一次修改之前,源数据页面会从源数据库复制到数据库快照。这个过程叫做:“COPY-ON-WRITE”操作

数据库快照存储了源数据页面,保留当快照被创建时已经存在的数据记录。后来的数据页面修改不会影响到快照里的页面内容。

对于每一个第一次被修改的页面会重复上面的COPY-ON-WRITE操作。用这种方法,快照会保存保留了所有已经被修改的数据记录的原始页面

当快照被创建的时候。

为了存储这些复制的原始页面,快照使用一个或者多个稀疏文件。最初,一个稀疏文件实际上是一个没有用户数据和还没有分配磁盘空间的空白的文件

当源数据库里越来越多的数据页面被更新,数据文件的size会增长。当快照建立之后,稀疏文件只会占用一点磁盘空间,当源数据库不断更新,

一个稀疏文件会增长成为一个大文件

想知道稀疏文件的更多信息,可以参阅:Understanding Sparse File Sizes in Database Snapshots

下面的图片描述了一个"copy-on-write"操作。在下面的快照图里灰白色的方块表示一个稀疏文件里还没有被分配的空间

当接收到第一个源数据库的第一个数据页面更新,数据库引擎会将页面写入到稀疏文件,并且操作系统会在快照的稀疏文件里分配

空间然后复制原始数据页。然后数据库引擎会更新源数据库的数据页面。

注意:因为数据库快照不是数据库存储冗余,快照不会防止磁盘错误或者其他类型的数据库损坏。如果你必须还原源数据库到某一个

时间点,这个时间点是数据库快照创建的时刻,那么你就要执行一个备份策略,从数据库备份中还原,而不是从数据库快照中还原

数据库快照的读操作

对于用户来讲,数据库快照从来不会发生改变,因为在数据库快照上的读操作总是访问原始数据页面无论这些数据页面来自哪里

如果在源数据库的数据页面从来没有被更新过,快照上的读操作会读取源数据库的源数据页面。下面的图片显示了一个在刚刚新建的快照上

的读操作,对应的稀疏文件并没有包含任何数据页面。这个读操作只会读取源数据库的数据

当有一个数据页面被更新之后,快照上的读操作就会访问存储在稀疏文件里原始数据页面,下面的图片描述了一个快照上的读操作

访问一个在源数据库被更新了的数据页面。读操作读取快照稀疏文件里的原始页面。

数据库快照增长对于更新模式的影响

如果你的源数据库相当大并且你正在关注磁盘空间的使用率,在某一时刻你应该用新的数据库快照替换旧的快照。

理想的数据库快照生存期依据于快照的增长速率和磁盘的可用空间。所需的磁盘空间取决于快照期间源数据库有多少的数据页面被更新了

因此,如果大部分的更新只是一小部分页面的重复更新,快照增长速率会比较慢,快照所需空间也会保持相对比较小的空间

相反,当所有原始页面至少最终被更新,快照会增长到与源数据库大小一样。如果磁盘开始填满,快照和磁盘会进行相互竞争对于磁盘空间

如果磁盘已经没有空间,对于快照的写操作会失败

记录:关于实际和潜在的快照大小的更多信息可以参阅:Understanding Sparse File Sizes in Database Snapshots

因此,当计划要多少磁盘空间在快照期间知道典型的数据库更新模式是很有用的。对于某些数据库,更新的频率是固定的,

例如:一个库存数据库有可能有很多每日都需要更新的页面,每日或每个星期替换旧的数据库快照是很有用的。对于其他数据库,

页面更新的比例有可能有很大的不同在业务运作期间;例如,一个目录数据库有可能只在季度更新,在其他时间只会偶尔更新

在季度的交替前和后创建数据库快照是一种业务策略。季度交替前的数据库快照允许修复重要的更新错误

而季度交替后的快照能够被用来做报表写入一直到下一个季度

下面的图片描述了两种更新模式的数据库快照的size的影响。

更新模式A影响只有30%原始页面被更新的快照环境

更新模式B影响80%原始页面被更新的快照环境

数据库快照的元数据

对于数据库快照,数据库元数据包括源数据库ID属性,ID属性存储在sys.databases目录视图里的某一列里

更多关于ID属性的信息,,可以查看sys.databases (Transact-SQL).

通常,一个数据库快照不会显示元数据信息(就是说你查不到快照数据库里面的一些元数据),不过你可以从源数据库那里查询这些元数据。

这些元数据包括,下面的SQL语句返回的数据

database_snapshotsys.database_files

推荐阅读
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 本文介绍了如何在具备多个IP地址的FTP服务器环境中,通过动态地址端口复用和地址转换技术优化网络配置。重点讨论了2Mb/s DDN专线连接、Cisco 2611路由器及内部网络地址规划。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 创建第一个 MUI 移动应用项目
    本文将详细介绍如何使用 HBuilder 创建并运行一个基于 MUI 框架的移动应用项目。我们将逐步引导您完成项目的搭建、代码编写以及真机调试,帮助您快速入门移动应用开发。 ... [详细]
  • 梦幻西游挖图奇遇:70级项链意外触发晶清诀,3000W轻松到手
    在梦幻西游中,挖图是一项备受欢迎的活动,无论是小宝图还是高级藏宝图,都吸引了大量玩家参与。通常情况下,小宝图的数量保证了稳定的收益,但特技装备的出现往往能带来意想不到的惊喜。本文讲述了一位玩家通过挖图获得70级晶清项链的故事,最终实现了3000W的游戏币逆袭。 ... [详细]
  • 本文探讨了 RESTful API 和传统接口之间的关键差异,解释了为什么 RESTful API 在设计和实现上具有独特的优势。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • 网络攻防实战:从HTTP到HTTPS的演变
    本文通过一系列日记记录了从发现漏洞到逐步加强安全措施的过程,探讨了如何应对网络攻击并最终实现全面的安全防护。 ... [详细]
  • MQTT技术周报:硬件连接与协议解析
    本周开发笔记重点介绍了在新项目中使用MQTT协议进行硬件连接的技术细节,涵盖其特性、原理及实现步骤。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
author-avatar
猫儿爱妞_591
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有