Oracle 的Database Link讓我們可以在目前的資料庫直接存取遠端資料庫,建立database link方式如下。
建立連結到遠端資料庫的database link。
使用者名稱為abc
;
密碼為123
;
database link名稱為dblink
(名稱自訂);
遠端資料庫的位址為demo.abc.com:1521
;
SID為demo
。
-- create database link
CREATE DATABASE LINK dblink
CONNECT TO abc IDENTIFIED BY 123
USING '(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=demo.abc.com)(PORT=1521))
(CONNECT_DATA=(SID=demo))
)';
查詢USER_DB_LINKS
view 顯示目前使用者建立的database link。
-- show created database links of the current user
select * from USER_DB_LINKS;
查詢V$DBLINK
view查看目前開啟的database link。
select * from V$DBLINK
Database link建立後即可從目前資料庫查詢遠端資料庫的EMPLOYEE
資料表。在查詢的遠端資料表後接@
加上database link的名稱,例如EMPLOYEE@dblink
。
SELECT * FROM EMPLOYEE@dblink;
執行完操作後關閉database link。
-- close database link
ALTER SESSION CLOSE DATABASE LINK dblink;
把遠端資料庫的EMPLOYEE
複製到本地資料庫的同資料表EMPLOYEE
。
INSERT INTO EMPLOYEE SELECT * FROM EMPLOYEE@dblink a
WHERE a.ID = 100;
Database link在搬移或備份資料到不同的資料庫時相當好用,資料不用再經過應用程式而是直接在兩資料庫中傳遞。
不過對於LOB
型態如CLOB
或BLOB
欄位在database link有使用限制,若以database link查詢遠端的這些欄位會出現ORA-22992: cannot use LOB locators selected from remote tables
錯誤。不過上面的INSERT INTO local SELECT * FROM remote@dblink
仍可正常執行,但要注意本地表和遠端表欄位順序必須一致。
參考:
沒有留言:
張貼留言