当前位置: 首页 > 图文教程 > 数据库 > MSSQL > 如何提高SQL Server复制的向后兼容性

MSSQL
sqlserver2005 xml字段的读写操作
SQLServer Job运行成功或失败时发送电子邮件通知的图文教程
一个删除指定表的所有索引和统计的过程
SQLServer2005 的查询独占模拟
SQLServer2005 中的几个统计技巧
SQLServer 数据集合的交、并、差集运算
讲解SQL Server系统数据库的工作原理
Windows Vista系统服务安全强化策略
SQL Server中导入导出数据的三种方式
SQL Server用索引视图查看性能状况
缩小SQL Server数据库的日志文件
在不同版本的SQL Server中存储数据
Windows Server 2008 十大出色功能
SQL Server系统数据库的工作原理
SQL Server中“函数”的两种用法
掌握SQL Server数据库的实用技巧
SQL Server2000数据库分离与附加
SQL Server 2008的一些新特点及独到之处
删除SQL Server 2000所有的危险扩展
SQL 2005身份证函数包含验证和15位转18位

MSSQL 中的 如何提高SQL Server复制的向后兼容性


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-30   浏览: 89 ::
收藏到网摘: n/a

虽然说SQLServer2008到目前为止已经算是新版本的数据库系统了。但是其以后还会不断的更新换代。为此在部署SQLServer2008的时候,数据库管理员仍然需要考虑到向后兼容性的问题。为了减少以后升级的麻烦,数据库管理员有必要了解这个话题。具体来说,就是要了解SQLServer2008的数据库版本中,哪些功能可能在以后的数据库版本中会被抛弃。然后数据库管理员在部署这些功能时,要慎重。能够不用就不用,或者用其他功能来代替。免得在以后数据库升级过程中,再来进行调整。笔者现在就以数据复制功能为例,谈谈如何做好这个向后的兼容性。

  一、 在SQLServer2008中不推荐使用事务复制的订阅过期。

  其实这个订阅保持期就好像是一个“有效期”或者叫做“质保期”。如果数据库系统未能够在有效的“质保期”内完成同步订阅工作,则这订约作业就会停用或者过期。如假设最大的分发保持期为72小时(这是SQLServer数据库的默认设置,管理员可以根据实际情况来调整),如果订阅未能够在72小时内同步的话,而且分发数据库中还存在尚未传递到订阅服务器的更改,则订阅作业将会被分发服务器上运行的“清除分发”作业标记为停用。此时数据库管理员如果要重新启用这个订阅功能的话,那么就必须重新初始化订阅。

  而在数据库中,主要是这个sp_addpublication过程来控制这个订阅周期。在这个存储过程中,有一个@retention 属性。这个属性主要用来设置订阅活动的保持期。默认情况下这个属性的值为336小时。如果订阅活动在保持期内不活动的话,则过期后系统就会将其自动删除。一般来说,这个值可以大于发布服务期使用的分发数据库的最大保持期。也就是说,他们具有一定的独立性。如果数据库管理员想让订阅永远不过期的话,则只需要将这个参数设置为0即可。不过根据微软的官方资料可以知道,这个参数的话在以后的版本中可能会被逐渐的淘汰。因为这个属性如果设置不当的话,会给合并复制造成一系列的不利影响,影响合并复制作业的稳定性。为此数据库管理员在部署复制作业时,最好不要使用这个参数,以免跟后续的数据库版本不兼容。

  如果一定要使用这个参数的话,那么最好能够遵循下面的一些建议。

  二是尽量不要将这个参数设置为0。如果把这个参数设置为0,就表示没有保持期的限制。虽然这从某个程度来讲,可以简化数据库管理员的维护工作。但是将这个参数的值设置为0,可能会产生一系列的负面效应。如此时数据库系统将无法删除元数据等等。

  为此,笔者的建议时,在实现复制服务时,最好不要采用这个参数。如果一定要用的话,那么要给其设置一个合理的宽限期;并且最好不要将这个参数设置为0。虽然这不是强制性的规定,但是为了复制服务能够稳定运行,各位数据库管理员最好还是好好考虑笔者的这个建议。

  二、 非SQLServer订阅服务器的处理。

  SQL Server数据库在横向的兼容性上表现还是不错的。其不但可以支持SQL Server订阅服务器,还能够支持非SQLServer的订阅服务器。如果企业需要采用非SQLServer的订阅服务器,那么有两个实现的渠道,分别为ODBC与OLE DB。不过由于ODBC其在性能、安全上都不如OLE DB接口,为此在后续的版本中,微软数据库可能不会再支持ODBC接口。所以在2008版本中实现订阅服务器的话,那么最好不要再使用这个ODBC接口,而改用OLE DB接口。

如果订阅服务器即有SQLServer定于服务器,也有Oracle订阅服务器或者其他非微软的订阅服务器,那么必须先为Oracle等非微软的订阅服务期启用发布,然后再创建SQLServer订阅服务器。数据库管理员只要用四个字就可以记住这个规则,即客人优先。另外,如果在这种混合型的订阅服务器,则必须要使用OLE DB访问接口,而不能够采用ODBC访问接口。而且运行分发代理时所使用的帐户必须对OLE DB访问接口的安装目录具有读取的权限。这也是为什么笔者强烈推荐使用OLE DB访问接口的原因。因为采用了这个接口之后,则以后如果要兼容其它订阅服务器,就是一个水到渠成的事情。不需要经过额外的调整与配置,就可以在对现有架构影响不大的情况下部署非SQL Server的订阅服务器。

  另外需要注意的是,不同的数据库处理NULL值的方式不同。为此采用不同牌子的订阅服务器,可能会影响到空值、空字符串和NULL值的显示方式,而且这个显示方式又会影响在定义了唯一约束的列中插入值的行为。如在Oracle数据库中,如果在某一列中设置为了唯一行约束,那么这个列仍然可以具有多个NULL值。但是在SQL Servre数据库中则不同。只要这个列设置了唯一行约束,那么这个列就职能够有一个Null值。所以,在混合型的订阅服务器中,有时候还需要通过应用程序或者其他手段来消除这种差异。或者在数据库设计时,要有意识的避免这种情况,如禁用NULL值等等。或者可以跟Oracle或者IBM DB2的数据库管理员联系。往往这些大牌的数据库为了相互之间实现兼容,都会在数据库中预先实现了一些措施,来防止各个操作系统处理机制不同所导致的兼容问题。

  三、 合并复制过程中同时更新多列。

  在合并复制到过程中,可能需要对目标列同时进行更新。合并复制是支持这个功能的。在合并复制执行更新时,数据库会更新一个Update语句中指定的所有列,并将没有更改的列重置为原先的值。不过合并复制更新往往涉及到比较多的记录,为此其执行速度会比较慢。为了提高这个执行的速度,在2008以前的数据库系统汇总,为此专门设置了一个fase_multicol_updateproc。如需要合并复制时,会建议数据库管理员将这个选项设置为false,以提高合并复制更新的执行效率。

  不过在SQLServer2008中,通过优化器数据库系统会自动对相关的合并复制更新语句进行优化。而且这个优化的效果比这个选贤设置为False还要明显。虽然在2008数据库中,为了向前兼容还存在这个参数,不过其存在的实际意义已经不大。为此数据库管理员在需要各并复制更新时,不用为了提高其操作性能而再单独的去设置这个参数。在以后的版本中,即使数据库管理员设置了这个参数,数据库系统也会忽略掉。