oracle之dblinks

liqilin0429發表於2011-02-14


database link是定義一個資料庫到另一個資料庫的路徑的物件,database link允許你查詢遠端表及執行遠端程式。在任何分散式環境裡,database都是必要的。另外要注意的是database link是單向的連線。

在建立database link的時候,Oracle再資料字典中儲存相關的database link的資訊,在使用database link的時候,Oracle通過Oracle Net用使用者預先定義好的連線資訊訪問相應的遠端資料庫以完成相應的工作。

建立database link之前需要確認的事項:
A 確認從local database到remote database的網路連線是正常的,tnsping要能成功。
B 確認在remote database上面有相應的訪問許可權。

第一:建立資料庫連結的語法如下:
A     CREATE [PUBLIC] DATABASE LINK link
      CONNECT TO username IDENTIFIED BY password
      USING ‘connectstring’
B      create PUBLIC database link "qilin"
     connect to scott identified by qilin
      using '(DESCRIPTION =
          (ADDRESS_LIST =
           (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.83)(PORT = 1521))
        )
           (CONNECT_DATA =
         (SERVICE_NAME = pridata)
       )
      )';

注意:
          A  建立資料庫連結的帳號必須有CREATE DATABASE LINK或CREATE PUBLIC DATABASE LINK的系統許可權,用來登入到遠端資料庫的帳號必須有CREATE SESSION許可權。這兩種               許可權都包含在CONNECT角色中(CREATE PUBLIC DATABASE LINK許可權在DBA中)。

          B  一個公用資料庫連結對於資料庫中的所有使用者都是可用的,而一個私有連結僅對建立它的使用者可用。由一個使用者給另外一個使用者授權私有資料庫連結是不可能的,一               個資料庫連結要麼是公用的,要麼是私有的。

    第二:建立資料庫連結時,還可以使用預設登入方式,即不指定遠端資料庫的使用者名稱和密碼:
create public database link zrhs_link
using ‘zrhs’;
在不指定使用者名稱和口令的情況下,ORACLE使用當前的使用者名稱和口令登入到遠端資料庫。
USING後面指定的是連結字串,也就是遠端資料庫的網路服務名,這個服務名儲存在TNSNAMES.ORA檔案中,在該檔案中定義了協議、主機名、埠和資料庫名。

第三:刪除資料庫連結的語句是:
DROP [PUBLIC] DATABASE LINK zrhs_link

第四:修改gloabal_names=FALSE
SQL> SELECT   NAME,VALUE   FROM   V$PARAMETER   WHERE   NAME   LIKE   'global_names ';
如果看到gloabal_names=true,則:
SQL〉ALTER   SYSTEM   SET   global_names=FALSE;

第五:檢視建立DBLINK的資訊
   SQL> select * from dba_db_links;
       select * from all_db_links;
       select * from user_db_links;
      ALL_DB_LINKS 檢視和 USER_DB_LINKS檢視與 DBA_DB_LINKS檢視相類似-它們分別顯示了你能夠訪問的所有連結及你所擁有的全部連結。
   第六:DBA_OBJECTS(ALL_OBJECTS/USER_OBJECTS)在這個檢視裡面只能查詢到系統有那些database link以及他們的owner,建立時間等資訊。
    SELECT OWNER,OBJECT_NAME,OBJECT_TYPE FROM DBA_OBJECTS WHERE OBJECT_TYPE LIKE 'DATABASE LINK';
 
   第七:檢視儲存的Fixed user database link所儲存的使用者密碼這是比較危險的一件事,有必要對錶sys.link$的許可權進行限制。
    select name, host, userid, passwordx from sys.link$;
 
   第八:檢視當前有什麼人在用database link
    SELECT * FROM V$database link
 
   第九:database link的使用
        a 不想讓使用的人知道database link的名字的時候,建一個別名封裝
           CREATE SYNONYM table_name FOR table_name@database link;
           SELECT * FROM table_name;
          create synonym su for demo@XIAOLIAO;
         select * from su;
         SELECT OWNER,OBJECT_NAME,OBJECT_TYPE FROM DBA_OBJECTS WHERE OBJECT_TYPE LIKE 'SYNONYM' and object_name='SU';
        b 也可以建立一個檢視來封裝
          CREATE VIEW table_name AS SELECT * FROM  table_name@database link;
          create view sai as select * from demo@XIAOLIAO;
          SELECT OWNER,OBJECT_NAME,OBJECT_TYPE FROM DBA_OBJECTS WHERE OBJECT_TYPE LIKE 'VIEW' and object_name='SAI';

 

 

 

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/20976446/viewspace-687143/,如需轉載,請註明出處,否則將追究法律責任。

相關文章