![]() |
學校地址:湖南省 長沙市 雨花區 車站南路紅花坡路口 |
![]() |
學校地址:湖南省 長沙市 雨花區 車站南路紅花坡路口 |
異地同構數據庫合并在電力系統中之應用
羅鳴,陳軼佳,龍建忠
(四川大學,四川成都 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] 下一頁
湖南省陽光電子技術學校常年面向全國招生.安置就業。考試合格頒發全國通用權威證書:《中華人民共和國職業資格證》 、《電工證》 、《焊工證》 。采用我校多年來獨創的“模塊教學法”,理論與實踐相結合、原理+圖紙+機器三位一體的教學模式,半天理論,半天實踐,通俗易懂,確保無任何基礎者也能全面掌握維修技能、成為同行業中的佼佼者。工作(一期不會,免費學會為止)。