很多客戶有屬於自己的數據庫服務器,來管理自己的一些重要數據。那如果我們的項目中需要用到這些數據,而客戶又不允許把這些數據插入到我們的項目數據庫服務器時怎麼辦?其中的一個解決辦法就是在項目數據庫服務器上創建基於客戶關鍵數據服務器的某些表或是視圖的同義詞。這裡來介紹一下本人在項目中做的基於遠程服務器視圖如何對Oracle創建同義詞的過程。
一、創建database link。兩台不同的數據庫服務器,從項目數據庫服務器的一個用戶讀取客戶關鍵數據的數據庫服務器下的某個用戶的數據,這個時候可以使用dblink。假設客戶提供的數據庫服務器信息如下:
而創建database link的語法為:
這時,先要配置本地服務。打開TNSNAMES.ORA Network Configuration File: D:\ORA\NETWORK\ADMIN\tnsnames.ora文件(根據自己的機器的情況而定),將
LIMSTQ =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.107.6.15)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = VGSM)
)
)
添加到此文件的後面(注意LIMSTQ前面不要留空格)。
然後,再創建dblink。而數據庫參數global_name=true時,就要要求數據庫鏈接名稱跟遠端客戶數據庫名稱一樣。我們必須先要確定一下。查看此參數的語句如下:如果是ture,記得創建的dblink名和遠程端的數據庫一樣,很幸運,我用的數據庫參數global_name的value值是false。
數據庫全局名稱可以通過以下命令查出:查詢遠端數據庫裡的表:這時,我就創建了自己的databae link:create database link limstq.us.Oracle.com connect to jlgl identifIEd by jlgl using 'limstq';
二、Oracle創建同義詞,很簡單。Oracle建立同義詞的語法如下:
所建立的同義詞語法是:create synonym jl_glJS_tb_lims for [email protected];
三、Oracle創建同義詞成功後,就可以在項目數據庫服務器上通過select jl_gljs_tb_lims來進行客戶的關鍵數據的查找操作了。但如果可能的話,最好再建立一個視圖,形式如下:create or replace vIEw jl_gljs_limstq_vw as select * from jl_glJS_tb_lims;這樣,基於遠程服務器視圖的Oracle創建同義詞過程就完成了。
可能遇到的問題:如果你在Oracle創建同義詞過程中發現了像如下的不能連接的錯誤的話,一定會很郁悶吧。ORA-12154: TNS: 無法解析指定的連接標識符。而你通過查看ora文件,發現自己已經配了TNS的。這也是令我頭疼的問題。你一定要看清楚了,一定要把本地服務創建到項目數據庫服務器的主服務器的ora文件中,而不是自己的客戶端的ora文件中。你可能正在使用pl/sql或是sql plus等工具,但是你所用的機器是客戶端,而不是真正的項目主服務器(除非在自己的機器上創建的是Oracle)。只有找到主服務器ora文件,將本地服務配置到裡面,才算ok了。此時,你就可以通過在自己的項目中輕松的通過查找同義詞或新建的視圖來訪問客戶的數據庫服務器中的一些關鍵數據了。