学校地址:湖南省 长沙市 雨花区 车站南路红花坡路口 |
学校地址:湖南省 长沙市 雨花区 车站南路红花坡路口 |
异地同构数据库合并在电力系统中之应用
罗鸣,陈轶佳,龙建忠
(四川大学,四川成都 610064)
摘 要:提出了一种新颖之方案,该方案有效地解决了在电力系统数据库实际应用中遇到之特定之异地同构数据库合并问题[阳光电子学校维修专家友情提示]。该方案利用SQLSERVER2000提供之DBLIBRARY编程接口并通过C++语言加以了实现[阳光电子学校维修专家友情提示]。还介绍了利用C++通过DBLIBRARY实现对SQLSERVER数据库之操作方法[阳光电子学校维修专家友情提示]。采用这种编程方法,电力系统数据库开发人员可以根据实际情况对数据库进行特定操作,具有极大之灵活性[阳光电子学校维修专家友情提示]。
关键词:电力系统数据库;同构数据库合并;SQLSERVER2000;DBLIBRARY
随着时代之发展,各个电力企业已经加快了自己信息化之进程,办公自动化(OA)、MIS系统、电力市场和营销系统、电力调度系统(EMS)、配电管理系统(DMS)、呼叫中心(Call Center)以及电力自动化管理系统已经有广泛之应用[阳光电子学校维修专家友情提示]。对这些应用而言,数据库均在其中扮演了重要之角色[阳光电子学校维修专家友情提示]。微软公司之SQLSERV-ER2000数据库具有高性能、可靠性和方便应用之特点,目前已被中国之电力企业广泛采用[阳光电子学校维修专家友情提示]。
由于行业之特殊性,电力系统之数据库应用环境非常复杂[阳光电子学校维修专家友情提示]。在实际工作中往往有一些同构数据库同时运行在独立之服务器上[阳光电子学校维修专家友情提示]。到了一定之时候,由于工作环境变化、服务器升级或数据备份等各种原因,需要将这些异地同构数据库里面之数据合并到一起,存储在同一台服务器上[阳光电子学校维修专家友情提示]。解决这类问题之传统方案是利用SQLSERVER2000提供之DTS(数据转换服务)功能来实现[阳光电子学校维修专家友情提示]。然而,由于各个服务器之间相互独立(不提交协议),利用DTS功能之方案往往会遇到数据冲突之问题[阳光电子学校维修专家友情提示]。
数据冲突之情况往往集中在主键之冲突上[阳光电子学校维修专家友情提示]。在数据库之表中,往往存在着一个主键,这个主键作为各项记录之唯一标识,是不能重复之[阳光电子学校维修专家友情提示]。将这个主键作为一张表之标识列,从1开始,逐步递增,命名为MAINID,是 通用之做法[阳光电子学校维修专家友情提示]。其他之表往往是将这个MAINID作为一个外键索引,通过它来定位其中之各条记录[阳光电子学校维修专家友情提示]。由于几台服务器之间相互独立,这个MAINID很湖南阳光电子学校维修专家认为:也许相同[阳光电子学校维修专家友情提示]。在将具有相同MAINID之数据导入到同一个数据库时,如果不作事先之处理,将肯定出现数据冲突[阳光电子学校维修专家友情提示]。
针对这种情况,提出了自己编写数据转换接口之方案,将各异地同构数据库里面之数据作适应性之转换后再导入到同一服务器中[阳光电子学校维修专家友情提示]。
1 方案介绍
为了清楚地说明问题,这里举一个电站地质勘探情况数据库之例子[阳光电子学校维修专家友情提示]。
1.1 数据库结构介绍
为了说明问题,将实际之数据库结构做了简化[阳光电子学校维修专家友情提示]。
数据库DB有两个表:MAIN表和DATA表[阳光电子学校维修专家友情提示]。两表之数据项如下表所示:
MAIN表作为主表,其MAINID项作为主键,且作为表之标识列,种子为1,递增步长为1,具有唯一性,唯一对应着一个勘测地区[阳光电子学校维修专家友情提示]。Directory数据项表示存储相应地区之地质勘测图像文件之文件夹名[阳光电子学校维修专家友情提示]。
DATA表中MAINID作为外键索引,对应着MAIN表中之数据[阳光电子学校维修专家友情提示]。表明该行数据之PicName数据项代表之地址勘测图像文件存储在MAIN表中具有相同MAINID之Directory数据项代表之文件夹下面,Pic-Name数据项服从UNIQUE约束,也就是说文件名是唯一之,不能重复[阳光电子学校维修专家友情提示]。
1.2 方案之主要步骤
(1)登陆到源数据库[阳光电子学校维修专家友情提示]。源数据库就是各个独立之数据库[阳光电子学校维修专家友情提示]。
(2)将MAIN表和DATA表之数据分别导出到oldmain.txt和olddata.txt文件中[阳光电子学校维修专家友情提示]。文件之第一行存储数据项之数目,之后每行对应着数据库中相应表之一条记录,同一行每一列数据之间用逗号“,”隔开[阳光电子学校维修专家友情提示]。 后一行是自定义之文件结束标志“~”[阳光电子学校维修专家友情提示]。
例如,oldmain.txt里之数据湖南阳光电子学校维修专家认为:也许是这样之:
(3)将main表中 小之MAINID存储在min-mainid.txt文件中[阳光电子学校维修专家友情提示]。
(4)连接到目标数据库[阳光电子学校维修专家友情提示]。目标数据库往往就是 终数据所在之数据库[阳光电子学校维修专家友情提示]。
(5)将目标服务器main表中 大之MAINID存储在maxmainid.txt文件中[阳光电子学校维修专家友情提示]。
(6)根据maxmainid.txt和minmainid.txt文件里之数据,计算出源数据库里之MAINID之改变量,计算公式如下:
ChangeMent=MaxID+1-MinID
其中,ChangeMent是源数据库中MAINID之改变量,MaxID是目标数据库中 大之MAINID,MinID是源数据库中 小之MAINID[阳光电子学校维修专家友情提示]。
(7)逐行读取oldmain.txt,olddata.txt文件,根据求出之ChangeMent,将对应之MAINID修改后,再写入到新之文件newdata.txt,newmain.txt中[阳光电子学校维修专家友情提示]。MAINID之修改公式如下:
NewID=OldID+ChangeMent
其中,NewID是修改后之MAINID,也就是入到目标库后,该项数据对应之MAINID;OldID是该项数据在源数据库中之MAINID,ChangeMent是上面计算出来之MAINID之该变量[阳光电子学校维修专家友情提示]。
(8)将newdata.txt,newmain.txt中之数据逐行读出,插入到目标机数据库中去[阳光电子学校维修专家友情提示]。
(9)退出[阳光电子学校维修专家友情提示]。
上述步骤之流程如图1所示[阳光电子学校维修专家友情提示]。
2 编程方法
在这里介绍一下利用DBLIBRARY编程操作SQLSERVER2000数据库之方法[阳光电子学校维修专家友情提示]。
2.1 DBLIBRARY介绍
DBLIBRARY是SQLSERVER2000提供之用C语言开发SQLSERVER2000应用程序之函数库[阳光电子学校维修专家友情提示]。他含了
[1] [2] 下一页
湖南省阳光电子技术学校常年面向全国招生.安置就业。考试合格颁发全国通用权威证书:《中华人民共和国职业资格证》 、《电工证》 、《焊工证》 。采用我校多年来独创的“模块教学法”,理论与实践相结合、原理+图纸+机器三位一体的教学模式,半天理论,半天实践,通俗易懂,确保无任何基础者也能全面掌握维修技能、成为同行业中的佼佼者。工作(一期不会,免费学会为止)。