企業(yè)核心應(yīng)用系統(tǒng)數(shù)據(jù)庫逐步向Oracle 12c遷移過程中,對(duì)原有應(yīng)用系統(tǒng)數(shù)據(jù)庫通過Oracle 12c提供的PDB可插拔數(shù)據(jù)方式進(jìn)行集中。
但部分部署于Oracle 9i的應(yīng)用系統(tǒng)數(shù)據(jù)庫因?yàn)閼?yīng)用系統(tǒng)需求無法進(jìn)行遷移。詢問甲骨文公司技術(shù)支持人員以及上網(wǎng)查閱官方文檔,得到表1所示的甲骨文公司提供的數(shù)據(jù)庫鏈路兼容表。
表中已明確告知,Oracle 12c不提供對(duì)Oracle 9i的數(shù)據(jù)庫鏈路訪問功能。項(xiàng)目方案測試近半,若該問題無法解決,將意味著整個(gè)數(shù)據(jù)庫遷移需重新制定方案并實(shí)施。
從表中可以發(fā)現(xiàn),甲骨文公司提供的Oracle 11g數(shù)據(jù)庫產(chǎn)品具有數(shù)據(jù)庫鏈路共享向上向下兼容能力,我們決定使用創(chuàng)建中間庫的方式,來彌補(bǔ)Oracle 12c無法直接創(chuàng)建指向Oracle 9i的現(xiàn)實(shí)問題,系統(tǒng)略圖如圖1所示。
圖1 系統(tǒng)略圖
O r a c l e數(shù)據(jù)庫提供了netmgr管理命令,用于創(chuàng)建網(wǎng)絡(luò)服務(wù)名(Service Naming)。用戶需要分別在Oracle 12c上創(chuàng)建指向Oracle 11g,在 Oracle 11g上創(chuàng)建指向Oracle 9i的網(wǎng)絡(luò)服務(wù)名。圖2是在Oracle 11g上創(chuàng)建指向Oracle 9i的服務(wù)名圖示。
為了便于按名稱確定網(wǎng)絡(luò)服務(wù)名功能,我們將該服務(wù)名定義為targetora9i,用戶可根據(jù)實(shí)際情況輸入右側(cè)選項(xiàng)中的“Service Name”、“Host Name”選項(xiàng)。按照同樣方法,可以在Oracle 12c上創(chuàng)建指向Oracle 11g的名為“l(fā)inkmiddle11G”的網(wǎng)絡(luò)服務(wù)名。
表1 數(shù)據(jù)鏈路兼容表
登錄 Oracle 11g,使用數(shù)據(jù)庫系統(tǒng)提供的dbca命令創(chuàng)建中間數(shù)據(jù)庫,數(shù)據(jù)庫名為:middle9i。之后通過如下命令創(chuàng)建與Oracle 9i數(shù)據(jù)庫相同用戶名,并進(jìn)行賦權(quán)操作:
SQL>CREATE USER ati identified by ati123;
SQL>GRANT CONNECT,RES OURCE,CREATE DATABASE LINK TO ati;
使用新建用戶ati登錄數(shù)據(jù)庫,通過指向Oracle 9i的網(wǎng)絡(luò)服務(wù)名建立數(shù)據(jù)庫鏈路。命令內(nèi)容如下:
SQL>CREATE DATABASE LINK link_targetora9i connect to ati identified by ati@123 using ‘targeto ra9i’;
用戶創(chuàng)建完成后,可以通過鏈路訪問遠(yuǎn)程數(shù)據(jù)庫對(duì)象,命令內(nèi)容如下:
S Q L>s e l e c t*f r o m u s e r_o b j e c t s@l i n k_targetora9i;
圖2 創(chuàng)建服務(wù)名
如果無報(bào)錯(cuò)并顯示行信息,則說明數(shù)據(jù)庫鏈路創(chuàng)建正常完成。
以下以創(chuàng)建同義詞“ZZ$CLRDBDIC”、“atis_18d_qs_car”、 視 圖“atis_dy_zdsy”為 例,使 用Oracle 11g上創(chuàng)建的用戶ati登錄數(shù)據(jù)庫,并執(zhí)行如下命令:
SQL> CREATE SYNONYM Z Z$CLRDBDIC FOR ZZ$CLRDBDI C@LINK_TARGETORA9I;
SQL> CREATE SYNONYM a tis_18d_qs_car for ATIS_1 8D_QS_CAR@LINK_TARGETORA 9I;
SQL>CREATE VIEW atis_dy_zdsy AS SELECT*FROM AT IS_DY_ZDSY@LINK_TARGETOR A9I;
用戶可以通過查詢當(dāng)前用戶的USER_SYNONYM、USER_VIEWS表,查看創(chuàng)建的同義詞及視圖的詳細(xì)信息進(jìn)行確認(rèn)核對(duì)。
這樣可以滿足用戶通過數(shù)據(jù)鏈路方式查詢以及共享部署于Oracle 9i的應(yīng)用系統(tǒng)數(shù)據(jù)庫實(shí)時(shí)數(shù)據(jù)。具體創(chuàng)建過程與Oracle 11g中創(chuàng)建過程類似。
信息系統(tǒng)的升級(jí)和遷移一直是一個(gè)動(dòng)態(tài)過程。一方面系統(tǒng)確實(shí)因?yàn)樾枨蟮母咭?,必須進(jìn)行軟件或者架構(gòu)的升級(jí)。
另一方面系統(tǒng)也因?yàn)楦鞣N存在的既有數(shù)據(jù)交互以及共享需求,需要很好的向下兼容性。
通過這種數(shù)據(jù)鏈路橋的方式,我們很好地解決了主數(shù)據(jù)庫升級(jí)到Oracle 12c帶來的系統(tǒng)數(shù)據(jù)庫數(shù)據(jù)鏈路共享數(shù)據(jù)的兼容性問題。