數(shù)據(jù)庫(kù)實(shí)時(shí)同步技術(shù)解決方案_第1頁(yè)
數(shù)據(jù)庫(kù)實(shí)時(shí)同步技術(shù)解決方案_第2頁(yè)
數(shù)據(jù)庫(kù)實(shí)時(shí)同步技術(shù)解決方案_第3頁(yè)
數(shù)據(jù)庫(kù)實(shí)時(shí)同步技術(shù)解決方案_第4頁(yè)
數(shù)據(jù)庫(kù)實(shí)時(shí)同步技術(shù)解決方案_第5頁(yè)
已閱讀5頁(yè),還剩26頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、數(shù)據(jù)庫(kù)實(shí)時(shí)同步技術(shù)解決方案一、前 言隨著企業(yè)的不斷發(fā)展,企業(yè)信息化的不斷深入,企業(yè)內(nèi)部存在著各種各樣的異構(gòu)軟、硬件平臺(tái),形成了分布式異構(gòu)數(shù)據(jù)源。當(dāng)企業(yè)各應(yīng)用系統(tǒng)間需要進(jìn)行數(shù)據(jù)交流時(shí),其效率及準(zhǔn)確性、及時(shí)性必然受到影響。為了便于信息資源的統(tǒng)一管理及綜合利用,保障各業(yè)務(wù)部門(mén)的業(yè)務(wù)需求及協(xié)調(diào)工作,常常涉及到相關(guān)數(shù)據(jù)庫(kù)數(shù)據(jù)實(shí)時(shí)同步處理。基于數(shù)據(jù)庫(kù)的各類(lèi)應(yīng)用系統(tǒng)層出不窮,可能涉及到包括ACCESS、SQLSERVER、ORACLE、DB2、MYSQL等數(shù)據(jù)庫(kù)。目前國(guó)內(nèi)外幾家大型的數(shù)據(jù)庫(kù)廠(chǎng)商提出的異構(gòu)數(shù)據(jù)庫(kù)復(fù)制方案主要有:Oracle的透明網(wǎng)關(guān)技術(shù),IBM的CCD表(一致變化數(shù)據(jù)表)方案,微軟公司的出版者

2、/訂閱等方案。但由于上述系統(tǒng)致力于解決異構(gòu)數(shù)據(jù)庫(kù)間復(fù)雜的交互操作,過(guò)于大而全而且費(fèi)用較高,并不符合一些中小企業(yè)的實(shí)際需求。本文結(jié)合企業(yè)的實(shí)際應(yīng)用實(shí)踐經(jīng)驗(yàn),根據(jù)不同的應(yīng)用類(lèi)型,給出了相應(yīng)的數(shù)據(jù)庫(kù)實(shí)時(shí)同步應(yīng)用的具體解決方案,主要包括:(1) SQLSERVER 到SQLSERVER 同步方案(2) ORACLE 到 SQLSERVER 同步方案(3) ACCESS 到SQLSERVER/ORACLE 同步方案二、異構(gòu)數(shù)據(jù)庫(kù)異構(gòu)數(shù)據(jù)庫(kù)系統(tǒng)是相關(guān)的多個(gè)數(shù)據(jù)庫(kù)系統(tǒng)的集合,可以實(shí)現(xiàn)數(shù)據(jù)的共享和透明訪(fǎng)問(wèn),每個(gè)數(shù)據(jù)庫(kù)系統(tǒng)在加入異構(gòu)數(shù)據(jù)庫(kù)系統(tǒng)之前本身就已經(jīng)存在,擁有自己的DMBS。異構(gòu)數(shù)據(jù)庫(kù)的各個(gè)組成部分具有自

3、身的自治性,實(shí)現(xiàn)數(shù)據(jù)共享的同時(shí),每個(gè)數(shù)據(jù)庫(kù)系統(tǒng)仍保有自己的應(yīng)用特性、完整性控制和安全性控制。異構(gòu)數(shù)據(jù)庫(kù)的異構(gòu)性主要體現(xiàn)在以下幾個(gè)方面:1、計(jì)算機(jī)體系結(jié)構(gòu)的異構(gòu)各數(shù)據(jù)庫(kù)可以分別運(yùn)行在大型機(jī)、小型機(jī)、工作站、PC嵌入式系統(tǒng)中。2、基礎(chǔ)操作系統(tǒng)的異構(gòu)各個(gè)數(shù)據(jù)庫(kù)系統(tǒng)的基礎(chǔ)操作系統(tǒng)可以是Unix、Windows NT、 Linux等。3、DMBS本身的異構(gòu)可以是同為關(guān)系型數(shù)據(jù)庫(kù)系統(tǒng)的Oracle、 SQL Server等,也可以是不同數(shù)據(jù)模型的數(shù)據(jù)庫(kù),如關(guān)系、模式、層次、網(wǎng)絡(luò)、面向?qū)ο?,函?shù)型數(shù)據(jù)庫(kù)共同組成一個(gè)異構(gòu)數(shù)據(jù)庫(kù)系統(tǒng)。三、數(shù)據(jù)庫(kù)同步技術(shù)對(duì)于異構(gòu)數(shù)據(jù)庫(kù)系統(tǒng),實(shí)現(xiàn)數(shù)據(jù)共享應(yīng)當(dāng)達(dá)到兩點(diǎn):一是實(shí)現(xiàn)數(shù)據(jù)庫(kù)

4、轉(zhuǎn)換;二是實(shí)現(xiàn)數(shù)據(jù)的透明訪(fǎng)問(wèn)。所謂透明訪(fǎng)問(wèn),就是在異構(gòu)數(shù)據(jù)系統(tǒng)中用戶(hù)可以將異構(gòu)分布式數(shù)據(jù)庫(kù)系統(tǒng)看成普通的分布式數(shù)據(jù)庫(kù)系統(tǒng),用自己熟悉的數(shù)據(jù)處理語(yǔ)言去訪(fǎng)問(wèn)數(shù)據(jù)庫(kù),如同訪(fǎng)問(wèn)一個(gè)數(shù)據(jù)庫(kù)系統(tǒng)一樣。但目前還沒(méi)有一種廣泛使用的數(shù)據(jù)定義模型和數(shù)據(jù)查詢(xún)語(yǔ)言,實(shí)現(xiàn)數(shù)據(jù)的透明訪(fǎng)問(wèn)可以采用多對(duì)一轉(zhuǎn)換、雙向的中間件等技術(shù)。開(kāi)放式數(shù)據(jù)庫(kù)互連(Open DataBase Connectivity,簡(jiǎn)稱(chēng)ODBC)是一種用來(lái)在相關(guān)或不相關(guān)的數(shù)據(jù)庫(kù)管理系統(tǒng)中存取數(shù)據(jù)的標(biāo)準(zhǔn)應(yīng)用程序接口(API)。ODBC為應(yīng)用程序提供了一套高層調(diào)用接口規(guī)范和基于動(dòng)態(tài)鏈接庫(kù)的運(yùn)行支持環(huán)境。目前,常用的數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)的前端工具如Power Buil

5、der、 Delphi等都通過(guò)開(kāi)放數(shù)據(jù)庫(kù)互聯(lián)(ODBC)接口來(lái)連接各種數(shù)據(jù)庫(kù)系統(tǒng)。而多數(shù)數(shù)據(jù)庫(kù)管理系統(tǒng)(如:Oracle、Sybase、SQL Server等)都提供了相應(yīng)的ODBC驅(qū)動(dòng)程序,使數(shù)據(jù)庫(kù)系統(tǒng)具有很好的開(kāi)放性。ODBC接口的最大優(yōu)點(diǎn)是其互操作能力,理想情況下,每個(gè)驅(qū)動(dòng)程序和數(shù)據(jù)源應(yīng)支持完全相同的ODBC函數(shù)調(diào)用和SQL語(yǔ)句,使得ODBC應(yīng)用程序可以操作所有的數(shù)據(jù)庫(kù)系統(tǒng)。然而,實(shí)際上不同的數(shù)據(jù)庫(kù)對(duì)SQL語(yǔ)法的支持程度各不相同,因此,ODBC規(guī)范定義了驅(qū)動(dòng)程序的一致性級(jí)別,ODBC API的一致性確定了應(yīng)用程序所能調(diào)用的ODBC函數(shù)種類(lèi)。數(shù)據(jù)庫(kù)同步是在兩個(gè)不同的數(shù)據(jù)庫(kù)之間進(jìn)行數(shù)據(jù)交換,

6、以使得任何一個(gè)數(shù)據(jù)庫(kù)的改變,會(huì)以同樣的方式出現(xiàn)在另一個(gè)數(shù)據(jù)庫(kù)里。數(shù)據(jù)庫(kù)同步可以是單向的,也可以是雙向的。單向同步也叫主從同步,也就是說(shuō),其中的一個(gè)數(shù)據(jù)庫(kù)是主數(shù)據(jù)庫(kù),另一個(gè)數(shù)據(jù)庫(kù)是從數(shù)據(jù)庫(kù)。只有主數(shù)據(jù)庫(kù)的改變可以被復(fù)制到從數(shù)據(jù)庫(kù)里去,從數(shù)據(jù)庫(kù)是被動(dòng)的。使用數(shù)據(jù)庫(kù)同步技術(shù),用戶(hù)可以將一份數(shù)據(jù)發(fā)布到多臺(tái)服務(wù)器上,從而使不同的服務(wù)器用戶(hù)都可以在權(quán)限的許可的范圍內(nèi)共享這份數(shù)據(jù)。同步技術(shù)可以確保分布在不同地點(diǎn)的數(shù)據(jù)自動(dòng)同步更新,從而保證數(shù)據(jù)的一致性。圖1 數(shù)據(jù)庫(kù)同步示意圖目前國(guó)內(nèi)外幾家大型的數(shù)據(jù)庫(kù)廠(chǎng)商提出的異構(gòu)數(shù)據(jù)庫(kù)復(fù)制方案主要有:Oracle的透明網(wǎng)關(guān)技術(shù),IBM的CCD表(一致變化數(shù)據(jù)表)方案,微軟公

7、司的出版者/訂閱者方案。國(guó)外的如土耳其中東科技大學(xué)的MIND系統(tǒng),美國(guó)密歇根迪爾波恩大學(xué)、斯坦福大學(xué)的TSUNMMIS項(xiàng)目,國(guó)內(nèi)的如中關(guān)村科技軟件有限公司、華中科技大學(xué)的Panorama系統(tǒng)都有過(guò)類(lèi)似系統(tǒng)的研究。但是由于上述系統(tǒng)致力于解決異構(gòu)數(shù)據(jù)庫(kù)間復(fù)雜的交互操作,大而全,并不符合一些中小企業(yè)的需求,如IBM的CCD表方案實(shí)現(xiàn)復(fù)雜且CD表占用資源較多維護(hù)費(fèi)用高昂,微軟公司的出版者/訂閱者方案只能在NT運(yùn)行等。而其它的系統(tǒng)大多都存在此類(lèi)問(wèn)題。四、局域網(wǎng)數(shù)據(jù)同步解決方案(一).SQLSERVER 到SQLSERVER同步復(fù)制SQLSERVER 同類(lèi)數(shù)據(jù)庫(kù)之間實(shí)現(xiàn)同步,可直接參照Microsoft

8、的發(fā)布/訂閱模式。具體方法步驟如下:(1) SQL復(fù)制的基本元素包括出版服務(wù)器、訂閱服務(wù)器、分發(fā)服務(wù)器、出版物、文章。(2) SQL復(fù)制的工作原理SQLSERVER主要采用出版物、訂閱的方式來(lái)處理復(fù)制。源數(shù)據(jù)所在的服務(wù)器是出版服務(wù)器,負(fù)責(zé)發(fā)表數(shù)據(jù)。出版服務(wù)器把要發(fā)表的數(shù)據(jù)的所有改變情況的拷貝復(fù)制到分發(fā)服務(wù)器,分發(fā)服務(wù)器包含有一個(gè)分發(fā)數(shù)據(jù)庫(kù),可接收數(shù)據(jù)的所有改變,并保存這些改變,再把這些改變分發(fā)給訂閱服務(wù)器。(3) SQLSERVER復(fù)制技術(shù)類(lèi)型SQLSERVER提供了三種復(fù)制技術(shù),分別是:1、快照復(fù)制/2、事務(wù)復(fù)制/3、合并復(fù)制。(4)發(fā)布/訂閱方案第一步:來(lái)配置出版服務(wù)器1、選中指定服務(wù)器節(jié)

9、點(diǎn)。2、從工具下拉菜單的復(fù)制子菜單中選擇發(fā)布、訂閱服務(wù)器和分發(fā)命令。3、系統(tǒng)彈出一個(gè)對(duì)話(huà)框點(diǎn)下一步然后看著提示一直操作到完成。4、當(dāng)完成了出版服務(wù)器的設(shè)置以后系統(tǒng)會(huì)為該服務(wù)器的樹(shù)形結(jié)構(gòu)中添加一個(gè)復(fù)制監(jiān)視器。同時(shí)也生成一個(gè)分發(fā)數(shù)據(jù)庫(kù)(distribution)。第二步:創(chuàng)建出版物1、選中指定的服務(wù)器。2、從工具菜單的復(fù)制子菜單中選擇創(chuàng)建和管理發(fā)布命令。此時(shí)系統(tǒng)會(huì)彈出一個(gè)對(duì)話(huà)框。3、選擇要?jiǎng)?chuàng)建出版物的數(shù)據(jù)庫(kù),然后單擊創(chuàng)建發(fā)布。4、在創(chuàng)建發(fā)布向?qū)У奶崾緦?duì)話(huà)框中單擊下一步系統(tǒng)就會(huì)彈出一個(gè)對(duì)話(huà)框。對(duì)話(huà)框上的內(nèi)容是復(fù)制的三個(gè)類(lèi)型。我們現(xiàn)在選第一個(gè)也就是默認(rèn)的快照發(fā)布(其他兩個(gè)大家可以去看看幫助)。5、單擊

10、下一步系統(tǒng)要求指定可以訂閱該發(fā)布的數(shù)據(jù)庫(kù)服務(wù)器類(lèi)型,SQLSERVER允許在不同的數(shù)據(jù)庫(kù)如ORACLE或ACCESS之間進(jìn)行數(shù)據(jù)復(fù)制。但是在這里我們選擇運(yùn)行SQLSERVER2000的數(shù)據(jù)庫(kù)服務(wù)器。6、單擊下一步系統(tǒng)就彈出一個(gè)定義文章的對(duì)話(huà)框也就是選擇要出版的表。7、然后下一步直到操作完成。當(dāng)完成出版物的創(chuàng)建后創(chuàng)建出版物的數(shù)據(jù)庫(kù)也就變成了一個(gè)共享數(shù)據(jù)庫(kù)。第三步:設(shè)計(jì)訂閱1、選中指定的訂閱服務(wù)器。2、從工具下拉菜單中選擇復(fù)制子菜單的請(qǐng)求訂閱。3、按照單擊下一步操作直到系統(tǒng)會(huì)提示檢查SQLSERVER代理服務(wù)的運(yùn)行狀態(tài),執(zhí)行復(fù)制操作的前提條件是SQLSERVER代理服務(wù)必須已經(jīng)啟動(dòng)。4、單擊完成。

11、完成訂閱操作。完成上面的步驟其實(shí)復(fù)制也就是成功了。但是如何來(lái)知道復(fù)制是否成功了呢?這里可以通過(guò)這種方法來(lái)快速看是否成功。展開(kāi)出版服務(wù)器下面的復(fù)制發(fā)布內(nèi)容右鍵發(fā)布內(nèi)容屬性擊活狀態(tài)然后點(diǎn)立即運(yùn)行代理程序接著點(diǎn)代理程序?qū)傩該艋钫{(diào)度把調(diào)度設(shè)置為每一天發(fā)生,每一分鐘,在0:00:00和23:59:59之間。接下來(lái)就是判斷復(fù)制是否成功了打開(kāi)。C:/ProgramFiles/MicrosoftSQLServer/MSSQL/REPLDATA/unc/XIAOWANGZI_database_database下面看是不是有一些以時(shí)間做為文件名的文件夾差不多一分中就產(chǎn)生一個(gè)。如果不確定是否創(chuàng)建成功,打開(kāi)你的數(shù)據(jù)庫(kù)

12、看在訂閱的服務(wù)器的指定訂閱數(shù)據(jù)庫(kù)下看是否能夠看到剛才所發(fā)布的表。(二)、Oracle與SQL Server的互連及共享不同數(shù)據(jù)庫(kù)平臺(tái)的互連一般稱(chēng)之為數(shù)據(jù)庫(kù)的異構(gòu)服務(wù),現(xiàn)在各大數(shù)據(jù)庫(kù)之間都可以實(shí)現(xiàn)這樣的異構(gòu)互連,只是各廠(chǎng)商的具體實(shí)現(xiàn)技術(shù)不一樣,如:在SQL SERVER里面叫做LINKED SERVER,通過(guò)ODBC實(shí)現(xiàn)與其它數(shù)據(jù)庫(kù)的互聯(lián)。而ORACLE實(shí)現(xiàn)異構(gòu)服務(wù)的技術(shù)叫做透明網(wǎng)關(guān)Transparent Gateway,當(dāng)然之前ORACLE還采用過(guò)通用連接技術(shù)。目前ORACLE利用透明網(wǎng)關(guān)可以實(shí)現(xiàn)和SQLSERVER、SYBASE、DB2等多種數(shù)據(jù)庫(kù)的互聯(lián)。透明網(wǎng)關(guān)的體系結(jié)構(gòu)也很簡(jiǎn)單,在ORA

13、CLE和SQL ERVER之間使用ORACLE透明網(wǎng)關(guān)服務(wù)器實(shí)現(xiàn)互連互通,其中透明網(wǎng)關(guān)服務(wù)器可以與ORACLE或SQLSERVER數(shù)據(jù)庫(kù)在同一臺(tái)主機(jī)上,也可以是在獨(dú)立的一臺(tái)主機(jī)上。測(cè)試步驟如下:(1)、在SQLSERVER數(shù)據(jù)庫(kù)上創(chuàng)建測(cè)試賬號(hào)和表數(shù)據(jù)庫(kù): PUBS,賬號(hào)cyx,create table t (c char(10);(2)、測(cè)試用數(shù)據(jù)庫(kù)和透明網(wǎng)關(guān)在同一臺(tái)機(jī)器上,透明網(wǎng)關(guān)在oracle默認(rèn)安裝時(shí)是不安裝的,所以如果你想用需要選擇這一選項(xiàng)。(3)、安裝透明網(wǎng)關(guān)for sql server的軟件后,可以在$ORACLE_HOME下看到tg4msql目錄,編輯$ORACLE_HOME/t

14、g4msql/admin/inittg4msql.sql文件確認(rèn)這一行正確: HS_FDS_CONNECT_INFO=SERVER=IP;DATABASE=pubs(4)、修改透明網(wǎng)關(guān)server上的listener.ora,在SID_LIST中加入以下內(nèi)容: (SID_NAME = tg4msql) # SID自己命名 (ORACLE_HOME = c:) (PROGRAM = tg4msql)(5)、在oracle server上的tnsnames.ora中加入到透明網(wǎng)關(guān)的tnsname,內(nèi)容如下: sql2k = (DESCRIPTION = (ADDRESS_LIST =(ADDRES

15、S = (PROTOCOL = TCP)(HOST = 6)(PORT = 1521) #此處HOST填的是透明網(wǎng)關(guān)SERVER的地址 ) (CONNECT_DATA = (SID = tg4msql) )#此SID應(yīng)和透明網(wǎng)關(guān)SERVER上設(shè)定的SID相同 (HS=OK) )(6)、修改ORACLE SERVER的初始化參數(shù),將global_names設(shè)為false,因?yàn)槲覀儾⒉皇褂肎LOBAL NAME。然后重起數(shù)據(jù)庫(kù)。(7)、現(xiàn)在在ORACLE SERVER上創(chuàng)建DB LINK就可以了。以上測(cè)試實(shí)現(xiàn)通過(guò)透明網(wǎng)關(guān)來(lái)訪(fǎng)問(wèn)sql server的數(shù)據(jù),只需要注意ORACLE訪(fǎng)

16、問(wèn)配置問(wèn)題。注意事項(xiàng):1、Oracle For SQLServer的透明網(wǎng)關(guān)在UNIX下無(wú)法實(shí)現(xiàn),目前只支持WIN;原因很簡(jiǎn)單,SQLServer本身不支持UNIX,所以O(shè)racle也無(wú)法直接在UNIX下訪(fǎng)問(wèn)SQL Server。2、Oracle For其它數(shù)據(jù)庫(kù)的透明網(wǎng)關(guān),如SYBASE等有UNIX本版本的數(shù)據(jù)庫(kù)在UNIX可以實(shí)現(xiàn)。3、Oracle透明網(wǎng)關(guān)軟件在Oracle 8i時(shí)是需要花錢(qián)另買(mǎi)的,大約1萬(wàn)$;到Oracle 9i時(shí)是作為數(shù)據(jù)庫(kù)的一個(gè)組件免費(fèi)發(fā)布的,安裝時(shí)在組件種選擇即可。4、針對(duì)我們的實(shí)際應(yīng)用,如果有需要實(shí)現(xiàn)Oracle 到SQL Server的互連,我們需要另外用一臺(tái)WI

17、N下的Oracle 9i來(lái)做透明網(wǎng)關(guān)服務(wù)器,其它UNIX下的Oracle通過(guò)這個(gè)透明網(wǎng)關(guān)來(lái)訪(fǎng)問(wèn)SQL Server。5、同數(shù)據(jù)庫(kù)間的數(shù)據(jù)處理需使用標(biāo)準(zhǔn)SQL來(lái)實(shí)現(xiàn)。6、各數(shù)據(jù)庫(kù)中特殊的數(shù)據(jù)類(lèi)型,需要在程序中實(shí)現(xiàn)轉(zhuǎn)換,應(yīng)盡量避免使用無(wú)法轉(zhuǎn)換的數(shù)據(jù)類(lèi)型。(三)、Oracle與SQL Server的實(shí)時(shí)同步盡管透明網(wǎng)關(guān)技術(shù)實(shí)現(xiàn)了OQACLE 與 SQLSERVER 的互連,但在同步應(yīng)用中不便于控制同步數(shù)據(jù)的要求,特別是ORACEL與SQLSERVER 存在數(shù)據(jù)類(lèi)型轉(zhuǎn)換時(shí)存在困難。以下給出同步數(shù)據(jù)代碼樣例如下:為實(shí)現(xiàn)ORACLE 到SQLSERVER 的數(shù)據(jù)同步,首先需在ORACLE中建一需同步的數(shù)據(jù)

18、視圖,以便于操作訪(fǎng)問(wèn)。1、在ORACLE中創(chuàng)建需同步的數(shù)據(jù)視圖2、配置局域網(wǎng)客戶(hù)端建立 tnsname.ora 文件,使其能訪(fǎng)問(wèn)遠(yuǎn)程 ORACLE 數(shù)據(jù)庫(kù)3、在SQLSERVER 中創(chuàng)建與ORACLE 視圖同構(gòu)的數(shù)據(jù)庫(kù)表4、定義同步方式及步驟5、將VBS轉(zhuǎn)換成EXE 文件,并將EXE 程序制作成windows 服務(wù),以便在后臺(tái)運(yùn)行。6、以下是ORACLE 到 SQLSERVER數(shù)據(jù)同步主要VBS示例代碼;= oracleTOsqlserver 數(shù)據(jù)同步腳本 = 1. 檢測(cè)遠(yuǎn)程oracle服務(wù)器網(wǎng)絡(luò)是否連通, 通則連接; 2. 連接oracle; 連接sqlserver;取N天的cklsz記錄集

19、; 3. 取 oracle的dataset; not in sqlserver 中的insert to sqlserver; 4. 日志寫(xiě)入txt文件,以日期為文件名稱(chēng),只保留7天的日志;=Do While Truedim f,txtfile- 創(chuàng)建日志文件對(duì)象, 判定7天前的log 文件是否存在,存在則刪除!-Set f = CreateObject(Scripting.FileSystemObject)set txtfile = f.opentextfile(D:wxjloracleTOsqlserver&date&.txt,8,True)If f.FileExists(D:wxjlora

20、cleTOsqlserver&date-7&.txt) Then f.DeleteFile(D:wxjloracleTOsqlserver&date-7&.txt)end if- ping oracle 服務(wù)器,連通- 則連接 oracle/sqlserver -ip=2Set FileSys = CreateObject(Scripting.FileSystemObject)Set WShShell = CreateObject(WScript.Shell)RetCode = WShShell.Run(ping -n 1 &IP , 0, True )if RetCode

21、 = 0 Then txtfile.write(date& &time& - ping anywhere host ok ! ) - 測(cè)試連接遠(yuǎn)程 oracle - ( OraOLEDB.Oracle.1/ MSDAORA.1 ) conn_ora =Provider=OraOLEDB.Oracle.1;Persist Security Info=True;User ID=qyselect;Password=qy08select12;Data Source=hydata set rs_ora=createobject(adodb.recordset) sql_ora=select * from

22、 Hybjsb.V_QY_CKLSZ Err.clear On Error Resume Next - 出錯(cuò)不顯示,執(zhí)行下一條 rs_ora.open sql_ora,conn_ora,1,1 rs_ora.close If Err.Number=0 Then txtfile.writeline(- connect anywhere database successful ! ) - 連接本地 sqlserver, insert sqlserver conn_local = PROVIDER=SQLOLEDB;DATA SOURCE=local;UID=sa;PWD=sa set rs_loc

23、al = createobject(adodb.recordset)- 更新 30天以?xún)?nèi)的數(shù)據(jù) Nday=30 dept=卷包車(chē)間 DB=wxjl_1bjb call xcopy - else txtfile.writeline(- * 遠(yuǎn)程數(shù)據(jù)庫(kù)連接失敗 ! * ) end ifelse txtfile.writeline(date& &time& - # 網(wǎng)絡(luò)故障 ! # )end ifreleaseconnection conn_orareleaseconnection conn_localset f=nothingset txtfile=nothingset rs_local=noth

24、ingset rs_ora=nothing間隔 5分鐘循環(huán)一次WScript.Sleep Loop- 數(shù)據(jù)同步過(guò)程 -Sub xcopy()dim records(0) - 判斷 temp 是否存在,存在則刪除 sql_local=select count(1) as rec from &DB&.dbo.sysobjects where name=temp and xtype=U rs_local.open sql_local,conn_local,1,1 records=rs_local(rec) rs_local.close if records 0 then sql_local=drop

25、 table &DB&.dbo.temp rs_local.open sql_local,conn_local,1,1 end if (1) - 取當(dāng)前日期前Nday天的數(shù)據(jù)插入臨時(shí)表 temp sql_local=SELECT * INTO &DB&.dbo.temp FROM OPENROWSET(MSDAORA.1,hydata;qyselect;qy08select12,SELECT * FROM Hybjsb.V_QY_CKLSZ) sql_local=sql_local+ where CONVERT(smalldatetime,dbilldate)= +cstr(date-Nday

26、)+ sql_local=sql_local+ and deptname=&dept& and storname曲煙寄售庫(kù) rs_local.open sql_local,conn_local,1,1 (2) - 判斷是否有新記錄 sql_local= SELECT count(1) as rec sql_local=sql_local+ FROM &DB&.dbo.temp sql_local=sql_local+ where bid not in (select bid from &DB&.dbo.t_ly where lyrq=+cstr(date-Nday)+) rs_local.op

27、en sql_local,conn_local,1,1 records=rs_local(rec) rs_local.close if records 0 then - 有新記錄, 追加記錄 sql_local=insert into &DB&.dbo.t_ly sql_local=sql_local+(bid,lyrq,djh,storname,deptname,lyr,custname,invclasscode,invclassname,chbm,lybjmc,lygg,lyxh,lyjh,graphid,lydw,lysl,lydj,lyje) sql_local=sql_local+

28、SELECT sql_local=sql_local+ bid,CONVERT(smalldatetime,dbilldate) as dbilldate,billcode,storname,deptname,psnname,custname,invclasscode,invclassname,invcode,invname,invspec,invtype,invmnecode,graphid,measname,noutnum,nprice,noutmny sql_local=sql_local+ FROM &DB&.dbo.temp sql_local=sql_local+ where bi

29、d not in (select bid from &DB&.dbo.t_ly where lyrq=+cstr(date-Nday)+) rs_local.open sql_local,conn_local,1,1 txtfile.writeline( ) txtfile.writeline( * &dept& - &date& &time& - new Add +cstr(records)+ 記錄.) else txtfile.writeline( ) txtfile.writeline( - &dept& - no new data! ) end if (3) delete - 刪除記錄

30、 sql_local=select count(1) as rec from &DB&.dbo.t_ly sql_local=sql_local+ where lyrq=+cstr(date-Nday)+ sql_local=sql_local+ and bid not in (select bid from &DB&.dbo.temp) rs_local.open sql_local,conn_local,1,1 records=rs_local(rec) rs_local.close if records 0 then sql_local=delete &DB&.dbo.t_ly sql_

31、local=sql_local+ where lyrq=+cstr(date-Nday)+ sql_local=sql_local+ and bid not in (select bid from &DB&.dbo.temp) rs_local.open sql_local,conn_local,1,1 txtfile.writeline( * &dept& - &date& &time& - delete +cstr(records)+ 記錄.) else txtfile.writeline( - &dept& - no delete data! ) end if(4) update - 更

32、新記錄 sql_local=select count(1) as rec from &DB&.dbo.temp rs_local.open sql_local,conn_local,1,1 records=rs_local(rec) rs_local.close sql_local=update &DB&.dbo.t_ly sql_local=sql_local+ set sql_local=sql_local+ lyrq=CONVERT(smalldatetime,T.dbilldate),djh=T.billcode,storname=T.storname,deptname=T.deptn

33、ame,custname=T.custname, sql_local=sql_local+ invclasscode=T.invclasscode,invclassname=T.invclassname,chbm=T.invcode,lybjmc=T.invname,lygg=T.invspec,lyxh=T.invtype, sql_local=sql_local+ lyjh=T.invmnecode,graphid=T.graphid,lydw=T.measname,lysl=T.noutnum,lydj=T.nprice,lyje=T.noutmny sql_local=sql_loca

34、l+ from &DB&.dbo.t_ly AS A, &DB&.dbo.temp AS T sql_local=sql_local+ where A.lyrq=+cstr(date-Nday)+ sql_local=sql_local+ and A.bid=T.bid rs_local.open sql_local,conn_local,1,1 txtfile.writeline( - &dept& - update data - +cstr(records) + 記錄. txtfile.writeline( )end sub-(四)、ACCESS與SQL Server的實(shí)時(shí)同步由于A(yíng)CCE

35、SS數(shù)據(jù)本身的特點(diǎn),桌面數(shù)據(jù)庫(kù),不支持網(wǎng)絡(luò)訪(fǎng)問(wèn)操作,因此要實(shí)現(xiàn)與SQLSERVER數(shù)據(jù)庫(kù)的同步,需要進(jìn)行目錄共享訪(fǎng)問(wèn)設(shè)置。具體實(shí)現(xiàn)如下:1、共享ACCESS 數(shù)據(jù)庫(kù)目錄,并賦予一admin權(quán)限的用戶(hù);2、測(cè)試局域網(wǎng)共享訪(fǎng)問(wèn):IP目錄. ;3、代碼實(shí)現(xiàn)客戶(hù)機(jī)共享ACCESS文件到服務(wù)器的拷貝;4、在同一服務(wù)器上實(shí)現(xiàn)ACCESS到SQLSERVER 數(shù)據(jù)的同步復(fù)制;5、以下主要VBS代碼實(shí)現(xiàn)了MDB文件復(fù)制及與SQLSERVER同步更新;= ACCESS .MDB 文件實(shí)時(shí)備份過(guò)程 =sub backupfile(txtfile,ip,db)Dim Path,fso,fsofile,net- 初始

36、化備份參數(shù)source_path=&ip&產(chǎn)品數(shù)碼跟蹤target_file =D:WEBbarcodeprinterBACKUP+trim(db)&.mdbif ip=1 thensource_path=&ip&產(chǎn)品數(shù)碼跟蹤1end iferr.clearPath=X:Set fso = CreateObject(Scripting.FileSystemObject)Set fsofile = CreateObject(Scripting.FileSystemObject)Set net = CreateObject(WScript.Network)If Not fso.D

37、riveExists(fso.GetDriveName(Path) Thenerr.clearOn Error Resume Next 出錯(cuò)不顯示,執(zhí)行下一條net.MapNetworkDrive Path, source_path,False,xcopy,xcopyif err.number=0 thentxtfile.write(- 映射成功! )- 執(zhí)行拷貝source_file=path&barcodeprinter.mdberr.clearOn Error Resume Next 出錯(cuò)不顯示,執(zhí)行下一條fsofile.copyfile source_file,target_filen

38、et.RemoveNetworkDrive Path,True - 取消映射elsetxtfile.write(- 映射失敗! )end if End IfIf Err.Number0 Thentxtfile.writeline(- .MDB copy 失敗! )elsetxtfile.writeline(- .MDB copy 成功! )end ifset fso=nothingset fsofile=nothingset net=nothingend sub*= MDB TO SQLSERVER實(shí)時(shí)同步過(guò)程=sub MDBTOSQL(database,textfile1,ip)Dim Pa

39、th,fso,fsofile,netnum=right(ip,2)db=QJCF&num&_BARCODEPRINTERdb=trim(database)Err.clearon error resume nextconn1 = PROVIDER=SQLOLEDB;DATA SOURCE=local;UID=sa;PWD=sa;DATABASE=+dbset rs = createobject(adodb.recordset)- insert arrange 插入操作 -sql=insert into &db&.dbo.arrangesql=sql+(id,planno,arrangeid,barrangedate,pr

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論