ORACLE DBLINK

wuyuanyong發表於2010-07-03

兩臺不同的資料庫伺服器,從一臺資料庫伺服器的一個使用者讀取另一臺資料庫伺服器下的某個使用者的資料,這個時候可以使用dblink。
其實dblink和資料庫中的view差不多,建dblink的時候需要知道待讀取資料庫的ip地址,ssid以及資料庫使用者名稱和密碼。
建立可以採用兩種方式:
1、已經配置本地服務
create public database
link fwq12 connect to fzept
identified by neu using 'fjept'

Create DATABASE LINK 資料庫連結名CONNECT TO 使用者名稱 IDENTIFIED BY 密碼 USING ‘本地配置的資料的例項名’;
2、未配置本地服務
create database link linkfwq
connect to fzept identified by neu
using '(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.142.202.12)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = fjept)
)
)';
host=資料庫的ip地址,service_name=資料庫的ssid。
其實兩種方法配置dblink是差不多的,我個人感覺還是第二種方法比較好,這樣不受本地服務的影響。

資料庫連線字串可以用NET8 EASY CONFIG或者直接修改TNSNAMES.ORA裡定義.

資料庫引數global_name=true時要求資料庫連結名稱跟遠端資料庫名稱一樣

資料庫全域性名稱可以用以下命令查出
Select * FROM GLOBAL_NAME;

查詢遠端資料庫裡的表
Select …… FROM 表名@資料庫連結名;
查詢、刪除和插入資料和操作本地的資料庫是一樣的,只不過表名需要寫成“表名@dblink伺服器”而已。
附帶說下同義詞建立:

Create SYNONYM同義詞名FOR 表名;
Create SYNONYM同義詞名FOR 表名@資料庫連結名;

刪除dblink:Drop PUBLIC DATABASE LINK linkfwq。

如果建立全域性dblink,必須使用systm或sys使用者,在database前加public。

oracle dblink解決後臺卻出現鎖
建立是很簡單,但是在使用中後臺卻出現鎖,檢視這個鎖的方法可以去console中看到或者查詢資料庫。其實這個鎖倒
不是最讓人心煩的,而是每次使用dblink查詢的時候,均會與遠端資料庫建立一個連線,dblink應該不會自動釋放這個連線
,如果是大量使用dblink查詢,會造成web專案的連線數不夠,導致系統無法正常執行。


本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/xyjnzy/archive/2007/12/04/1915427.aspx

在oracle下如何建立database link全面總結

物理上存放於網路的多個ORACLE資料庫,邏輯上可以看成一個單一的大型資料庫,使用者可以透過網路對異地資料庫中的資料進行存取,而伺服器之間的協同處理對於工作站使用者及應用程式而言是完全透明的,開發人員無需關心網路的連結細節、資料在網路節點中的具體分佈情況和伺服器間的協調工作過程。

資料庫之間的連結建立在DATABASE LINK上。要建立一個DATABASE LINK,必須首先在建立連結的資料庫上設定連結字串,即配置一個遠端資料庫的本地網路服務名。

連結字串的配置參見《客戶端連線伺服器》一節。


資料庫全域性名稱可以用以下命令查出:

SELECT * FROM GLOBAL_NAME;

修改可以用以下語句來修改引數值:

ALTER SYSTEM SET GLOBAL_NAME=TRUE/FALSE;

<1>、當資料庫引數global_name=false時,就不要求資料庫連結名稱跟遠端資料庫名稱一樣。

oracle資料庫之間進行連線通訊。
建立資料庫連結的語法如下:
CREATE [PUBLIC] DATABASE LINK link

CONNECT TO username IDENTIFIED BY password

USING ‘connectstring’

其中:
--demona為用net8 easy config建立的連線字串
目的方資料庫的init.ora檔案中的global_names設為false
重新啟動資料庫設定才能生效
或者用sys使用者執行

注意:建立資料庫連結的帳號必須有CREATE DATABASE LINK或CREATE PUBLIC DATABASE LINK的系統許可權,用來登入到遠端資料庫的帳號必須有CREATE SESSION許可權。這兩種許可權都包含在CONNECT角色中(CREATE PUBLIC DATABASE LINK許可權在DBA中)。

一個公用資料庫連結對於資料庫中的所有使用者都是可用的,而一個私有連結僅對建立它的使用者可用。由一個使用者給另外一個使用者授權私有資料庫連結是不可能的,一個資料庫連結要麼是公用的,要麼是私有的。

建立資料庫連結時,還可以使用預設登入方式,即不指定遠端資料庫的使用者名稱和密碼:

create public database link zrhs_link

using ‘zrhs’;

在不指定使用者名稱和口令的情況下,ORACLE使用當前的使用者名稱和口令登入到遠端資料庫。

USING後面指定的是連結字串,也就是遠端資料庫的網路服務名,這個服務名儲存在TNSNAMES.ORA檔案中,在該檔案中定義了協議、主機名、埠和資料庫名。

(如果有兩臺資料庫伺服器db_A和db_B,db_A下使用者user_a需要用database link訪問到db_B下user_b的資料時,有如下步驟:1、首先使用者user_b,這個使用者必須要有select 許可權.2、在db_B上的tnsnames.ora中需要建立一個連線字串tnsname_BtoA,可以從db_B連線到db_A。3、在db_A上的tnsnames.ora中需要建立一個連線字串tnsname_AtoB,可以從db_A連線到db_B。4、然後在登陸到db_A上建立db link,格式如下: create database link link_AtoB_name connect to user_b identified by user_b的password using 'tnsname_AtoB'; link_AtoB_name必須是遠端資料庫的全域性名(SID), tnsname_AtoB就是到遠端的連線字串。5、測試是否能夠讀取資料。select * from 結果為: DUMMY X表示設定成功。)

刪除資料庫連結的語句是:

DROP [PUBLIC] DATABASE LINK zrhs_link

資料庫連結的引用

一般情況下引用資料庫連結,可以直接將其放到呼叫的表名或檢視名稱後面,中間使用一個 @ 作為分割符:

SELECT * FROM ;

對於經常使用的資料庫連結,可以建立一個本地的同義詞,方便使用:

CREATE SYNONYM worker_syn FOR ;

還可以建立一個本地的遠端檢視,方便使用:

CREATE VIEW worker AS SELECT * FROM where… ;

現在本檢視可與本地資料庫中的任何其它檢視一樣對待,也可以授權給其它使用者,訪問此檢視,但該使用者必須有訪問資料庫連結的許可權。

對於另外一種情況,所要訪問的表不在資料庫連結中指定的遠端帳戶下,但該帳戶有訪問該表的許可權,那麼我們在表名前要加上該表的使用者名稱:

SELECT * FROM ;

<2>、當資料庫引數global_name=true時,那就要求資料庫連結名稱跟遠端資料庫名稱一樣
資料庫全域性名稱可以用以下命令查出

SELECT * FROM GLOBAL_NAME;

atabase link(dblink)--資料庫鏈路
建立dblink的語法:
sql>create database link 資料庫鏈路名
connect to 使用者名稱 identified by 口令
using '主機字串名';
如:
sql>create database link ora9i.us.oracle.com ### 這裡的us.oracle.com為oracle預設域名 ###
connect to scott identified by tiger
using 'sun';

1)dblink名必須與遠端資料庫的全域性資料庫名(global_name)相同;
2)使用者名稱,口令為遠端資料庫使用者名稱,口令;
3)主機字串為本機tnsnames.ora中定義的串;
4)兩個同名的資料庫間不得建立dblink;
然後,你就可以透過dblink訪問遠端資料庫了。
如:
sql>select * from 表名@ora9i.us.oracle.com;
還可以建立快照(snapshot)透過dblink實現遠端資料自動傳輸。

檢視所有的資料庫連結,進入系統管理員SQL>運算子下,執行命令:

SQL>select owner,object_name from dba_objects where object_type='DATABASE LINK';

本文出自:http://liumanyun.blog.hexun.com/5963987_d.html

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/13879334/viewspace-1034913/,如需轉載,請註明出處,否則將追究法律責任。

相關文章