oracle link的建立過程

下面作一個測試,在測試中,建立數據庫連接的庫爲XJ(WINDOWS 2003 ORACLE 10g 10.2.0.1),被連接的庫爲DMDB(LINUX AS5 ORACLE 10g 10.2.0.1 RAC)
第一部分:如何建立dblink
dblink的建立有兩種方式:
一、在本地數據庫tnsnames.ora文件中配置要訪問的目標數據庫信息
create [public] database link test_link2
connect to scott identified by tiger using 'test_link2';
其中第一個test_link2是將要建立的dblink的名字,
第二個test_link2是tnsnames.ora文件中配置的目標數據庫DMDB的鏈接信息:
test_link2 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.123)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = mai)
    )
  )
scott/tiger是登陸到遠程數據庫的用戶名和密碼,而後當在本地數據庫使用test_link2的dblink訪問遠程數據庫的時候,會使用scott的身份來訪問
第二部分:dblink相關的權限
SYS@test > select * from user_sys_privs where privilege like upper('%link%');
USERNAME                       PRIVILEGE                                ADM
------------------------------ ---------------------------------------- ---
SYS                            CREATE DATABASE LINK                     NO
SYS                            DROP PUBLIC DATABASE LINK                NO
SYS                            CREATE PUBLIC DATABASE LINK              NO
權限解釋:
CREATE DATABASE LINK(所建立的DBlink只能是建立者本身使用,別的用戶都使用不了)
CREATE PUBLIC DATABASE LINK(public表示所建立的dblink全部用戶均可以使用)
DROP PUBLIC DATABASE LINK(刪除Public dblink的權限)數據庫

第三部分:dblink的使用
假如說,我要比較兩個庫的用戶的差別,那麼我如今能夠這麼作:
select username from dba_users@to_mai
minus
select username from dba_users;
這樣就能夠獲得在目標數據庫中有的用戶,而在當前用戶中沒有的用戶列表了
另一個:若是你樂意,你能夠用triggers+dblink實現一個簡單的數據同步,不過不建議使用,玩玩就好了。ide

第四部分:dblink的相關視圖
dblink的經常使用視圖有以下幾個:
dba_db_links,查看系統中全部的dblink
v$dblink,用來查看當前數據庫中有哪些打開的dblink測試

當GLOBAL_NAMES參數設置爲TRUE時,使用DATABASE LINK時,DATABASE LINK的名稱必須與被鏈接庫的GLOBAL_NAME一致。
首先查看DMDB的相關配置:
SQL> show parameter global_names
NAME         TYPE        VALUE
------------------------------------ ----------- ---------
global_names     boolean     TRUE同步

SQL> create database link test_link2 connect to test identified by test using 'D
MDB';
數據庫連接已建立。
SQL> select * from dual@test_link2;
select * from dual@test_link2
                   *
第 1 行出現錯誤:
ORA-02085: 數據庫連接 TEST_LINK2 鏈接到 DMDB
而再次將XJ庫的global_names設爲FALSE,則數據庫連接又可用了。
SQL> alter system set global_names=false;
系統已更改。
SQL> select * from dual@test_link2;
D
-
X
能夠看到,連接仍然能夠用。
若是在DMDB庫上建立連接到XJ庫上,能夠觀察到一樣的結果。
能夠得出一個結論:global_names參數設置爲FALSE,影響的是建立數據庫連接的那個庫對數據庫連接的使用。也就是說,若是一個庫(實例)的global_names參數設值爲TRUE,則該庫鏈接其餘庫的數據庫連接,其名稱必需要與被鏈接的庫的global_name相同test

相關文章
相關標籤/搜索