回覆列表
  • 1 # 小皮球的飛飛

    工作中需要從一個數據庫中的表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填對應的資料伺服器登入名,密碼

    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

  • 中秋節和大豐收的關聯?
  • 座右銘是什麼意思?