劉繼敏
摘要:本文以某個(gè)商品業(yè)務(wù)數(shù)據(jù)庫(kù)和驗(yàn)證平臺(tái)數(shù)據(jù)庫(kù)的分布式應(yīng)用為例,介紹Oracle分布式數(shù)據(jù)庫(kù)如何通過(guò)編寫(xiě)數(shù)據(jù)庫(kù)后臺(tái)運(yùn)行的腳本來(lái)實(shí)現(xiàn)同構(gòu)和異構(gòu)數(shù)據(jù)庫(kù)之間的數(shù)據(jù)交換。
關(guān)鍵詞:分布式數(shù)據(jù)庫(kù);ORACLE;數(shù)據(jù)驗(yàn)證平臺(tái);同構(gòu)分布式數(shù)據(jù)庫(kù);異構(gòu)分布式數(shù)據(jù)庫(kù)
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9416(2017)11-0073-02
1 分布式數(shù)據(jù)庫(kù)連接的概念
ORACLE支持同構(gòu)或異構(gòu)的分布式數(shù)據(jù)庫(kù)環(huán)境。ORACLE允許應(yīng)用程序連接到一個(gè)本地?cái)?shù)據(jù)庫(kù)后,可以同時(shí)訪問(wèn)本地和多個(gè)遠(yuǎn)程數(shù)據(jù)庫(kù)中的數(shù)據(jù),這個(gè)本地?cái)?shù)據(jù)庫(kù)和多個(gè)遠(yuǎn)程數(shù)據(jù)庫(kù)則構(gòu)成了分布式數(shù)據(jù)庫(kù)環(huán)境。分布式數(shù)據(jù)庫(kù)連接DBLINK是分布式數(shù)據(jù)庫(kù)環(huán)境的核心概念,它指代兩個(gè)物理數(shù)據(jù)庫(kù)之間的連接,即分布式數(shù)據(jù)庫(kù)環(huán)境中本地?cái)?shù)據(jù)庫(kù)與遠(yuǎn)程數(shù)據(jù)庫(kù)之間的連接。在建立完成本地?cái)?shù)據(jù)庫(kù)到遠(yuǎn)程數(shù)據(jù)庫(kù)之間的DBLINK后,應(yīng)用程序可以透明地訪問(wèn)遠(yuǎn)程數(shù)據(jù)庫(kù)中的表數(shù)據(jù),無(wú)需關(guān)心本地?cái)?shù)據(jù)庫(kù)與遠(yuǎn)程數(shù)據(jù)庫(kù)在物理上是如何連接的。
同構(gòu)的分布式數(shù)據(jù)庫(kù)環(huán)境是指所有的數(shù)據(jù)庫(kù)都是ORACLE數(shù)據(jù)庫(kù),而異構(gòu)的分布式環(huán)境則是指至少有一個(gè)數(shù)據(jù)庫(kù)為非ORACLE數(shù)據(jù)庫(kù)。對(duì)于同構(gòu)環(huán)境來(lái)說(shuō),可以簡(jiǎn)單地建立ORACLE數(shù)據(jù)庫(kù)到ORACLE數(shù)據(jù)庫(kù)的DBLINK即可實(shí)現(xiàn)。對(duì)于異構(gòu)環(huán)境來(lái)說(shuō),ORACLE使用透明網(wǎng)關(guān)組件來(lái)實(shí)現(xiàn)對(duì)非ORALCE數(shù)據(jù)庫(kù)的訪問(wèn)。透明網(wǎng)關(guān)是一個(gè)代理程序Agent(通過(guò)ODBC/OLEDB驅(qū)動(dòng)),通過(guò)它來(lái)連接到非ORACLE數(shù)據(jù)庫(kù),同時(shí)創(chuàng)建一個(gè)ORACLE實(shí)例。ORACLE數(shù)據(jù)庫(kù)通過(guò)DBLINK連接到透明網(wǎng)關(guān)創(chuàng)建的ORACLE實(shí)例,該實(shí)例通過(guò)代理程序Agent連接到非ORACLE數(shù)據(jù)庫(kù),這樣就完成了從ORACLE到非ORACLE數(shù)據(jù)庫(kù)的連接。
2 數(shù)據(jù)驗(yàn)證平臺(tái)數(shù)據(jù)庫(kù)系統(tǒng)說(shuō)明
數(shù)據(jù)驗(yàn)證平臺(tái)的開(kāi)發(fā)目是為了實(shí)現(xiàn)監(jiān)督部門管理的企業(yè)相關(guān)認(rèn)證信息與總局主干系統(tǒng)的及時(shí)數(shù)據(jù)交換。數(shù)據(jù)驗(yàn)證平臺(tái)作為一個(gè)中間數(shù)據(jù)提取和轉(zhuǎn)換平臺(tái),可以避免業(yè)務(wù)系統(tǒng)數(shù)據(jù)與總局?jǐn)?shù)據(jù)之間的直接交換,屏蔽雙方數(shù)據(jù)交換中的格式等問(wèn)題,及時(shí)了解對(duì)接雙方數(shù)據(jù)發(fā)送及接收的情況,保障相關(guān)業(yè)務(wù)系統(tǒng)與主干系統(tǒng)接口的穩(wěn)定運(yùn)行。
數(shù)據(jù)驗(yàn)證平臺(tái)是完全以O(shè)RACLE數(shù)據(jù)庫(kù)為中心進(jìn)行架構(gòu)設(shè)計(jì)的,通過(guò)編寫(xiě)數(shù)據(jù)庫(kù)后臺(tái)運(yùn)行的PL/SQL腳本來(lái)實(shí)現(xiàn)數(shù)據(jù)接收、數(shù)據(jù)準(zhǔn)備、數(shù)據(jù)打包和數(shù)據(jù)發(fā)送功能。數(shù)據(jù)驗(yàn)證平臺(tái)數(shù)據(jù)庫(kù)需要能夠直接連接到多個(gè)業(yè)務(wù)系統(tǒng)的數(shù)據(jù)庫(kù)來(lái)讀取證書(shū)和產(chǎn)品數(shù)據(jù)。數(shù)據(jù)驗(yàn)證平臺(tái)數(shù)據(jù)庫(kù)共計(jì)要連接4個(gè)ORACLE數(shù)據(jù)庫(kù)和2個(gè)DB2數(shù)據(jù)庫(kù)。
3 數(shù)據(jù)驗(yàn)證平臺(tái)數(shù)據(jù)庫(kù)的設(shè)計(jì)方案
3.1 創(chuàng)建證書(shū)歷史變更表和產(chǎn)品歷史變更表
對(duì)于每一個(gè)業(yè)務(wù)系統(tǒng),在業(yè)務(wù)系統(tǒng)證書(shū)表所屬的數(shù)據(jù)庫(kù)用戶下,創(chuàng)建數(shù)據(jù)驗(yàn)證平臺(tái)需要訪問(wèn)的證書(shū)歷史變更表和產(chǎn)品歷史變更表。無(wú)論業(yè)務(wù)系統(tǒng)數(shù)據(jù)庫(kù)是ORACLE還是DB2,分別有對(duì)應(yīng)的證書(shū)變更歷史表和產(chǎn)品歷史變更表的建表腳本。在業(yè)務(wù)系統(tǒng)中創(chuàng)建觸發(fā)器,無(wú)論是簽發(fā)新證書(shū)(insert操作)還是變更證書(shū)(update操作),該觸發(fā)器能夠?qū)⒆钚伦C書(shū)和產(chǎn)品數(shù)據(jù)插入到證書(shū)歷史變更表和產(chǎn)品歷史變更表中。
3.2 創(chuàng)建ECIQINTF用戶
對(duì)于每一個(gè)業(yè)務(wù)系統(tǒng)數(shù)據(jù)庫(kù),都要?jiǎng)?chuàng)建一個(gè)ECIQINTF數(shù)據(jù)庫(kù)用戶,該用戶用于建立從數(shù)據(jù)驗(yàn)證平臺(tái)數(shù)據(jù)庫(kù)到業(yè)務(wù)系統(tǒng)數(shù)據(jù)庫(kù)的分布式數(shù)據(jù)庫(kù)連接,數(shù)據(jù)驗(yàn)證平臺(tái)并不使用業(yè)務(wù)系統(tǒng)原有的數(shù)據(jù)庫(kù)用戶。為什么不使用數(shù)據(jù)庫(kù)原有的用戶,而是單獨(dú)創(chuàng)建一個(gè)用戶和相關(guān)表來(lái)讀取業(yè)務(wù)系統(tǒng)的數(shù)據(jù)呢?其主要目的就在于要進(jìn)行徹底隔離,從業(yè)務(wù)系統(tǒng)的數(shù)據(jù)庫(kù)用戶,到表名稱、表結(jié)構(gòu)、字段名稱、字段數(shù)據(jù)類型都要與業(yè)務(wù)系統(tǒng)的原有內(nèi)容進(jìn)行隔離。這樣可以保證即使業(yè)務(wù)系統(tǒng)的內(nèi)容(用戶、表名稱、表結(jié)構(gòu)、字段名稱、字段數(shù)據(jù)類型)發(fā)生變化,但并不會(huì)影響用戶ECIQINTF的內(nèi)容。
在業(yè)務(wù)系統(tǒng)數(shù)據(jù)庫(kù)中執(zhí)行如下操作,以出口系統(tǒng)數(shù)據(jù)庫(kù)為例。
(1)在出口系統(tǒng)數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)針對(duì)平臺(tái)系統(tǒng)數(shù)據(jù)庫(kù)的用戶ECIQINTF,密碼也為ECIQINTF。
CREATE USER ECIQINTF IDENTIFIED BY ECIQINTF;
(2)給該用戶分配連接和使用資源的權(quán)限;
GRANT CONNECT,RESOURCE TO ECIQINTF。
(3)授予證書(shū)歷史變更表和產(chǎn)品歷史變更表的SELECT權(quán)限給ECIQINTF用戶,使ECIQINTF用戶能夠查詢變更表數(shù)據(jù)。EFPT為當(dāng)前出口系統(tǒng)數(shù)據(jù)庫(kù)中的用戶,把該用戶所擁有的證書(shū)變更歷史表ECIQ_INTF_CERT_CHANGE_HIS中的查看權(quán)限賦予給ECIQINTF;同理,把EFPT用戶的產(chǎn)品變化歷史表ECIQ_INTF_PROD_CHANGE_HIS的查看權(quán)限也賦予給用戶ECIQINTF。
GRANT SELECT ON EFPE.ECIQ_INTF_CERT_CHANGE_HIS TO ECIQINTF;
GRANT SELECT ON EFPE.ECIQ_INTF_PROD_CHANGE_HIS TO ECIQINTF;
(4)分配權(quán)限后,此時(shí)ECIQINTF可以使用如下SQL語(yǔ)句訪問(wèn)EFPE下的變更表。
SELECT * FROM EFPE.ECIQ_INTF_CERT_CHANGE_HIS;
(5)創(chuàng)建同義詞,將用戶EFPE 下的表ECIQ_INTF_CERT_CHANGE_HIS 映射到ECIQINTF下的表ECIQ_INTF_CERT_CHANGE_HIS_05;同理,也對(duì)用戶EFPE 下的表ECIQ_INTF_PROD_CHANGE_HIS 映射到ECIQINTF下的表ECIQ_INTF_PROD_CHANGE_HIS_05endprint
CREATE SYNONYM ECIQINTF.ECIQ_INTF_CERT_CHANGE_HIS_05 FOR EFPE.ECIQ_INTF_CERT_CHANGE_HIS;
CREATE SYNONYM ECIQINTF.ECIQ_INTF_PROD_CHANGE_HIS_05 FOR EFPE.ECIQ_INTF_PROD_CHANGE_HIS;
此時(shí),ECIQINTF可以使用如下SQL語(yǔ)句訪問(wèn)變更表,無(wú)需指定EFPE,簡(jiǎn)化了數(shù)據(jù)表的訪問(wèn):
SELECT * FROM ECIQ_INTF_CERT_CHANGE_HIS_05;
3.3 創(chuàng)建同構(gòu)分布式數(shù)據(jù)庫(kù)連接
在數(shù)據(jù)驗(yàn)證平臺(tái)數(shù)據(jù)庫(kù),創(chuàng)建從數(shù)據(jù)驗(yàn)證平臺(tái)數(shù)據(jù)庫(kù)到出口系統(tǒng)數(shù)據(jù)庫(kù)的分布式數(shù)據(jù)庫(kù)連接INTF_DB_05,鏈接的用戶名為ECIQINTF。業(yè)務(wù)系統(tǒng)數(shù)據(jù)庫(kù)的服務(wù)名稱為EFPE。
CREATE DATABASE LINK INTF_DB_05
CONNECT TO ECIQINTF IDENTIFIED BY "XXXXX" USING '(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.2)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = EFPE) ) )';
在數(shù)據(jù)驗(yàn)證平臺(tái)可以使用如下SQL語(yǔ)句訪問(wèn)變更表:
SELECT * FROM ECIQ_INTF_CERT_CHANGE_HIS_05@INTF_DB_05;
在數(shù)據(jù)驗(yàn)證平臺(tái)數(shù)據(jù)庫(kù),創(chuàng)建同義詞,進(jìn)一步簡(jiǎn)化歷史變更的數(shù)據(jù)訪問(wèn)。用當(dāng)前用戶INTF下的表ECIQ_INTF_CERT_CHANGE_HIS_05來(lái)映射業(yè)務(wù)系統(tǒng)數(shù)據(jù)庫(kù)INTF_DB_05下ECIQ_INTF_CERT_CHANGE_HIS_05表。同樣對(duì)產(chǎn)品表也做同樣的映射關(guān)聯(lián)。
CREATE SYNONYM INTF.ECIQ_INTF_CERT_CHANGE_HIS_05 FOR ECIQ_INTF_CERT_CHANGE_HIS_05@INTF_DB_05;
數(shù)據(jù)驗(yàn)證平臺(tái)可以使用如下SQL語(yǔ)句訪問(wèn)變更表
SELECT * FROM ECIQ_INTF_CERT_CHANGE_HIS_05;
3.4 創(chuàng)建異構(gòu)分布式數(shù)據(jù)庫(kù)連接
到目前為止,對(duì)于使用ORACLE數(shù)據(jù)庫(kù)的業(yè)務(wù)系統(tǒng)來(lái)說(shuō),數(shù)據(jù)驗(yàn)證平臺(tái)使用簡(jiǎn)單的SQL語(yǔ)句能夠?qū)崿F(xiàn)對(duì)業(yè)務(wù)系統(tǒng)的歷史變更表的訪問(wèn)。但對(duì)于使用DB2數(shù)據(jù)庫(kù)的業(yè)務(wù)系統(tǒng)來(lái)說(shuō),需要在一臺(tái)單獨(dú)服務(wù)器(也可以是通關(guān)驗(yàn)證平臺(tái)數(shù)據(jù)庫(kù)服務(wù)器)配置操作系統(tǒng)的ODBC數(shù)據(jù)源連接DB2數(shù)據(jù)庫(kù),并測(cè)試連接通過(guò),圖1。
在該服務(wù)器上安裝Oracle Database Gateway for ODBC/OLE DB,修改配置文件指向ODBC數(shù)據(jù)源名稱。
HS_FDS_TIMESTAMP_MAPPING=TIMESTAMP
HS_FDS_CONNECT_INFO=XXX(數(shù)據(jù)源名稱)
HS_FDS_TRACE_LEVEL=off
啟動(dòng)該服務(wù)器上的ORACLES實(shí)例的監(jiān)聽(tīng)程序,等待數(shù)據(jù)驗(yàn)證平臺(tái)數(shù)據(jù)庫(kù)連接。在數(shù)據(jù)驗(yàn)證平臺(tái)上,與剛才連接業(yè)務(wù)系統(tǒng)ORAC LE數(shù)據(jù)庫(kù)一樣,創(chuàng)建到該服務(wù)器ORACLE實(shí)例的分布式數(shù)據(jù)庫(kù)連接。這樣,數(shù)據(jù)驗(yàn)證平臺(tái)就建立起與DB2數(shù)據(jù)庫(kù)的分布式數(shù)據(jù)庫(kù)連接,可以訪問(wèn)DB2數(shù)據(jù)庫(kù)中證書(shū)和產(chǎn)品數(shù)據(jù)。
4 結(jié)語(yǔ)
通過(guò)以上的數(shù)據(jù)庫(kù)腳本,可以實(shí)現(xiàn)通關(guān)驗(yàn)證平臺(tái)下面多個(gè)數(shù)據(jù)庫(kù)的分布式連接,從而實(shí)現(xiàn)數(shù)據(jù)的有效傳遞。
Abstract:In this paper, a distributed application business database and verification platform database as an example, introduced the Oracle distributed database how to write database scripts run to achieve exchange between homogeneous and heterogeneous database data.
Key Words:distributed database;ORACLE;data authentication platform; homogeneous distributed database;heterogeneous distributed databaseendprint