Oracle跨數據庫查詢並插入

(注意ORACLE數據庫的版本儘量一致,下面是在數據庫版本一致下操作的)
工作中需要從一個數據庫中的表GIS_WEICHAI_DATA_1S中的數據導入到另個一數據庫的表GIS_WEICHAI_DATA_1S中,
數據庫服務器都是遠程的<IP分別爲: 221.131.228.256     211.161.192.46>!我的實現方法是在本地使用PL/SQL操作兩個遠程服務器,實現方式如下:

1. [代碼]爲你需要操作的遠程數據庫服務器建立本地服務名:   

  在本地數據庫安裝文件中,找到$ORACLE_HOME/network/admin/tnsnames.ora文件,
    末尾添加
    --第一個遠程服務器的服務名:MYORACLE1
MYORACLE1 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 221.131.228.256)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orcl)
    )
  )

  --第二個遠程服務器的服務名:MYORACLE2
MYORACLE2 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 211.161.192.46)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orcl)
    )
  )

 --如果有更多的遠程數據庫需要同時操作,可以依次增加!
  --如果本機用的Windows操作系統,可以使用Oracle自帶的Net Manager 工具,以圖形化的操作方式來建立服務名!

2. [代碼]在本機上使用sysdba的角色登錄本地數據庫,創建database link:  
   --遠程服務器一的對應database link
    create public database link MYDBLINK1   --可以隨便取名,當然,不能是關鍵字或保留字
    connect to dbUserName1 identified by dbpwd1
    using ' MYORACLE1';
--遠程服務器二的對應database link
    create public database link MYDBLINK2  --可以隨便取名,當然,不能是關鍵字或保留字
    connect to dbUserName2 identified by dbpwd2
    using ' MYORACLE2';
--其中using後面填對應的數據庫服務名,dbUserName1,dbpwd1填對應的數據服務器登錄名,密碼
--刪除database link
      Drop database link MYDBLINK1;  --本例中是MYDBLINK1和MYDBLINK2

3. [代碼]操作遠程服務器上的表    
在要在對應的表後面加上@ linkName(對應的數據庫鏈接名),就跟操作本地數據庫中的表差不多,可以從不同數據庫服務器中提取數據!很方便!
insert into GIS_WEICHAI_DATA_1S@MYDBLINK1 select * from GIS_WEICHAI_DATA_1S@ MYDBLINK2 where rownum<=10000;

4. [代碼]如果需要頻繁的使用遠程服務器中的表,爲這個表創建一個同義詞     
    create synonym syName for GIS_WEICHAI_DATA_1S@MYDBLINK1;
以後在要使用GIS_WEICHAI_DATA_1S@MYDBLINK1的時候用syName就可以了!
刪除同義詞的語法爲:
    drop synonym syName;
5. [代碼]查看當前數據庫的DB Link   
select * from user_db_links; --用戶 DB Link
select * from dba_db_links;  --dba DB Link
select * from v$dblink;      --當前DB Link


發佈了30 篇原創文章 · 獲贊 3 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章