database link概述
database link是定義一個數據庫到另一個數據庫的路徑的對象,database link允許你查詢遠程表及執行遠程程序。
database link分類
1.Private
Owner:創建database link的user擁有該database link
描述:在本地數據庫的特定的schema下建立的database link。只有建立該database link的schema的session能使用這個database link來訪問遠程的數據庫。
同時也只有Owner能刪除它自己的private database link。
2.Public
Owner:PUBLIC
描述:Public的database link是數據庫級的,本地數據庫中所有的擁有數據庫訪問權限的用戶或pl/sql程序都能使用此database link來訪問相應的遠程數據庫
3.Global
Owner:PUBLIC
描述:Global的database link是網絡級的,當Oracle網絡使用目錄服務器時,目錄服務器會自動為網絡中的每個Oracle數據庫創建和管理Global database link(作為網絡服務名)。
任何數據庫中的用戶和pl/sql子程序都可以使用全局鏈接訪問相應的遠程數據庫中的對象。
注意:在Oracle數據庫的早期版本中,一個Global database link引用了一個database link,該鏈接是在Oracle名稱服務器上注冊的。
Oracle名稱服務器的使用已經被棄用。在這個文檔中,全局數據庫鏈接指的是來自目錄服務器的網絡服務名的使用。
創建dblink所需的權限
CREATEDATABASE LINK 本地數據庫 創建一個私有的DBLink
CREATEPUBLIC DATABASE LINK 本地數據庫 創建一個共有的DBLink
CREATESESSION 遠程數據庫 創建一個任意類型的DBLink
database link創建語法
CREATE [SHARED][PUBLIC] database link link_name
[CONNECT TO [user][current_user] IDENTIFIED BY password]
[AUTHENTICATED BY user IDENTIFIED BY password]
[USING 'connect_string']
簡要說明:
connectstring:連接字符串,tnsnames.ora中定義遠程數據庫的連接串,也可以在創建dblink的時候直接指定。
username、password:遠程數據庫的用戶名,口令。如果不指定,則使用當前的用戶名和口令登錄到遠程數據庫
使用實例:
創建私有的DBLink
create database link dblink_name connect to username identified by "password" using '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP) (HOST = 192.168.1.18 )(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = orcl)))';
創建公共的DBLink
create public database link dblink_name connect to username identified by "password" using '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP) (HOST = 192.168.1.18 )(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = orcl)))';
database link的使用
最簡單的用法
SELECT* FROM table_name@dblink_name;
包裝dblink_name名稱
CREATE SYNONYM table_name FOR table_name@dblink_name;
SELECT * FROM table_name;
建立一個視圖來封裝
CREATE VIEW table_name AS SELECT * FROM table_name@dblink_name;
database link刪除
刪除public類型的database link
DROP PUBLIC database link dblink_name;
刪除非public類型的database link
注意:只有owner自己能刪除自己的非public類型database link
DROP database link dblink_name;
查詢database link
select * from dba_db_links;
原文鏈接:https://blog.csdn.net/naruto0025/article/details/79075041?utm_source=blogxgwz9