ORACLE數據庫鏈接


 

在ORACLE里面,遠程數據訪問,像查詢、更新等可以通過Database Link來實現。數據庫連接需要在建立Database Link的兩台機子上都運行Oracle Net(以前叫SQL*NET 和NET 8)。 語法如下

1 Database Link 的創建:

有兩個數據庫服務器A/B, 其中A的IP地址為172.20.36.245, 服務器B為本機。服務器B上的數據庫實例名為ORCL,在本機上的服務監聽配置上有服務器A上實例配置:

BIWG_TEST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = 172.20.36.245)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = biwg)
)
)

 

實例BIWG_TEST的賬號為 WGODS 、 密碼為WGODS。下面開始在本機上創建DB Links

方法1:

CREATE PUBLIC DATABASE LINK WGODS.ORACLE.COM 

CONNECT TO WGODS IDENTIFIED BY WGODS USING 'BIWG'

 

CREATE [PUBLIC] DATABASE LINK 數據庫鏈接名 CONNECT TO 用戶名 IDENTIFIED BY 密碼 USING '本地配置的數據的實例名';

[public]的意思是:public是全局db link,即該數據庫上所有用戶都能查詢,要sys或者system用戶來創建(當然有sysdba權限的用戶也可以的);如果不使用public就是私有db link,只有創建該db link的用戶能查詢

查看連接是否成功

SELECT * FROM DUAL@WGODS.ORACLE.COM 

SELECT * FROM REF.TR_WGG_GDAREA_INFO@WGODS.ORACLE.COM 

 

方法2:可以不配置服務。

CREATE PUBLIC DATABASE LINK REMOTE_DEVE_HOST

CONNECT TO WGODS IDENTIFIED BY WGODS 

USING '(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = 172.20.36.245)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = biwg)

)
)'

 

不建議使用這個實現。感覺沒有上面方法來的方便

查看連接是否成功

SELECT * FROM DUAL@WGODS.ORACLE.COM 

SELECT * FROM REF.TR_WGG_GDAREA_INFO@WGODS.ORACLE.COM 

 

2 查看當前數據有哪些Database Link?

SELECT * FROM DBA_OBJECTS WHERE OBJECT_TYPE = 'DATABASE LINK'

SELECT * FROM DBA_DB_LINKS;

 

3 如何返回數據庫的GLOBAL_NAME?

SQL> SHOW PARAMETER GLOBAL_NAME;

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

global_names boolean FALSESELECT * FROM GLOBAL_NAME

 

該參數為TRUE時,你在本地建立的DBLINK名稱必須和遠程的GLOBAL_NAME一致才行。

4 刪除Database Link

DROP [PUBLIC] DATABASE LINK REMOTE_DEVE_HOST;

會報如下錯誤: ORA-02024: 未找到數據庫連接

DROP PUBLIC DATABASE LINK REMOTE_DEVE_HOST;

正常執行刪除Database Link。

5 設置GLOBAL_NAME值對Database Link的影響

SQL> ALTER SYSTEM SET GLOBAL_NAMES = TRUE;

System altered

CREATE PUBLIC DATABASE LINK REMOTE_DB

CONNECT TO WGODS IDENTIFIED BY WGODS USING 'BIWG'

SELECT * FROM DUAL@REMOTE_DB

此時報錯:ORA-02085:數據庫連接 XXXX 到 XXXX

SQL> ALTER SYSTEM SET GLOBAL_NAMES = FALSE;

System altered

修改參數值為FALSE后,查詢就正常了、

6 在DB Link中執行查詢會有些限制。你應該避免使用connect by, start with, 以及prior關鍵字。一些查詢使用了這些關鍵字會很正常, 但是大部分查詢會失敗

 

7 如何查詢

SELECT …… FROM 表名@數據庫鏈接名

 

8 DB LINK的使用原則(工作中以及網上收集整理的,僅供參考)

8.1.生產盡量不要使用db link,雖然方便,但這樣不利於數據庫安全管理

8.2.在10g中,BLOB,CLOB在db link中是查不到的,含這種數據類型的,要配合建view使用

8.3.我們經常可以使用synonym來做一些配置,以提高易讀性和安全性

8.4.被建立了db link的user,最好不要修改密碼,若修改密碼要重建db link

8.5.db link是單向的

8.6 數據庫鏈接名,建議使用SID.SCHEMA的形式,這樣方便有多個db link時的識別(建議,個人習慣,非強制性)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM