企業(yè)核心應用系統(tǒng)數(shù)據(jù)庫逐步向Oracle 12c遷移過程中,對原有應用系統(tǒng)數(shù)據(jù)庫通過Oracle 12c提供的PDB可插拔數(shù)據(jù)方式進行集中。
但部分部署于Oracle 9i的應用系統(tǒng)數(shù)據(jù)庫因為應用系統(tǒng)需求無法進行遷移。詢問甲骨文公司技術(shù)支持人員以及上網(wǎng)查閱官方文檔,得到表1所示的甲骨文公司提供的數(shù)據(jù)庫鏈路兼容表。
表中已明確告知,Oracle 12c不提供對Oracle 9i的數(shù)據(jù)庫鏈路訪問功能。項目方案測試近半,若該問題無法解決,將意味著整個數(shù)據(jù)庫遷移需重新制定方案并實施。
從表中可以發(fā)現(xiàn),甲骨文公司提供的Oracle 11g數(shù)據(jù)庫產(chǎn)品具有數(shù)據(jù)庫鏈路共享向上向下兼容能力,我們決定使用創(chuàng)建中間庫的方式,來彌補Oracle 12c無法直接創(chuàng)建指向Oracle 9i的現(xiàn)實問題,系統(tǒng)略圖如圖1所示。
圖1 系統(tǒng)略圖
O r a c l e數(shù)據(jù)庫提供了netmgr管理命令,用于創(chuàng)建網(wǎng)絡服務名(Service Naming)。用戶需要分別在Oracle 12c上創(chuàng)建指向Oracle 11g,在 Oracle 11g上創(chuàng)建指向Oracle 9i的網(wǎng)絡服務名。圖2是在Oracle 11g上創(chuàng)建指向Oracle 9i的服務名圖示。
為了便于按名稱確定網(wǎng)絡服務名功能,我們將該服務名定義為targetora9i,用戶可根據(jù)實際情況輸入右側(cè)選項中的“Service Name”、“Host Name”選項。按照同樣方法,可以在Oracle 12c上創(chuàng)建指向Oracle 11g的名為“l(fā)inkmiddle11G”的網(wǎng)絡服務名。
表1 數(shù)據(jù)鏈路兼容表
登錄 Oracle 11g,使用數(shù)據(jù)庫系統(tǒng)提供的dbca命令創(chuàng)建中間數(shù)據(jù)庫,數(shù)據(jù)庫名為:middle9i。之后通過如下命令創(chuàng)建與Oracle 9i數(shù)據(jù)庫相同用戶名,并進行賦權(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)絡服務名建立數(shù)據(jù)庫鏈路。命令內(nèi)容如下:
SQL>CREATE DATABASE LINK link_targetora9i connect to ati identified by ati@123 using ‘targeto ra9i’;
用戶創(chuàng)建完成后,可以通過鏈路訪問遠程數(shù)據(jù)庫對象,命令內(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)建服務名
如果無報錯并顯示行信息,則說明數(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;
用戶可以通過查詢當前用戶的USER_SYNONYM、USER_VIEWS表,查看創(chuàng)建的同義詞及視圖的詳細信息進行確認核對。
這樣可以滿足用戶通過數(shù)據(jù)鏈路方式查詢以及共享部署于Oracle 9i的應用系統(tǒng)數(shù)據(jù)庫實時數(shù)據(jù)。具體創(chuàng)建過程與Oracle 11g中創(chuàng)建過程類似。
信息系統(tǒng)的升級和遷移一直是一個動態(tài)過程。一方面系統(tǒng)確實因為需求的更高要求,必須進行軟件或者架構(gòu)的升級。
另一方面系統(tǒng)也因為各種存在的既有數(shù)據(jù)交互以及共享需求,需要很好的向下兼容性。
通過這種數(shù)據(jù)鏈路橋的方式,我們很好地解決了主數(shù)據(jù)庫升級到Oracle 12c帶來的系統(tǒng)數(shù)據(jù)庫數(shù)據(jù)鏈路共享數(shù)據(jù)的兼容性問題。