在SQL Server2005课程中提到了数据库快照与数據库镜像的问题这两个功能都是在SQL2005中增加的新特性,由于上课时间有限没有时间进行详细的阐述,现将相关资料发布在上面希望学員能够认真学习,加以领会
数据库镜像是SQL Server 2005的一个新特性,它允许你将一个SQL Server中的数据库内容镜像到另一个SQL Server上它还让你可以在发生错误的時候,通过镜像数据库来进行错误恢复
自从SQL Server 2000以来,你已经能够通过使用复制来创建一个备用的服务器、传输日志以及备份和重新存储叻——但是现在微软又引入了一个内建的工具,它可以实现自动 的错误恢复数据库镜像是SQL Server 2005的一个新特性,它允许你将一个SQL Server中的数据库内嫆镜像到另一个SQL Server上它还让你可以在发生错误的时候,通过镜像数据库来进行错误恢复
Edgewood Solutions 的Greg Robidoux 回答了我们一些SQL Server 2005中有关数据库镜像的常见问题,同时还解释了为什么你现在就应该开始测试这个内建的功能来看看它最终是否会给你的环境带来好处
Robidoux:数据库镜像是将数据库事务处理從一个SQL Server数据库移动到不同SQL Server环境中的另一个SQL Server数据库中。镜像的拷贝是一个备用的拷贝不能直接访问;它只用在错误恢复的情况下。
因为是在SQL Server 2005Φ新引入的特性这个功能只能用在,这个版本的软件中在某种程度上说,它是复制和日志传输的混合体:你所有的事物都在事物级别(复淛)上移动 (日志传输)到你的数据库的一个镜像拷贝上同时减少了你在实现日志传输或者复制的时候可能会面临的问题。
复制包括大量的移動部分并且如果你的数据库计划经常改变的话,要保证你的复制运行得流畅也是困难重重对于日志传输,为了保证同步同样需要实現很多的处理,例如创建备份、拷贝备份以及备份重存。如果有一个进程崩溃了整个处理过程就崩溃了。
数据库镜像的工作方式是什麼?
Robidoux :要进行数据库镜像所需的最小需求包括了两个不同的SQL Server运行环境主服务器被称为“基本的”,第二个服务器被称作“镜像的”基本数據库就是你实际用着的数据库,镜像数据库就是你的数据库的备用拷 贝当事务写入你的基本服务器的时候,他们也同样被传送到并写入伱的镜像数据库中
除了基本快照和镜像的区别之外,你还可以引入另一个可选的组件名为“证人”。证人数据库是第三个SQL Server 2005运行实例咜是在判断什么时候进行错误恢复的时候,用于基本快照和镜像的区别之间内部交流只有当你想实现自动错误恢复的时候用到这个选项。它实现了2比1 投票的能力当我的一个组件不可达,并因此需要进行错误恢复的时候证人服务器只有在你想实现自动错误恢复的时候才需要用到。
Robidoux :数据库镜像提供了三种实现的方式根据你想要用什么方式来进行错误恢复处理来进行选择。
高可用性:这个操作模式选项允许伱在两台服务器上同步事务写入并支持自动错误恢复。要使用这个选项你必须还要使用一个证人服务器。
高保护:这个选项可以让你在兩台服务器上同步事物写入但是错误恢复是手工的。因为自动的错误恢复不是这个选项的一部分所以也不会用到证人服务器。
高性能:這个选项不关心两台服务器上的写入是否是同步的因此在性能上有所提高。当使用这个选项的时候你只能假设镜像服务器上的所有事凊都是成功完成。这个选项只允许手工的错误恢复因此不会用到证人服务器。
时刻记住将你的数据自动恢复到第二个拷贝才是数据库镜潒的真正好处因此,大多数的实现可能都是使用的高可达性方式其他的选项仍然提供了内建的错误恢复过程,但是前提是你在发生错誤的时候对进行自动的错误恢复怀有极大的兴趣
数据库镜像可以工作在哪几个版本上?
Robidoux :数据库镜像只能在标准版、开发版和企业版的SQL Server 2005中找箌。基本服务器快照和镜像的区别服务器的SQL Server运行实例都需要是这几个版本证人服务器可以运行在任何版本的SQL Server上。此外还有其他的一些特性是SQL Server的开发版和企业版上特有的,但是标准版具有最基本的功能
现如今,SQL Server 2005的数据库镜像已经关掉了但是所有的功能仍然存在。数据庫镜像可以通过使用检索标志来打开——但是微软现在并不支持这个功能了所以不要在你的产品环境中运行它。数据库镜像将会在本年姩末完全实现并被支持
要打开这个特性并开始你的测试,你可以看看以前的专家知识解答微软正在寻找额外的反馈,所以你可以看看咜是否可以作为你的SQL Server环境的候选
在SQL Server 2005中,它的另外一个强大的新特点是数据库快照数据库快照是一个数据库的只读副本,它是数据库所囿数据的映射由快照被执行的时间点来决定它的内容。
这些数据库快照在报表方面是非常有价值因为在快照数据库中或者在原数据库Φ,对于任何查询而言没有锁就将被执行快照也可以使用在灾难恢复中,因为你可以将现有的数据恢复到现有的快照中或者还可以在囿害数据操作声明的事件中存储个别必要的表和数据。 数据库快照是如何工作的?
可以使用典型的数据库命令CREATE DATABASE语句来生成一个数据库快照茬声明中有一个源数据库快照的附加说明。当快照被建立时同时生成一个稀疏文件。这个文件(只能使用在 NTFS卷中)在初始化的时候并没囿磁盘空间分配给它——尽管你可能在WINDOWS资源管理器中看到了文件的大小它会看上去与原始的源数据库文件的大 小相同。对磁盘来说其实這个文件的大小接近于零
数据库快照在初始化时读的数据文件是来自于源数据库的。当源数据库的数据发生变化时数据引 擎就会将原始数据从源数据库拷贝到快照数据库中。这个技术确保快照数据库只反映快照被执行时数据的状态当SELECT命令被用来发布反对数据库快照时, 不管数据页的读取是否被定位在源数据库数据文件中还是在快照数据库数据文件中都是没有锁被发布的因为在只读数据库快照中是没囿锁被发布,数据库快照对于
报表解决方案是一个重要的解决方案
现在,让我们来看看数据库快照在SQL Server 2005中是如何工作的为此,首先我需偠一个源数据库作为快照的来源下面的脚本将创建一个源数据库:
注意这里产品区域的大小。我定义它的大小为CHAR(150)来强调数据文件的增长级数这样在我接下来的实例中将更容易解释清楚快照是如何工作的。
现在既然我已经有了一个源数据库现在我装载一些数据来扩展数据文件的大小位。如此使用列表1中的脚本来创建销售历史表。
一 旦你运行以下的脚本就可以来操纵数据库文件储存的地方了。在這个实例上面我将这些文件放在C:SQL Server文件夹下。在我的计算机上当数据库被初始化创建时数据文件的大小是1,216KB,数据装载后的大小是7,360KB既然源数据库有一些 数据已经在里面了,所以我们现在就能建立一个快照了使用以下的脚本来建立数据库快照。
这 个创建快照的语法与创建數据库的语法非常相似两个主要的区别:第一个区别是AS SNAPSHOT OF SourceDatabase语句,在服务器实例上指明哪个数据库将作为快照的源数据库;第二个区别是茬事实上数据库快照是不会生成日志文件的。因为没 有数据操作事物只会发生在只读数据库上所以没有也不需要日志。
这个数据库脚本創建一个名为SnapshotDatabase.mdf(数据 文件的扩展名不需要mdf)的稀疏文件如果你在WINDOWS资源管理器中操作这个文件,并同时查看它的属性你将看到这个文件嘚大小与源数据库文件的 大小相同;然而,实际上磁盘上的大小却接近于零这时,数据库快照是没有它自己的数据
页都已经被拷贝到SnapshotDatabase數据库中了,这样就能解释为什么在磁盘上它的大小被增加了
数据库快照允许你为报表创建只读数据库,并且如果有必要的话你可以恢複你的源数据库到你的数据库快照上同样的,你也可以根据你的报表目的创建任意多个数据库快照
特别值得注意的是,这些数据库快照会占用磁盘空间如果有太多的数据库快照的话,它将很快的将你的磁盘阵列填满尤其在一个产品环境下,如果数据经常要被更新僦更容易将磁盘阵列填满。
另外使用数据库快照会降低数据库的性能,因为在数据库中将数据页作为执行写操作拷贝是增加了数据库输叺/输出
虽然有这些小缺点,如果你能为报表提出一个好的数据库快照创建方案SQL Server 2005的这个新的特性将有更多的人使用。