物理上存放于網(wǎng)絡(luò)的多個ORACLE數(shù)據(jù)庫,邏輯上可以看成一個單一的大型數(shù)據(jù) 庫,用戶可以通過網(wǎng)絡(luò)對異地?cái)?shù)據(jù)庫中的數(shù)據(jù)進(jìn)行存取,而服務(wù)器之間的協(xié)同處理對于工作站用戶及應(yīng)用程序而言是完全透明的,開發(fā)人員無需關(guān)心網(wǎng)絡(luò)的鏈接細(xì) 節(jié)、數(shù)據(jù)在網(wǎng)絡(luò)節(jié)點(diǎn)中的具體分布情況和服務(wù)器間的協(xié)調(diào)工作過程。
數(shù)據(jù)庫之間的鏈接建立在DATABASE LINK上。要創(chuàng)建一個DATABASE LINK,必須首先在建立鏈接的數(shù)據(jù)庫上設(shè)置鏈接字符串,即配置一個遠(yuǎn)程數(shù)據(jù)庫的本地網(wǎng)絡(luò)服務(wù)名。
鏈接字符串的配置參見《客戶端連接服務(wù)器》一節(jié)。
數(shù)據(jù)庫全局名稱可以用以下命令查出:
SELECT * FROM GLOBAL_NAME;
修改可以用以下語句來修改參數(shù)值:
ALTER SYSTEM SET GLOBAL_NAME=TRUE/FALSE;
<1>、當(dāng)數(shù)據(jù)庫參數(shù)global_name=false時,就不要求數(shù)據(jù)庫鏈接名稱跟遠(yuǎn)端數(shù)據(jù)庫名稱一樣。
oracle數(shù)據(jù)庫之間進(jìn)行連接通訊。
創(chuàng)建數(shù)據(jù)庫鏈接的語法如下:
CREATE [PUBLIC] DATABASE LINK link
CONNECT TO username IDENTIFIED BY password
USING ‘connectstring’
其中:
--demona為用net8 easy config創(chuàng)建的連接字符串
目的方數(shù)據(jù)庫的init.ora文件中的global_names設(shè)為false
重新啟動數(shù)據(jù)庫設(shè)置才能生效
或者用sys用戶執(zhí)行
注意:創(chuàng)建數(shù)據(jù)庫鏈接的帳號必須有CREATE DATABASE LINK或CREATE PUBLIC DATABASE LINK的系統(tǒng)權(quán)限,用來登錄到遠(yuǎn)程數(shù)據(jù)庫的帳號必須有CREATE SESSION權(quán)限。這兩種權(quán)限都包含在CONNECT角色中(CREATE PUBLIC DATABASE LINK權(quán)限在DBA中)。
一個公用數(shù)據(jù)庫鏈接對于數(shù)據(jù)庫中的所有用戶都是可用的,而一個私有鏈接僅對創(chuàng)建它的用戶可用。由一個用戶給另外一個用戶授權(quán)私有數(shù)據(jù)庫鏈接是不可能的,一個數(shù)據(jù)庫鏈接要么是公用的,要么是私有的。
創(chuàng)建數(shù)據(jù)庫鏈接時,還可以使用缺省登錄方式,即不指定遠(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ù)名,這個服務(wù)名保存在TNSNAMES.ORA文件中,在該文件中定義了協(xié)議、主機(jī)名、端口和數(shù)據(jù)庫名。
刪除數(shù)據(jù)庫鏈接的語句是:
DROP [PUBLIC] DATABASE LINK zrhs_link
數(shù)據(jù)庫鏈接的引用
一般情況下引用數(shù)據(jù)庫鏈接,可以直接將其放到調(diào)用的表名或視圖名稱后面,中間使用一個 @ 作為分割符:
SELECT * FROM worker@zrhs_link ;
對于經(jīng)常使用的數(shù)據(jù)庫鏈接,可以建立一個本地的同義詞,方便使用:
CREATE SYNONYM worker_syn FOR worker@zrhs_link ;
還可以建立一個本地的遠(yuǎn)程視圖,方便使用:
CREATE VIEW worker AS SELECT * FROM worker@zrhs_link where… ;
現(xiàn)在本視圖可與本地?cái)?shù)據(jù)庫中的任何其它視圖一樣對待,也可以授權(quán)給其它用戶,訪問此視圖,但該用戶必須有訪問數(shù)據(jù)庫鏈接的權(quán)限。
對于另外一種情況,所要訪問的表不在數(shù)據(jù)庫鏈接中指定的遠(yuǎn)程帳戶下,但該帳戶有訪問該表的權(quán)限,那么我們在表名前要加上該表的用戶名:
SELECT * FROM camel.worker@zrhs_link ;
<2>、當(dāng)數(shù)據(jù)庫參數(shù)global_name=true時,那就要求數(shù)據(jù)庫鏈接名稱跟遠(yuǎn)端數(shù)據(jù)庫名稱一樣
數(shù)據(jù)庫全局名稱可以用以下命令查出
SELECT * FROM GLOBAL_NAME;
atabase link(dblink)--數(shù)據(jù)庫鏈路
創(chuàng)建dblink的語法:
sql>create database link 數(shù)據(jù)庫鏈路名
connect to 用戶名 identified by 口令
using '主機(jī)字符串名';
如:
sql>create database link ora9i.us.oracle.com ### 這里的us.oracle.com為oracle默認(rèn)域名 ###
connect to scott identified by tiger
using 'sun';
1)dblink名必須與遠(yuǎn)程數(shù)據(jù)庫的全局?jǐn)?shù)據(jù)庫名(global_name)相同;
2)用戶名,口令為遠(yuǎn)程數(shù)據(jù)庫用戶名,口令;
3)主機(jī)字符串為本機(jī)tnsnames.ora中定義的串;
4)兩個同名的數(shù)據(jù)庫間不得建立dblink;
然后,你就可以通過dblink訪問遠(yuǎn)程數(shù)據(jù)庫了。
如:
sql>select * from 表名@ora9i.us.oracle.com;
還可以建立快照(snapshot)通過dblink實(shí)現(xiàn)遠(yuǎn)程數(shù)據(jù)自動傳輸。
查看所有的數(shù)據(jù)庫鏈接,進(jìn)入系統(tǒng)管理員SQL>操作符下,運(yùn)行命令:
SQL>select owner,object_name from dba_objects where object_type='DATABASE LINK';