高梓铭,韦同胜,王 鲲,赵文涛
(1.西安邮电大学通信与信息工程学院,陕西西安710121;2.电子信息现场勘验应用技术公安部重点实验室,陕西西安710121;3.陕西省公安厅 科技信息化处,陕西西安710018)
解决多点部署的SQL SERVER数据库数据同步问题,最直接的方法就是利用SQL SERVER的同步复制技术,通过数据库之间对数据和数据库对象进行复制和分发,实现同步并确保其一致性,同时也可通过第三方工具实现同步系统的开发。而PowerBuilder的数据库开发运行效率较高。因此,本文根据业务数据库库结构、部署方式、同步要求等,对照修复方案库同步技术要求,分别比较SQL SERVER数据库发布/订阅机制、PowerBuilder开发工具数据管道,结合其优点,设计基于PowerBuilder开发的同步系统。
通过固件模块重写对故障硬盘进行修复是解决疑难、故障条件下硬盘数据读取的重要方法[1-2],疑难电子数据修复方案库主要解决故障硬盘修复时必要的固件和ROM数据的收集与管理。硬盘固件是指存放硬盘控制逻辑、及相关状态信息的模块,固件模块大部分分布在硬盘负磁道(俗称“用户保留区”),也有部分硬盘固件模块分布在硬盘电路板上的 ROM 当中[3]。
业务数据在存储与交换时主要有如下特征。
(1)不同硬盘根据其品牌、型号(Model)、部件号码(PN)、固件号(Firmware)等不同,对应不同的固件文件及ROM文件[4]。
(2)固件文件或ROM文件不是一个文件,而是一组文件。以西部数据硬盘固件为例,根据功能分不同的固件模块,如ID01=DIR(模块目录)、ID02=参数/密码模块、ID03=段位表等,在故障修复固件替换时,通常不需要整体替换,而是根据故障原因针对性的替换某部分固件数据,因此固件文件也是分模块独立存在的。
(3)单个固件文件大小通常在几百K到十几兆。
(4)固件文件格式以*.rpm为代表。
(5)文件存储方式有两种,一种是以文件形式为主,直接存储在文件系统中,好处是使用时直接、方便,如图1所示;另一种是将相关文件以二进制流形式存储在数据库中,好处是便于管理、方便检索,多用户、大规模交换方便。
图1 基于文件系统的固件文件存储
(6)目前建立与使用这类数据的单位多数是硬盘维修机构,大部分数据获取与管理主要依靠维修工具配套的功能,不同工具间数据没有统一的标准,数据共享依靠机构间点对点人工导出成文件后传输。
疑难电子数据修复方案数据库相关的同步系统主要基于数据结构、数据类型、存储形式和交换方式的确立,需要达到如下技术要求。
(1)以结构化关系数据库同步为主,综合考虑现有业务系统数据库的情况,以支持SQL SERVER2000数据库优先。
(2)支持 varchar、decimal、int等常用数据类型外,还要考虑对binary、image等二进制数据类型[5]的支持。
(3)独立于修复方案库,不受方案库具体表、视图等设计与变更的影响。
(4)适应从多用户数据库中抽取数据的需要。
(5)实现增量传输要求。
(6)修正网络不可靠导致的数据传输中断等问题。
(7)支持传输数据条件设置,可实现行过滤、列过滤。
(8)考虑源或目标数据服务器不一定实时在线,要有适合的数据同步方案。
(9)支持双向同步,有可行的冲突处理机制。
(10)同步操作要避免对业务的影响。
(11)降低入侵性。
(12)易于部署、便于维护。
SQL SERVER的发布/订阅[6]是一种多对单的依赖关系备份的复制机制,通过订阅数据库监听多个数据源数据库的变更,当源数据库数据发生变更时,通知订阅它的数据库进行数据同步变更,中心订阅模型如图2所示。
对照修复方案库同步技术要求,将 SQL SERVER的发布/订阅特性梳理如下。
(1)作为SQL SERVER自带的复制机制,数据库发布/订阅主要就是针对SQL SERVER数据库之间对数据和数据库对象[7]进行复制和分发并进行同步以确保其一致性的一组技术,符合要求。
图2 SQL SERVER的发布/订阅中心订阅模型
(2)SQL SERVER复制可以发布各类数据库对象与数据,包括 varbinary等,但无法支持标识列复制。
(3)建立数据库发布时,与用户业务库具体设计无关,可以在修复方案库部署之后完成发布任务建立,但用于复制的项目,如表结构要进行修改则会受到限制,甚至可能需要先删除发布,完成修订后再重新建立发布,更适合成熟度、稳定度高的数据库。
(4)SQL SERVER复制支持多对一发布/订阅,可以比较好的支持从多用户数据中抽取数据。
(5)事务复制、合并复制都适合发生增量更改时将其传播到订阅服务器。
(6)事务复制要求良好的网络支持,实时、准实时将发布服务器上数据变化同步到订阅服务器[8],合并复制方式对网络可靠性要求没有那么高,适合于修复方案数据库同步的工程实际。
(7)SQL SERVER发布订阅针对每一个表对象提供了筛选行、筛选列功能。
(8)事务复制维护事务的一致性,需要发布服务器和订阅服务器保持不间断的连接,以使更新内容能传播到订阅服务器。合并复制可以连续地、按需或按调度的间隔使更改同步。
(9)SQL SERVER合并复制能很好的支持双向数据同步。
(10)数据库复制过程中会造成短暂的锁表操作。
(11)发布订阅对在源数据库中创建多组触发器、标识列等。
(12)创建发布订阅需要在源数据库、目标数据库上登录数据库后台进行设置,安全性比较差,虽然是向导式操作,提供有监测工具,具备日志功能,但相对复杂。
数据管道技术是PowerBuilder提供的一种组件,通过数据管道,可以实现将一个或多个源表中的数据复制到一个新的或已经存在的目标表中,对照修复方案库同步技术要求,将数据管道技术特性梳理如下。
(1)通过数据管道进行数据转移不仅可以在同一个数据库中进行,而且可以跨数据库,甚至在不同的DBMS之间进行,完全支持SQL SERVER 2000及以上版本。
(2)支持 varchar、decimal、int等常用数据类型外,但不支持varbinary、image等二进制数据类型。
(3)数据管道作为功能组件,基于PowerBuilder开发封装的应用运行,需要在开发时明确同步业务的源与目标,与业务系统的关联性较强。
(4)支持多组各自独立的连接,实现多数据源的采集。
(5)通过Options选项,追加及更新模式,实现增量数据同步,但增量判断基于PowerBuilder自身机制完成,可控性差。
(6)基于自身的增量传输及错误控制,可以适应包括网络中断在内的传输异常,保持事务的一致性。
(7)通过Where条件实现行过滤,虽然可以设定同步的列,但是需要在开发时就确定好,上线后动态调整比较困难。
(8)将源或目标设定为一个数据文件,通过数据文件实现异步方式同步。
(9)每组数据管道都要明确源与目标,传输都是单向的,通过配置多个数据管道进程,可以实现双向。
(10)在同步发生时,更新操作共享锁可能会导致对前台业务操作的影响。
(11)数据级时只需要替换应用即可,简单方便,管道几乎不对用户数据库进行对象添加。
(12)数据管道运行只依赖应用所在计算机,通过配置访问源与目标数据库,运行或中止,操作简单,升级时只需要替换应用即可,简单方便。
PowerBuilder提供的数据管道技术虽然比较强大,但在处理疑难电子数据修复方案数据库同步需求上,灵活性差。根据数据交互复制模型[9],基于PowerBuilder,借鉴SQL SERVER发布/订阅思路,结合数据管道优势,设计一款独立的数据同步系统,该系统不是基于数据库日志,而是数据本身,流程如图3所示。
将基于PowerBuilder开发的同步系统可以实现的功能对照同步技术要求梳理如下。
(1)支持以SQL SERVER为代表的主流数据库。
(2)基于SQL SERVER链接服务器模式,直接实现源数据库到目标数据库的读写操作,支持各数据类型。
(3)在发起传输操作时,动态读取数据表结构,不受如图4所示的表结构所限制[10]。
(4)将源表对目标表作为一条传输任务,多点传输通过加任务即可实现,如图5所示。
(5)借鉴SQL SERVER同步机制,在每条记录增加最后同步时间last_trans_date与最后修改时间last_mod_date两个标识列,实现增量同步。
图4 动态识别表结构的函数
图5 创建同步任务表的方法
(6)为确保数据完整性,在跨服务器同步时,先将数据插入到目标数据库临时表中,再将数据由本地同步到目标表中,成功后提交事务,更新源表中last_mod_date,如果因为网络原因中断,操作无效,下次执行重复的数据同步,因此系统同步受网络影响问题不大。
(7)系统同步采用动态 SQL生成技术,将WHERE条件加载,实现行过滤,同时由于系统是在传输时才动态加载表结构,因此通过布尔运算,可简单方便的将无需传输的列过滤掉。
(8)系统发起同步时,如果其中一台服务器不在线,单项任务连接超时后,会自动执行下一项任务,第二轮时会再依次执行各任务,应对不在线的特殊情况。另外,同步源或目标数据可灵活定义,对于经常性无法同时在线的同步任务,可通过配套传输中间件灵活匹配源与目标。
(9)系统将同步对象分解成任务,对于双向同步,只是增加一条任务即可。
(10)在跨服务器同步时,将数据插入到目标数据库临时表中,完成后在本地同步更新目标表,新增操作不锁表,对于个别更新操作,会极短暂触发共享锁,对前台业务操作影响甚微。
(11)为实现增量辨识,初始化时,在源及目标表中添加标识列及DELETE/UPDATE触发器[11-13],有一定的入侵性,但是标准化创建及删除,辨识度较高。
(12)可任意自由部署在与源及目标数据库建立连接的计算机上,发起连接撮合指令,实现同步。
将SQL SERVER数据库发布/订阅机制、Power-Builder开发工具数据管道组件功能、和基于Power-Builder开发的同步系统,对照修复方案库同步技术要求逐项分析发现,标准化机制或组件看似现成,直接配置或简单封装就可以开展同步,但工程适用性比较差,灵活度不足,相比之下,基于PowerBuilder开发的同步系统是在本地直接完成部署,可对所有源及目标数据库相关标识列、触发器,甚至数据库其他对象实现同步。