目的
使用create Database link語句建立資料庫連結。資料庫連結是本機資料庫中的模式對象,利用它可以訪問遠端資料庫的對象。遠端資料庫不必是Oracle系統。
一旦建立了資料庫連結,就可以用它來引用遠端資料庫上的表和視圖。在表或視圖名後附加@[dblink],就可以在SQL語句中引用遠端資料表或視圖。用select語句可以查詢遠端資料表或視圖。如果正以分布式選項使用Oracle,還可以使用任何insert、update、delete或lock table語句訪問遠端資料表或視圖。
前提
要建立私人資料庫連結,必須具有create Database link系統許可權。要建立公用資料庫連結,必須具有create public Database link系統許可權。另外,在遠程Oracle資料庫上必須具有create session許可權。
在本地和遠程Oracle資料庫上必須安裝了Oracle Net。
要訪問非Oracle系統,必須使用Oracle異種服務(Oracle Heterogeneous Service)。
文法
CREATE [SHARED][PUBLIC] DATABASE LINK dblink
CONNECT TO [username IDENTIFIED BY password authenticated_clause|| CURRENT_USER]
USING ‘connectstring’
關鍵字和參數
shared:指定shared使用一個單獨的網路連接建立可被多個使用者共用的公用資料庫連結。
public:建立可被全體使用者使用的公用資料庫連結。若省略該子句,資料庫連結為私人的,只能由建立者使用。
dblink:指定資料庫連結的完整名或部分名。GLOBAL_NAMES初始化參數決定資料庫連結是否必須具有與該連結相連的資料庫的相同的名字。
在一個會話或真正的應用叢集配置中的一個執行個體可以開啟的資料庫連結的最大數量,取決於初始化參數OPEN_LINKS和OPEN_LINKS_PER_INSTANCE的值。
限定:不能在其他使用者的模式中建立資料庫連結,不能用模式名限定dblink(在資料庫連結名中允許有“.”字元,所以Oracle將全名,如RALPH.LINKTOSALES,解釋為你的模式中的資料庫連結名,而不是RALPH模式中的LINKTOSALES資料庫連結。
connect to子句:connect to子句允許啟用對遠端資料庫的串連。
CURRENT_USER子句:使用CURRENT_USER建立目前使用者的資料庫連結。為使連結成功,目前使用者必須是在遠端資料庫上具有有效賬戶的全域使用者。
若直接使用資料庫連結(即不是從儲存物件中使用),目前使用者即為被串連的使用者。
當執行儲存物件(如過程、視圖或觸發器)啟用資料庫連結時,CURRENT_USER是擁有儲存對象的使用者名稱,而不是調用對象的使用者名稱。例如,若資料庫連結出現在過程SCOTT.P(由SCOTT建立)內部並且使用者JANE調用過程SCOTT.P,目前使用者是SCOTT。
但是,若儲存物件是一個調用方權利(invoker-right)函數、過程或包,調用方的授權ID用於串連作為遠端使用者。例如,資料庫連結出現在過程SCOTT.P(由SCOTT建立的調用方權利過程)的內部,使用者JANE調用該過程,那麼CURRENT_USER是JANE並且用JANE的許可權執行該過程。
user IDENTIFIED BY password:是使用固定使用者資料庫連結串連遠端資料庫的使用者名稱和口令。若省略該子句,資料庫連結使用串連到資料庫的每個的使用者的名字和口令(這稱為串連的使用者資料庫連結)。
authenticated_clause:指定目標執行個體上的使用者名稱和口令。該子句在遠程伺服器驗證使用者,是安全性所必須的。指定的使用者名稱和口令必須是遠程執行個體上的有效使用者名稱和口令。使用者名稱和口令只用於驗證。其他動作不以該使用者的名義執行。
使用SHARED子句時必須指定該子句。
USING 'connect string':指定遠端資料庫的服務名。
example:
create public database link erpsales
connect to sales identified by sales
using '(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.217.6)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = heksales)
)
)';
host=資料庫的ip地址
service_name=資料庫的ssid。
資料庫連接字串可以用NET8 EASY CONFIG或者直接修改TNSNAMES.ORA裡定義
資料庫全域名稱可以用以下命令查出
SELECT * FROM GLOBAL_NAME;
可建立同義字省略@dblink尾碼
CREATE SYNONYM 同義字名FOR 表名;
CREATE SYNONYM 同義字名FOR 表名@資料庫連結名;
刪除dblink:DROP PUBLIC DATABASE LINK dblink。
如果建立全域dblink,必須使用systm或sys使用者,在database前加public。
需要DB支援Advanced replication(進階複製)功能,是否支援,可用如下SQL查看:
select * from v$option where PARAMETER='Advanced replication';
如果是返回True就表示支援。
查看Global_name參數是true還是False
執行語句: show parameter global_name;
該參數為true時,在本地建立的DBLINK的名稱必須和遠端Global_name一致才行。