工作中需要從一個資料庫中的表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:
執行如下sql語句:
複製代碼 代碼如下:
--遠程伺服器一的對應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