ORACLE如何使用DBLINK連接另一個數據庫


一. 實現結果:在一個數據庫中某個用戶下編寫一個存儲過程,在存儲過程中使用DBLINK連接另一個數據庫,從此數據庫中的一個用戶下取數,然后插入當前的數據庫中的一個表中。

 

二. 實現方法步驟:

    1. 創建存儲過程

    2. 在存儲過程中先創建database link

    3. 創建成功

    4. 從另一個數據庫取出數據插入到當前數據庫中

    5. 任務完成  

三. 創建DBLINK的方法:

     create public database link dblink

       connect to totalplant identified by totalplant 

       using '(DESCRIPTION =

                (ADDRESS_LIST =

                  (ADDRESS = (PROTOCOL = TCP)(HOST = LOCALHOST)(PORT = 1521))

                )

                (CONNECT_DATA =

                  (SERVICE_NAME = prd.gdc)

                )

              )';

 

        語法解釋:create public database link DBLINK名字(自己隨便起)

                  connect to 用戶名 identified by 密碼

                  using '(DESCRIPTION =

                            (ADDRESS_LIST =

                              (ADDRESS = (PROTOCOL = TCP)(HOST = 要連接的數據庫所在服務器的IP地址)(PORT = 1521))

                            )

                            (CONNECT_DATA =

                              (SERVICE_NAME = 要連接的數據庫的在本地的服務名(即要連接的數據庫的SID))

                            )

                          )';

 

     2. 如果創建private的DBLINK

        create database link dblink

        connect to totalplant identified by totalplant 

        using '(DESCRIPTION =

                (ADDRESS_LIST =

                  (ADDRESS = (PROTOCOL = TCP)(HOST = LOCALHOST)(PORT = 1521))

                )

                (CONNECT_DATA =

                  (SERVICE_NAME = prd.gdc)

                )

              )';                        

四. 連接成功后從所連接的數據庫中取數的方法:

     1. select * from tbl_ost_notebook@dblink;

     說明:只需在表名的后面加上"@DBLINK名字"即可。    

五. 在當前數據庫下查看所有的DBLINK的方法:

     1. select * from dba_db_links;     

六. 刪除當前數據庫下的一個指定的DBLINK的方法:

     1. 如果創建的是一個public的DBLINK,刪除時需要用

        drop public database link dblink;

     2. 如果創建的是一個private的DBLINK,刪除時需要用

        drop database link dblink;

     說明:drop public database link DBLINK名字;     

七. 查看當前數據庫的全局數據庫名的方法:

     1. select * from global_name;   

八. 查看當前用戶具有哪些針對DBLINK的權限的方法:

     SELECT DISTINCT PRIVILEGE AS "Database Link Privileges"

        FROM ROLE_SYS_PRIVS

        WHERE PRIVILEGE IN ( 'CREATE SESSION','CREATE DATABASE LINK',

                             'CREATE PUBLIC DATABASE LINK');    

 注意:數據庫中的字段有clob類型,是不能移過來的:

  解決辦法:

①創建臨時表:這里臨時表的表結構與目標表T_TEST相同,這種臨時表不占用表空間,而且不同的SESSION之間互相看不到對方的數據.

Create global temporary table table_temp on commit delete rows as select * from T_TEST where 1=2; 

需要注意的問題: 
on commit delete rows會在commit提交的時候清空臨時表數據;ON COMMIT PRESERVE ROWS則在會話結束的時候清空數據。 
②將遠程表數據導入臨時表

insert into table_temp select * from T_TEST@remote  

 

③將臨時表數據導入目標表

insert into T_TEST select * from table_temp  

八. 參考資料:

           http://download-west.oracle.com/docs/cd/B19306_01/server.102/b14231/ds_admin.htm#i1008271


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM