`

浅谈SQL Server中的快照

 
阅读更多

简介

    数据库快照,正如其名称所示那样,是数据库在某一时间点的视图。是SQL Server在2005之后的版本引入的特性。快照的应用场景比较多,但快照设计最开始的目的是为了报表服务。比如我需要出2011的资产负债表,这需要数据保持在2011年12月31日零点时的状态,则利用快照可以实现这一点。快照还可以和镜像结合来达到读写分离的目的。下面我们来看什么是快照。

 

什么是快照

    数据库快照是 SQL Server 数据库(源数据库)的只读静态视图。换句话说,快照可以理解为一个只读的数据库。利用快照,可以提供如下好处:

  •     提供了一个静态的视图来为报表提供服务
  •     可以利用数据库快照来恢复数据库,相比备份恢复来说,这个速度会大大提高(在下面我会解释为什么)
  •     和数据库镜像结合使用,提供读写分离
  •     作为测试环境或数据变更前的备份,比如我要大批导入或删除数据前,或是将数据提供给测试人员进行测试前,做一个快照,如果出现问题,则可以利用快照恢复到快照建立时的状态

 

快照的原理

    与备份数据库复制整个数据库不同,快照并不复制整个数据库的页,而是仅仅复制在快照建立时间点之后改变的页。因此,当利用快照进行数据库恢复时,也仅仅将那些做出改变的页恢复到源数据库,这个速度无疑会大大高于备份和恢复方式。这个原理如图1所示(图摘自SQL Server 2008揭秘)。

    2

    图1.镜像的原理

 

    由图1可以看出,快照并不是复制整个整个数据库,而仅仅利用快照存储原始页。因此可以看出,源数据库上建立快照会给IO增加额外负担.当对快照数据库进行查询时,快照时间点之后更改的数据会查询数据文件,。这个概念如图2所示(图摘自SQL Server 2008揭秘)。

    3

    图2.查询快照数据库时查询的分布

 

写入时复制(Copy On Writing)和稀疏文件(Sparse Flie)

    由上图中可以看出,快照数据库的文件是基于稀疏文件(Sparse File),稀疏文件是NTFS文件系统的一项特性。所谓的稀疏文件,是指文件中出现大量0的数据,这些数据对我们用处并不大,却一样占用着磁盘空间。因此NTFS对此进行了优化,利用算法将这个文件进行压缩。因此当稀疏文件被创建时,稀疏文件刚开始大小会很小(甚至是空文件),比如图3所示的文件就是一个稀疏文件。虽然逻辑上占了21M,但文件实际上占了128KB磁盘空间。

    4

    图3.一个稀疏文件

 

    对于快照来说,除了通过快照数据库文件的属性来看快照的大小之外,也可以通过DMV来查看,如图4所示.

    5

    图4.通过DMV查看快照数据库大小

 

    而当快照创建后,随着对源数据库的改变逐渐增多,稀疏文件也会慢慢增长,概念如图4所示。

    1

    图5.随着源数据库的更改越来越多,稀疏文件不断增长

 

    所以,通常来说,当稀疏文件增长到源数据库文件大小的30%时,就应该考虑重建快照了。

    而稀疏文件的写入是利用了微软的写入时复制技术(Copy-On-Writing),意思是在复制一个对象时并不是真正把对象复制到另一个位置,而是在新的对象中映射一个指针,指向原对象的位置。这样当对新对象执行读操作时,直接指向原对象。而在对新的对象执行写操作时,将改变部分对象的指针指向到新的地址中。并修改映射表到新的位置中。

 

使用快照的限制

    使用快照存在诸多限制,由于列表太长(详细请参考MSDN:http://msdn.microsoft.com/zh-cn/library/ms175158.aspx#LimitationsRequirements),我只概括的说一下主要限制。

  •     当使用快照恢复数据库时,首先要删除其他快照
  •     快照在创建时的时间点上没有commit的数据不会被记入快照
  •     快照是快照整个数据库,而不是数据库的某一部分
  •     快照是只读的,意思是不能在快照上加任何更改,即使是你想加一个让报表跑得更快的索引
  •     在利用快照恢复数据库时,快照和源数据库都不可用
  •     快照和源数据必须在同一个实例上
  •     快照数据库的文件必须在NTFS格式的盘上
  •     当磁盘不能满足快照的增长时,快照数据库会被置为suspect状态
  •     快照上不能存在全文索引

    其实,虽然限制看上去很多,但只要明白快照的原理,自然能推测出快照应该有的限制。

 

快照的创建和使用

    无论是使用SSMS或是命令行,快照只能通过T-SQL语句创建。在创建数据库之前,首先要知道数据库分布在几个文件上,因为快照需要对每一个文件进行copy-on-writing。如图6所示。

    6

    图6.首先查出数据库的文件分布

 

    根据图6的数据库分布,我们通过T-SQL创建快照,如图7所示。

    7

    图7,根据图6的数据库信息创建一个数据库快照

 

     当快照数据库创建成功后,就可以像使用普通数据库一样使用快照数据库了,如图8所示。

    8

    图8.快照数据库和普通数据库一样使用

 

    通过如下语句可以看到,快照数据库文件和源数据库的文件貌似并无区别,仅仅是快照数据库文件是稀疏文件,如图9所示。

    9

    图9.源数据库和快照数据库

 

    而删除快照数据库和删除普通数据库并无二至,也仅仅是使用DROP语句,如图10所示。

    10

    图10.删除快照数据库

 

    我们也可以利用快照恢复数据库,这个恢复速度要比普通的备份-恢复来的快得多,这也可以将数据库呈现给测试人员,当测试结束后,恢复数据库到测试之前的状态。如图11所示。

    11

    图11.利用快照恢复数据库

 

使用快照其他一些需要考虑的因素

    1.快照数据库的安全设置继承源数据库的安全设置。也就是说能访问源数据库的用户或角色也能访问快照数据库,当然,因为快照数据库是只读的,所以无论任何角色或人都无法修改快照数据库。

    2.我们由文章前面图5看出,随着快照存在的时间越来越长,快照会不断增长。所以推荐在快照达到源数据库大小30%之前,重新创建快照。

    3.由于快照会拖累数据库性能,所以数据库不宜存在过多快照。

 

总结

    本文简单讲述了数据库快照的概念,原理以及使用。数据库快照可以在很多场景下使用,无论是用于报表,还是和镜像配合提供负载,以及利用快照恢复数据库,使用得当的话,快照将会是一把利器。

本文转载自:http://www.cnblogs.com/CareySon/archive/2012/03/30/2424880.html

分享到:
评论

相关推荐

    浅谈SQL Server数据库应用技巧.pdf

    SQL Server作为一款成熟的关系型数据库管理系统,被广泛应用于各种企业级应用中,它为企业信息管理提供了高效稳定的解决方案。随着信息技术的快速发展和企业信息化需求的不断增长,SQL Server数据库的性能优化越来越...

    利用SQL Server数据库快照形成报表

    在SQL Server中,创建数据库快照是通过`CREATE DATABASE`命令完成的,其中需要指定源数据库的信息。快照本身并不立即占用大量磁盘空间,因为它使用稀疏文件技术。初始创建时,快照文件虽然在Windows资源管理器中显示...

    浅谈SQL Server2005常见漏洞的屏蔽.pdf

    浅谈SQL Server2005常见漏洞的屏蔽.pdf

    浅谈对SQL Server数据库快照的认识.pdf

    在SQL Server中,创建数据库快照的命令是CREATE DATABASE,并且需要添加“AS SNAPSHOT OF”关键字后跟原数据库名来指明源数据库。 实例演示了如何创建一个源数据库和销售历史表,然后在此基础上创建一个数据库快照...

    深入浅出sql server数据库开发随书光盘

    1. **数据库设计**:在SQL Server中,设计数据库涉及创建表、定义字段类型、设置约束(如主键、外键)以及索引。理解范式理论(第一范式到第五范式)有助于创建高效、规范的数据库结构。 2. **T-SQL语言**:SQL ...

    浅谈SQL Server数据库的安全性.pdf

    浅谈SQL Server数据库的安全性.pdf

    浅谈SQL SERVER2008 JSP网站开发.pdf

    浅谈SQL SERVER2008 JSP网站开发.pdf

    分析SQL Server中数据库的快照工作原理

    在SQL Server中,数据库快照是一项非常有用的功能,它提供了数据库的一个只读、时间点一致性的副本。数据库快照的工作原理基于源数据库的数据文件,并在快照创建时并不实际复制所有数据,而是采用了一种称为“差异...

    浅谈SQL Server数据库访问.pdf

    "浅谈SQL Server数据库访问" 本文主要介绍了Microsoft SQL Server数据库的基本概念和访问方法,讨论了三种常用的数据库访问接口DAO、ODBC和ADO,并提供了一些示例程序来访问SQL Server数据库。此外,本文还介绍了...

    SQL Server快照例子

    SQL Server的快照例子,快照是SQL Server的一项新功能,经常和镜像结合起来一起使用

    浅谈SQL Server系统中SA弱口令的危害及解决方法.pdf

    浅谈SQL Server系统中SA弱口令的危害及解决方法 SQL Server系统中的SA弱口令是一种潜在的安全威胁,可能被黑客攻击。SA弱口令是指SQL Server系统默认管理员SA的口令过于简单,容易被黑客利用破解。SA账号具有数据库...

    浅谈SQL Server 2005数据库备份与恢复.pdf

    浅谈SQL Server 2005数据库备份与恢复 SQL Server 2005数据库备份与恢复是系统管理员维护数据库安全性和完整性的两个重要操作。本文对SQL Server 2005数据库备份与恢复过程中应注意的问题以及经常出现的问题进行了...

    40集SQL Server 基础入门视频教程 SQL Server 数据库基础入门必备课程

    1.SQL Server 2014简介.mp4 10.SQL Server 2014定义表主键、外键.mp4 11.SQL Server 2014新增表记录.mp4 12.SQL Server 2014查询表记录.mp4 13.SQL Server 2014修改表记录.mp4 14.SQL Server 2014删除表记录....

    SQL Server 中文帮助文档 chm格式

    8. **复制技术**:了解SQL Server的复制类型(快照复制、事务复制、合并复制),以及如何配置和管理复制。 9. **集成服务(SSIS)**:用于ETL(提取、转换、加载)的数据迁移工具,学习如何创建和运行数据流任务。 ...

    浅谈SQL Server 2000的安全策略.pdf

    王晓元和刘坚强所著的“浅谈SQL Server 2000的安全策略.pdf”一文,提供了关于在Web环境中验证用户、允许数据库访问、分配权限以及简化安全管理等几个方面的策略。 首先,文中提到了Web环境中的验证问题。这是因为...

    SQLServer2005及SQLServer2008快照同步配置说明汇编.pdf

    SQL Server 2005和SQL Server 2008中的快照同步是一种数据库复制技术,主要用于在不同的数据库实例间同步数据,确保数据的一致性和完整性。快照同步配置涉及多个步骤,包括安装SQL Server、配置服务、创建数据库、...

    sqlserver自动生成sql语句工具sqlserver转oracle

    例如,通过这样的工具,我们可以导出SQL Server中的表结构、索引、存储过程、触发器等对象的创建语句。 描述中提到的"sqlserver转oracle"则是指将SQL Server数据库的内容迁移到Oracle数据库的过程。这个过程涉及到...

    浅谈SQL Server 2000的安全认证.pdf

    3. 认证机制: 在SQL Server 2000中,认证机制指的是用来验证用户身份的方法。SQL Server 2000支持两种认证模式:Windows认证模式和混合模式。Windows认证模式依赖于Windows操作系统的身份验证机制,而混合模式则结合...

    SqlServer连接工具

    综上所述,SQL Server连接工具是SQL Server生态系统中不可或缺的一部分,它们为数据库管理员和开发者提供了强大的支持,使得SQL Server的管理和开发工作更加高效便捷。无论是在本地环境还是云端,选择合适的工具能够...

    sql server2019安装包

    SQL Server 2019是Microsoft推出的一款关系型数据库管理系统,是SQL Server系列中的一个重要版本。它提供了强大的数据存储、处理和分析能力,广泛应用于企业级数据库应用开发和数据分析。在本安装包中,主要包含的是...

Global site tag (gtag.js) - Google Analytics