在Oracle下創(chuàng)建database link兩種方法 |
發(fā)布時(shí)間: 2012/8/14 18:00:50 |
物理上存放于網(wǎng)絡(luò)的多個(gè)Oracle數(shù)據(jù)庫,邏輯上可以看成一個(gè)單一的大型數(shù)據(jù)庫,用戶可以通過網(wǎng)絡(luò)對(duì)異地?cái)?shù)據(jù)庫中的數(shù)據(jù)進(jìn)行存取,而服務(wù)器之間的協(xié)同處理對(duì)于工作站用戶及應(yīng)用程序而言是完全透明的,開發(fā)人員無需關(guān)心網(wǎng)絡(luò)的鏈接細(xì)節(jié)、數(shù)據(jù)在網(wǎng)絡(luò)節(jié)點(diǎn)中的具體分布情況和服務(wù)器間的協(xié)調(diào)工作過程。 數(shù)據(jù)庫全局名稱可以用以下命令查出: SELECT * FROM GLOBAL_NAME; 修改可以用以下語句來修改參數(shù)值: ALTER SYSTEM SET GLOBAL_NAME=TRUE/FALSE; <1>、當(dāng)數(shù)據(jù)庫參數(shù)global_name=false時(shí),就不要求數(shù)據(jù)庫鏈接名稱跟遠(yuǎn)端數(shù)據(jù)庫名稱一樣。 Oracle數(shù)據(jù)庫之間進(jìn)行連接通訊。 CONNECT TO username IDENTIFIED BY password USING ‘connectstring’ 其中: 注意:創(chuàng)建數(shù)據(jù)庫鏈接的帳號(hào)必須有CREATE DATABASE LINK或CREATE PUBLIC DATABASE LINK的系統(tǒng)權(quán)限,用來登錄到遠(yuǎn)程數(shù)據(jù)庫的帳號(hào)必須有CREATE SESSION權(quán)限。這兩種權(quán)限都包含在CONNECT角色中(CREATE PUBLIC DATABASE LINK權(quán)限在DBA中)。 一個(gè)公用數(shù)據(jù)庫鏈接對(duì)于數(shù)據(jù)庫中的所有用戶都是可用的,而一個(gè)私有鏈接僅對(duì)創(chuàng)建它的用戶可用。由一個(gè)用戶給另外一個(gè)用戶授權(quán)私有數(shù)據(jù)庫鏈接是不可能的,一個(gè)數(shù)據(jù)庫鏈接要么是公用的,要么是私有的。 創(chuàng)建數(shù)據(jù)庫鏈接時(shí),還可以使用缺省登錄方式,即不指定遠(yuǎn)程數(shù)據(jù)庫的用戶名和密碼: create public database link zrhs_link using ‘zrhs’; 在不指定用戶名和口令的情況下,Oracle使用當(dāng)前的用戶名和口令登錄到遠(yuǎn)程數(shù)據(jù)庫。 USING后面指定的是鏈接字符串,也就是遠(yuǎn)程數(shù)據(jù)庫的網(wǎng)絡(luò)服務(wù)名,這個(gè)服務(wù)名保存在TNSNAMES.ORA文件中,在該文件中定義了協(xié)議、主機(jī)名、端口和數(shù)據(jù)庫名。 刪除數(shù)據(jù)庫鏈接的語句是: DROP [PUBLIC] DATABASE LINK zrhs_link 數(shù)據(jù)庫鏈接的引用 一般情況下引用數(shù)據(jù)庫鏈接,可以直接將其放到調(diào)用的表名或視圖名稱后面,中間使用一個(gè) @ 作為分割符: SELECT * FROM worker@zrhs_link ; 對(duì)于經(jīng)常使用的數(shù)據(jù)庫鏈接,可以建立一個(gè)本地的同義詞,方便使用: CREATE SYNONYM worker_syn FOR worker@zrhs_link ; 還可以建立一個(gè)本地的遠(yuǎn)程視圖,方便使用: CREATE VIEW worker AS SELECT * FROM worker@zrhs_link where… ; 現(xiàn)在本視圖可與本地?cái)?shù)據(jù)庫中的任何其它視圖一樣對(duì)待,也可以授權(quán)給其它用戶,訪問此視圖,但該用戶必須有訪問數(shù)據(jù)庫鏈接的權(quán)限。 對(duì)于另外一種情況,所要訪問的表不在數(shù)據(jù)庫鏈接中指定的遠(yuǎn)程帳戶下,但該帳戶有訪問該表的權(quán)限,那么我們?cè)诒砻耙由显摫淼挠脩裘?/p> SELECT * FROM camel.worker@zrhs_link ; <2>、當(dāng)數(shù)據(jù)庫參數(shù)global_name=true時(shí),那就要求數(shù)據(jù)庫鏈接名稱跟遠(yuǎn)端數(shù)據(jù)庫名稱一樣 SELECT * FROM GLOBAL_NAME; atabase link(dblink)--數(shù)據(jù)庫鏈路 1)dblink名必須與遠(yuǎn)程數(shù)據(jù)庫的全局?jǐn)?shù)據(jù)庫名(global_name)相同; 查看所有的數(shù)據(jù)庫鏈接,進(jìn)入系統(tǒng)管理員SQL>操作符下,運(yùn)行命令: SQL>select owner,object_name from dba_objects where object_type='DATABASE LINK';
實(shí)際應(yīng)用舉例
Oracle 數(shù)據(jù)庫連接就像你在程序中建立一個(gè)到數(shù)據(jù)庫的連接一樣。 如果數(shù)據(jù)庫不在本地主機(jī),必須在$Oracle_HOME/network/admin/tnsnames.ora中配置相應(yīng)的tns,然后程序才能通過配置好的tns訪問數(shù)據(jù)庫,但是java通過thin方式訪問oracle例外,可以采用在本地配置好的tns別名,也可以采用tns全解析名,采用別名等號(hào)后的全描述符;如下: TESTCZ = 舉例。 現(xiàn)在有兩個(gè)數(shù)據(jù)庫 adb,用戶名和密碼分別是adb/adb,在本地主機(jī)配置的tns名字是tns_a,所在主機(jī)a; bdb,用戶名和密碼分別是bdb/bdb,在本地主機(jī)配置的tns名字是tns_b,所在主機(jī)b; 現(xiàn)在需要在adb上面建一個(gè)連接到bdb數(shù)據(jù)庫的dblink; 方法1: 在a主機(jī)上編輯tnsnames.ora文件配置bdb數(shù)據(jù)庫的tns別名tns_b,如下: tns_b = 然后創(chuàng)建數(shù)據(jù)庫連接,如下: create database link connect to bdb identified by identified by bdb using 'tns_b'; 方法2: 如果沒有權(quán)限修改tnsnames.ora,那么就沒有辦法建立到adb數(shù)據(jù)庫的tns別名,那么就只能采用在創(chuàng)建dblink的時(shí)候,全寫解析符號(hào)。創(chuàng)建dblink的方法如下: create database link connect to bdb identified by identified by bdb using '(DESCRIPTION = 創(chuàng)建好tns別名之后,可以采用sqlplus username/password@tnsname來測(cè)試創(chuàng)建的tns別名是否正確。 我在生產(chǎn)系統(tǒng)中創(chuàng)建的一個(gè)dblink示例: create database link NEW_DBLINK 本文出自:億恩科技【mszdt.com】 服務(wù)器租用/服務(wù)器托管中國五強(qiáng)!虛擬主機(jī)域名注冊(cè)頂級(jí)提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] |