天天看点

快照复制,SQL Server保障数据一致性的法宝

  通常情况下,快照复制有如下特点。

  一是从快照这个名词中,我们也可以看出,照片是一个静态的过程,即只反映数据库某个时刻的状态,而不会反映数据库的一个变化过程。快照复制知识对数据库某个设定的时间的数据进行复制,而不会对一段时间内的数据更改进行连续监视。这跟其另一个兄弟“事务复制”有本质的区别。若把快照复制比喻成完全备份的话,则事务复制就是一个差异备份。

  二是快照复制所需要的资源比较大。快照复制是对整个数据库进行复制,而不管其是否发生了变化。无疑,这复制的时间、传输的时间都会比较长,其耗费的服务器与网络资源也会比较多。所以,快照复制的成本是比较高的。但是,在某些特定的情况下,快照复制反而可以提高效率。如对于不经常更改当数据,或者不要求保持高同步性的数据的情况下,利用快照复制来协调多个数据库之间的数据一致性反而使比较合理的选择。

  快照复制虽然是一门比较先进的技术,但是,并不是在所有应用场景中,其都可以起到很好的效果。若使用不当,快照复制技术反而会拖数据库管理员的后腿。根据笔者的经验,一般在以下情况下,最好采用快照复制。

  一是当数据更改量大但是不经常发生时,可以采用快照复制。如笔者有一个客户,在全国各地都有服装门市店,各个店面的销售价格基本一致。由于经济危机的影响,在年底为了尽可能的收回现金,决定在12月24日到1月3日之间下调各个门市店的销售价格。由于他们的销售系统都是全国联网的。价格的下调需要总部的系统来完成。此时,就可以采用快照技术,让这个价格表跟各个地方的数据库同步。在价格更改完成后,复制完成的数据库快照。一般来说,某个表的数据主要是静态数据,不经常更改。当数据在一个时间发生更改时,将一个全新的数据库快照发布到服务器上,其效果会更好。

  二是在某些决策支持系统中,采用快照复制技术的比较多。因为决策支持系统,他们只需要查询数据,而很少对数据进行更改。同时,往往对数据库的及时性要求也不高。如一个销售决策系统,他们可能只需要到上个月月底的销售数据,而不需要到当天的销售数据。在这种情况下,采用快照复制技术,比起其他的数据同步技术,如事务复制技术,效果会更加的好。通常情况下,在某个时期,如果允许有过时的数据副本,也就是说,对数据的及时性要求不怎么高的系统,可以考虑采用快照技术。

  三是复制数据比较少的情况下,可以采用快照复制技术。因为快照复制是一次复制整个数据库,如果数据量比较大的话,则每次复制、传输的时间都会比较长。此时,采用事务复制会比较合理。其实,这跟完全备份与差异备份类似。当数据库容量比较小时,采用完全备份反而比差异备份更加实际。因为维护起来方便。

  四是可以利用快照复制来实现对SQL Server数据库的异地备份。SQL Server服务器本身没有异地备份功能。往往是先在本地进行备份,然后把备份文件拷贝到其他主机上。有了快照复制的话,可以解决这个问题。即先建立一个分发服务器,然后每天晚上在空余的时候,对发布服务器进行快照复制,传输给分发服务器。如此的话,分发服务器的内容就跟发布服务器上的内容保持一致。再对分发服务器执行备份,就可以完成异地备份的策略了。

  所以,通常情况下,如果企业的应用场景符合上面四种情况的话,采用快照复制的效果会比较好。反之,则就需要考虑采用事务复制等其他的数据同步技术。

  在使用快照复制技术的时候,笔者还有几个善意的提醒。

  一是快照复制技术可以在一定程度上实现网络数据库的功能。SQL Server数据库到现在的版本为止,都不支持数据库横向的扩展。也就是说,不主张采用多个服务器来分担主服务器的负担。微软一直强调的是服务器的纵向拓展,如增加服务器的CPU数、增加内存等等,来改善服务器的性能。使用快照复制技术可以使得数据的分布过程实现自动化,让多个服务器之间自动实现数据的同步,以适应企业不同程度的需要。当企业扩展时,可以增加额外的数据库服务器,来减轻主服务器的工作负荷并提高数据的使用效率。这也就在一定程度上实现了多服务器(网络数据库)的功能。不过这个功能有个限制,请看下面一个注意点。

  二是快照复制技术基本上是单向的。也就是说,只可以从主服务器上对数据进行快照复制,然后传递给其他的数据库服务器。其他的数据库服务器只能够被动的接收主服务器过来的快照。而不能够把自己服务器的数据的变化情况反馈给主服务器。这就跟我们通常所说的网络服务器有一个本质的区别。网络服务器的话,各个子服务器上更改的数据,可以在相互的服务器上进行同步。所以,若要利用快照服务器来实现网络服务器的功能,以减轻主服务器的负荷,这里往往有一个部署上的技巧。就是对于子服务器来说,只接受查询的功能。也就是说,把一些报表生成、数据查询的任务交给子服务器来做。而把数据更新等任务则仍然交给主服务器来完成。

  三是对一些数据突然变更的情况,可以采用强制复制与强制订阅。如在发布服务器上(发布服务器是快照复制中对于主服务器的专业称呼)数据发生了变更,则不管数据库管理员设置的时间有没有到,可以强制对发布服务器执行快照复制。并且把它传输到分发服务器上,强制采用更新后的数据。这就是强制订阅。强制订阅通常用在发生数据更改时必须立即发送更改到订阅服务器的这种类型的应用中。如在08年1月1日早上1点某个超市要对所有的商品价格进行调价。此时,调价完成后,就必须采用强制订阅业务,同步其他的一些价格查询服务器上的数据。当客户在查询机上查询价格的时候,查到的是其调整后的价格。这就是强制订阅的一种典型应用。但是,若数据变更比较频繁,则采用这种强制订阅的话,很可能造成系统或者网络的瘫痪。数据库管理员在这一点上要引起重视。

  四是从2005以后的版本中,包括刚推出的2008版本,引入了对Internet技术的支持。通过复制,可以把数据发布到Internet上,提高了数据库中数据的使用效率。不过在Internet上复制数据时,要注意几个问题。一是要保证发布服务器和分发服务器在网络防火墙的同一端,而不能够位于防火墙的两侧,负责的话,数据复制将不会成功。二是要保证发布服务器和分发服务器有直接的连接,而并发只有互联网这一种连接方式。三是目前它支持TCP/IP协议。只有这个协议正常运行,才可以进行互联网上的复制。同时要注意的问题就是互联网的带宽问题。带宽的多少,直接影响着数据复制的效率问题。

  总之,快照复制的出现,为SQL Server各个数据库之间数据的同步提供了一种捷径,是保障SQL Server数据一致性的法宝。