2014-01-28 45 views
4

我們有一個我們想要導入到Amazon rds服務器的轉儲文件。Oracle數據泵impdp到遠程服務器

這是我做過什麼:

創建公共數據庫鏈接,並驗證它的工作原理:

CREATE OR REPLACE DIRECTORY DATA_PUMP_DIR AS 'G:\DB'; 

導入轉儲文件:

create public database link rdsdblink 
connect to dbuser identified by dbpsw 
using '(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST='xxx')(PORT=1521)))(CONNECT_DATA=(SID=dbsid)))'; 

SQL> select * from dual @ rdsdblink; 

D 
- 
X 

轉儲文件創建一個目錄:

impdp dbuser/[email protected] tablespaces=EMP directory=DATA_PUMP_DIR dumpfile=EMP_dump.DMP logfile=EMP_dump.log network_link=rdsdblink 

我還將rdsdblink連接字符串添加到tnsnames.ora文件並重新啓動Oracle服務(「立即關閉」,然後「啓動」)。

出現下列錯誤:

連接到:Oracle數據庫11g第二版11.2.0.2.0 - 64位生產
ORA-39001:無效的參數值
ORA-39200:鏈接名稱 「rdsdblink」 無效。
ORA-02019:遠程數據庫的連接說明未發現

我的本地Oracle版本: Oracle數據庫11g Express Edition的發佈11.2.0.2.0 - 生產

遠程Oracle版本: Oracle數據庫11g第11.2 .0.2.0 - 64位生產

回答

4

您已連接到遠程數據庫(通過dbuser/[email protected]),但您的數據庫鏈接是在本地數據庫中創建的。目前,您正嘗試在遠程數據庫上運行導入,同時還將遠程數據庫的網絡鏈接以及該網絡鏈接嘗試使用該遠程數據庫上不存在的數據庫鏈接。

tnsnames.ora條目和數據庫鏈接是完全分開的東西。

您需要正常連接本地 - 使用用於創建數據庫的鏈接,很可能取憑證。 network_link參數將使您的本地數據庫會話(由impdp啓動)對遠程服務器起作用;所以你的本地目錄可以使用。

除非......它不喜歡的工作。由network_link標識的遠程數據庫可以用作導入源,根本沒有轉儲文件;但它不能作爲從文件導入的目標。

impdpdocumentation

NETWORK_LINK參數通過數據庫鏈接啓動導入。 這意味着,系統,用於impdp客戶端連接 觸點由 source_database_link引用的源數據庫,從它檢索數據,並且將數據直接寫入到所連接的實例的數據庫。沒有涉及轉儲 文件。

如果你真的想要走這條路線,我認爲你需要一個從遠程到本地的鏈接,並運行對遠程的導入(就像你現在),但要直接從你的架構 - 不是從以前的導出。您仍然需要訪問遠程服務器上的DIRECTORY對象,因爲即使您未將轉儲文件複製過來,日誌等也會寫入該對象。即使與nologfile我相信如果你不指定目錄或沒有權限就會出錯。

article you linked to in your previous question說過同樣的話:

對於進口,NETWORK_LINK參數還標識數據庫 鏈接指向源服務器。這裏的區別在於對象 直接從源文件導入到本地服務器,而沒有將 寫入轉儲文件。雖然不需要參數,但與操作關聯的日誌仍需要目錄對象。

+0

謝謝我對這個真的很陌生,所以如果我要對遠程運行導入,我該如何指向本地轉儲文件? – Cal

+0

@Cal - 你不能。該文件必須位於您所連接的數據庫實例正在運行的服務器上。它必須在rds服務器上,我想這不是一個選項?否則,您必須將導出和導入作爲一個步驟,沒有中間轉儲文件,並且以另一種方式獲取數據庫鏈接可能會有問題(假設您的偵聽器未接觸到Internet)。 –

+0

感謝您的幫助。我們會盡力找到一種方法來做到這一點。 – Cal

相關問題