企業核心應用系統數據庫逐步向Oracle 12c遷移過程中,對原有應用系統數據庫通過Oracle 12c提供的PDB可插拔數據方式進行集中。
但部分部署于Oracle 9i的應用系統數據庫因為應用系統需求無法進行遷移。詢問甲骨文公司技術支持人員以及上網查閱官方文檔,得到表1所示的甲骨文公司提供的數據庫鏈路兼容表。
表中已明確告知,Oracle 12c不提供對Oracle 9i的數據庫鏈路訪問功能。項目方案測試近半,若該問題無法解決,將意味著整個數據庫遷移需重新制定方案并實施。
從表中可以發現,甲骨文公司提供的Oracle 11g數據庫產品具有數據庫鏈路共享向上向下兼容能力,我們決定使用創建中間庫的方式,來彌補Oracle 12c無法直接創建指向Oracle 9i的現實問題,系統略圖如圖1所示。

圖1 系統略圖
O r a c l e數據庫提供了netmgr管理命令,用于創建網絡服務名(Service Naming)。用戶需要分別在Oracle 12c上創建指向Oracle 11g,在 Oracle 11g上創建指向Oracle 9i的網絡服務名。圖2是在Oracle 11g上創建指向Oracle 9i的服務名圖示。
為了便于按名稱確定網絡服務名功能,我們將該服務名定義為targetora9i,用戶可根據實際情況輸入右側選項中的“Service Name”、“Host Name”選項。按照同樣方法,可以在Oracle 12c上創建指向Oracle 11g的名為“linkmiddle11G”的網絡服務名。

表1 數據鏈路兼容表
登錄 Oracle 11g,使用數據庫系統提供的dbca命令創建中間數據庫,數據庫名為:middle9i。之后通過如下命令創建與Oracle 9i數據庫相同用戶名,并進行賦權操作:
SQL>CREATE USER ati identified by ati123;
SQL>GRANT CONNECT,RES OURCE,CREATE DATABASE LINK TO ati;
使用新建用戶ati登錄數據庫,通過指向Oracle 9i的網絡服務名建立數據庫鏈路。命令內容如下:
SQL>CREATE DATABASE LINK link_targetora9i connect to ati identified by ati@123 using ‘targeto ra9i’;
用戶創建完成后,可以通過鏈路訪問遠程數據庫對象,命令內容如下:
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 創建服務名
如果無報錯并顯示行信息,則說明數據庫鏈路創建正常完成。
以下以創建同義詞“ZZ$CLRDBDIC”、“atis_18d_qs_car”、 視 圖“atis_dy_zdsy”為 例,使 用Oracle 11g上創建的用戶ati登錄數據庫,并執行如下命令:
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表,查看創建的同義詞及視圖的詳細信息進行確認核對。
這樣可以滿足用戶通過數據鏈路方式查詢以及共享部署于Oracle 9i的應用系統數據庫實時數據。具體創建過程與Oracle 11g中創建過程類似。
信息系統的升級和遷移一直是一個動態過程。一方面系統確實因為需求的更高要求,必須進行軟件或者架構的升級。
另一方面系統也因為各種存在的既有數據交互以及共享需求,需要很好的向下兼容性。
通過這種數據鏈路橋的方式,我們很好地解決了主數據庫升級到Oracle 12c帶來的系統數據庫數據鏈路共享數據的兼容性問題。