掌握SQL Server数据库快照的工作原理第1/2页

数据库快照是怎样工作的?

可以使用典型的数据库命令CREATE DATABASE语句来生成一个数据库快照,在声明中有一个源数据库快照的附加说明。当快照被建立时,同时生成一个稀疏文件。这个文件(只能使用在NTFS卷中)在初始化的时候并没有磁盘空间分配给它——尽管你可能在WINDOWS资源管理器中看到了文件的大小,它会看上去与原始的源数据库文件的大小相同。对磁盘来说其实这个文件的大小接近于零。

数据库快照在初始化时读的数据文件是来自于源数据库的。当源数据库的数据发生变化时,数据引擎就会将原始数据从源数据库拷贝到快照数据库中。这个技术确保快照数据库只反映快照被执行时数据的状态。当SELECT命令被用来发布反对数据库快照时,不管数据页的读取是否被定位在源数据库数据文件中还是在快照数据库数据文件中都是没有锁被发布的。因为在只读数据库快照中是没有锁被发布,数据库快照对于报表解决方案是一个重要的解决方案。

一个快照的实例

现在,让我们来看看数据库快照在SQL Server 2005中是如何工作的。为此,首先我需要一个源数据库作为快照的来源。下面的脚本将创建一个源数据库:

USE master 
GO 
IF EXISTS(SELECT name from 
sysdatabases where [name] = 'SourceDatabase') 
DROP DATABASE SourceDatabase 
GO 
CREATE DATABASE SourceDatabaseON PRIMARY 

NAME = SourceDatabase_Data, 
FILENAME = 'C:SQLServerSourceDatabase_Data.mdf' 
) LOG ON 

NAME = SourceDatabase_Log, 
FILENAME = 'C:SQLServerSourceDatabase_Log.ldf' 

GO

注意这里产品区域的大小。我定义它的大小为CHAR(150)来强调数据文件的增长级数,这样在我接下来的实例中将更容易解释清楚快照是如何工作的。

现在既然我已经有了一个源数据库,现在我装载一些数据来扩展数据文件的大小位。如此,使用上面的脚本来创建销售历史表。

USE SourceDatabase 
  GO 
  IF OBJECT_ID('SalesHistory')>0 DROP 
TABLE SalesHistory 
  GO 
  CREATE TABLE SalesHistory 
  (SaleID INT IDENTITY(1,1), 
  Product CHAR(150), SaleDate DATETIME, 
  SalePrice MONEY) 
  DECLARE @i INT 
  SET @i = 1 
  WHILE (@i <=10000) 
  BEGIN INSERT INTO SalesHistory 
  (Product, SaleDate, SalePrice) 
  VALUES ('Computer', DATEADD(mm, @i, '3/11/1919'), 
  DATEPART(ms, GETDATE()) + (@i + 57) ) 
  INSERT INTO SalesHistory 
  (Product, SaleDate, SalePrice) 
  VALUES ('BigScreen', DATEADD(mm, @i, '3/11/1927'), 
  DATEPART(ms, GETDATE()) + (@i + 13) ) 
  INSERT INTO SalesHistory 
  (Product, SaleDate, SalePrice) 
  VALUES ('PoolTable', DATEADD(mm, @i, '3/11/1908'), 
  DATEPART(ms, GETDATE()) + (@i + 29) ) 
  SET @i = @i + 1 
  END 
  GO

当前1/2页 12下一页阅读全文

(0)

相关推荐

  • 掌握SQL Server数据库快照的工作原理第1/2页

    数据库快照是怎样工作的? 可以使用典型的数据库命令CREATE DATABASE语句来生成一个数据库快照,在声明中有一个源数据库快照的附加说明.当快照被建立时,同时生成一个稀疏文件.这个文件(只能使用在NTFS卷中)在初始化的时候并没有磁盘空间分配给它--尽管你可能在WINDOWS资源管理器中看到了文件的大小,它会看上去与原始的源数据库文件的大小相同.对磁盘来说其实这个文件的大小接近于零. 数据库快照在初始化时读的数据文件是来自于源数据库的.当源数据库的数据发生变化时,数据引擎就会将原始数据从源

  • SQL Server数据库入门学习总结

    一图胜"十"言:SQL Server 数据库总结 一个大概的总结 经过一段时间的学习,也对数据库有了一些认识. 数据库基本是由表,关系,操作组成:对于初学者首先要学的: 1.数据库是如何存储数据的 表,约束,触发器 2.数据库是如何操作数据的 insert,update,delete T-sql 函数 存储过程 触发器 3.数据库是如何显示数据的 select SQLServer数据库学习总结 1.SQL基础 SQL Server2000安装.配置,服务器启动.停止,企业管理器.查询分

  • 基于Python的SQL Server数据库实现对象同步轻量级

    缘由 日常工作中经常遇到类似的问题:把某个服务器上的某些指定的表同步到另外一台服务器. 类似需求用SSIS或者其他ETL工作很容易实现,比如用SSIS的话,就会会存在相当一部分反复的手工操作. 建源的数据库信息,目标的数据库信息,如果是多个表,需要一个一个地拉source和target,然后一个一个地mapping,然后运行实现数据同步. 然后很可能,这个workflow使用也就这么一次,就寿终正寝了,却一样要浪费时间去做这个ETL. 快速数据同步实现 于是在想,可不可能快速实现类似需求,尽最大

  • SQL Server数据库中伪列及伪列的含义详解

    SQL Server中的伪列 下午看QQ群有人在讨论(非聚集)索引的存储,说,对于聚集索引表,非聚集索引存储的是索引键值+聚集索引键值:对于非聚集索引表,索引存储的是索引键值+RowId,这应该是一个常识,对此不作具体详细阐述. 这里主要是提到的RowId引起了一点思考. 那么,这个RowId是个什么玩意?能不能更加直观一点来看看RowId的信息?代表什么含义?这个当然也是可以的. Oracle中的表中有一个伪列的概念,就是在查询表的时候加上select rowid,* from Table,会

  • SQL Server 数据库分离与附加(图文教程)

    一.概述 SQL Server提供了"分离/附加"数据库."备份/还原"数据库.复制数据库等多种数据库的备份和恢复方法.这里介绍一种学习中常用的"分离/附加"方法,类似于大家熟悉的"文件拷贝"方法,即把数据库文件(.MDF)和对应的日志文件(.LDF)拷贝到其它磁盘上作备份,然后把这两个文件再拷贝到任何需要这个数据库的系统之中.比如,在实验教学过程中,同学们常常想把自己在学校实验室计算机中创建的数据库搬迁到自己的计算机中而不想

  • SQL Server数据库性能优化技术第1/2页

    设计1个应用系统似乎并不难,但是要想使系统达到最优化的性能并不是一件容易的事.在开发工具.数据库设计.应  用程序的结构.查询设计.接口选择等方面有多种选择,这取决于特定的应用需求以及开发队伍的技能.本文以SQL  Server为例,从后台数据库的角度讨论应用程序性能优化技巧,并且给出了一些有益的建议. 1 数据库设计  要在良好的SQL Server方案中实现最优的性能,最关键的是要有1个很好的数据库设计方案.在实际工作中,许多SQL  Server方案往往是由于数据库设计得不好导致性能很差.

  • Sql Server数据库各版本功能对比

    背景 今天举办的 Data Amp 大会上,微软向开发者们强调了 数据如何影响他们的应用和服务 ,顺道还宣布了几个小新闻.这个免费的线上研讨会不仅展示了未来的机器学习远景,还发布了 SQL Server 2017.推出了 面部认知服务 API 和 Azure 分析服务.显然,SQL Server 2017 将成为开发者们押注机器学习功能的下一个关键.其包含了对 Python(Python/R)的支持,且有能力承担数据密集型计算.微软开始向机器学习发力了. 数据库排名 从DB-Engines 发布

  • SQL Server数据库中批量导入数据的四种方法总结

    在软件项目实施的时候,数据导入一直是项目人员比较头疼的问题.其实,在SQL Server中集成了很多成批导入数据的方法.有些项目实施顾问头疼的问题,在我们数据库管理员眼中,是小菜一碟.现在的重点就是,如何让用户了解这些方法,让数据导入变得轻松一些. 第一:使用Select Into语句 若企业数据库都采用的是SQL Server数据库的话,则可以利用Select Into语句来实现数据的导入.Select Into语句,他的作用就是把数据从另外一个数据库中查询出来,然后加入到某个用户指定的表中.

  • SQL Server数据库的高性能优化经验总结

    本文主要向大家介绍的是正确优化SQL Server数据库的经验总结,其中包括在对其进行优化的实际操作中值得大家注意的地方描述,以及对SQL语句进行优化的最基本原则,以下就是文章的主要内容描述. 优化数据库的注意事项: 1.关键字段建立索引. 2.使用存储过程,它使SQL变得更加灵活和高效. 3.备份数据库和清除垃圾数据. 4.SQL语句语法的优化.(可以用Sybase的SQL Expert,可惜我没找到unexpired的序列号) 5.清理删除日志. SQL语句优化的基本原则: 1.使用索引来更

  • SQL Server数据库定时自动备份

    SQL Server 数据库定时自动备份,供大家参考,具体内容如下 在SQL Server中出于数据安全的考虑,所以需要定期的备份数据库.而备份数据库一般又是在凌晨时间基本没有数据库操作的时候进行,所以我们不可能要求管理员每天守到晚上1点去备份数据库.要实现数据库的定时自动备份,最常用的方式就是使用SQL Server代理中的作业.启动SQL Server Agent服务,然后在其中新建作业,作业中添加1个备份步骤,类型是T-SQL脚本,然后在命令中输入如下SQL语句,该语句实现了对数据库Tes

随机推荐