關於expdp network_link參數的一個錯誤說明

今天遇到一個這樣的問題,問題描述大概以下,這是別人寫的,而後我研究了一下,問題的解決方法以下:
有兩臺DB服務器,A和B。兩臺服務器都是AIX系統,數據庫版本是10.2.0.2。
如今要從A服務器上導出數據庫表到B服務器上。首先在B服務器上創建和A服務器的public database link後(con_a),使用sql查詢能夠查詢到A服務器上的數據庫表內容,使用tnsping con_a也顯示正常。可是使用expdp導出數據庫表時指定參數network_link = con_a,提示ora-39200,ora-12154錯誤。可是在A服務器上創建到B服務器的public database link後(con_b),不管是sql查詢仍是tnsping con_b仍是使用expdp導出B服務器上的數據庫表都沒有問題。請問在B服務器上使用expdp時出現錯誤的緣由是什麼?
錯誤代碼是:
起先在B服務器上建立了以下dblink,可是一直提示上面的錯誤:
SQL> create  database link link_daolang connect to system identified by daolang using 'daolang';
數據庫連接已建立。
SQL> create or replace directory daolang as 'E:\Oracle\daolang';
目錄已建立。
SQL> grant read,write on directory daolang to system;
受權成功。
SQL>

查詢能夠正常進行
SQL> select count(*) from hr.employees@link_daolang;
  COUNT(*)
----------
       106
SQL> select * from sys.test@link_daolang;
        ID
----------
         1
         2
         3
         4
可是就是不能執行expdp命令,執行就提示
C:\>expdp system/daolang directory=daolang,dumpfile=daolang.dmp,full=y,network_link=link_daolang
Export: Release 10.2.0.1.0 - Production on 星期四, 03 6月, 2010 18:40:04
Copyright (c) 2003, 2005, Oracle.  All rights reserved.
鏈接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
ORA-39001: 參數值無效
ORA-39200: 連接名稱 "link_daolang" 無效。
ORA-02019: 未找到遠程數據庫的鏈接說明
 
 
經查閱資料,發現必須建立public dblink才能夠,而後先刪除掉原有的dblink,再從新建立,而後一切正常。
SQL> drop database link link_daolang
  2  ;
數據庫連接已刪除。
SQL> create public database link link_daolang connect to system identified by daolang using 'daolang';
數據庫連接已建立。
SQL>
 
 

還有一點要加以說明的是,建立dblink的正確步驟爲:
expdp 屬於服務端工具,而 exp 屬於客戶端工具, expdp 生成的文件默認是存放在服務端的,而 exp 生成的文件是存放在客戶端的

1.expdp username/password@connect_string   //
對於使用這種格式來講, directory 使用源數據庫建立的,生成的文件存放在服務端。 如何將生成的文件放在目標數據庫而不放在源數據庫呢,在 expdp 中使用 network_link
2.
a. 建立到服務端的 dblink
create database link link_name connect to  username identified by password using 'connect_string' ;
//username password server 端的,而且特別注意該處的connect_string 就爲tnsnames.ora中的服務名,
b. conn / as sysdba
create or replace directory dir as 'directory';
grant read,write on directory dir to username;
c.expdp username/password  directory=dir network_link=link_name ...  //
這裏的 username 用建立 dblink 的那個用戶, directory 也是目標數據庫建立的   
3.
若是想不生成 dmp 文件而直接導入一個數據庫,原理和 2 相似,直接使用 impdp network_link ,這樣能夠直接 impdp ,而繞過了 expdp 的步驟
相關文章
相關標籤/搜索