Oracle dblink的簡應用

1.查看DBLINK

SELECT * FROM DBA_DB_LINKS;
或:
SELECT OWNER,OBJECT_NAME FROM DBA_OBJECTS WHERE OBJECT_TYPE='DATABASE LINK';
或:
SELECT * FROM ALL_DB_LINKS;

2.創建DBLINK
前提:
創建DBLINK的用戶有對應的數據庫權限

CREATE PUBLIC DATABASE LINK 
或:
CREATE DATABASE LINK 

授權:

GRANT CREATE PUBLIC DATABASE LINK,CREATE DATABASE LINK TO MYACCOUNT;

創建DBLINK:

CREATE PUBLIC DATABASE LINK DBLINKNAME CONNECT TO USERNAME IDENTIFIED BY PASSWORD
   USING '(DESCRIPTION =
			(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = DATABASE_IP)(PORT = 1521)))
			(CONNECT_DATA = (SERVICE_NAME =SERVICENAME))
			)';

如果在CREATE之後不加PUBLIC,則創建的DBLINK就不是公共的,就只有創建者可以使用了.
如果創建全局 DBLINK,必須使用 SYSTM 或 SYS 用戶,在 DATABASE 前加 PUBLIC。

ORACLE創建DBLINK報錯:ORA-01017、ORA-02063解決:
根據ORA-01017的提示是連接到另一方的用戶密碼錯誤,當9I或10G的版本的ORACLE數據庫連接11G的版本時,
會自動將密碼轉化爲大寫,密碼最好用雙引號引起來,否則可能在連接的時候報錯

補充:如何確定數據庫的SERVICENAME:
1.在SQLPLUS中使用

  SHOW PARAMETER[S] SERVICE_NAMES;

注意PARAMETER和PARAMETERS都可以
2.使用

SELECT NAME,VALUE FROM V$PARAMETER WHERE NAME='SERVICE_NAMES'

3.使用DB LINK

例如,在本機數據庫上創建了一個SCOTT_RMTHOST的PUBLICDBLINK(使用遠程主機的SCOTT用戶連接),
則用SQLPLUS連接到本機數據庫,執行SELECT * FROMSCOTT.EMP@SCOTT_RMTHOT即可以將遠程數據庫上
的SCOTT用戶下的EMP表中的數據獲取到.也可以在本地建一個同義詞來指向SCOTT.EMP@SCOTT_RMTHOST,這樣取值就方便多了.

-- 最簡單的用法
SELECT * FROM TABLE_NAME@DATABASE_LINK;
-- 不想讓別人知道DATABASE LINK名字的時候,可以使用同義詞包裝一下
CREATE SYNONYM TABLE_NAME FOR TABLE_NAME@DATABASE_LINK;
SELECT * FROM TABLE_NAME;
-- 也可以建立一個視圖來封裝
CREATE VIEW TABLE_NAME_V AS SELECT * FROM TABLE_NAME@DATABASE_LINK;

4.刪除
注意:用戶有CREATEPUBLIC DATABASE LINK 或者CREATE DATABASE LINK 權限.

-- 刪除PUBLIC類型的DBLINK
DROP PUBLIC DATABASE LINK DBLINK_NAME;
-- 刪除PRIVATE類型的DBLINK,只有創建者自己能刪
DROP DATABASE LINK DBLINK_NAME; 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章