2011-10-03 48 views
1

我有兩個Oracle數據庫。它們具有完全相同的表結構。大約有15個表格有不同的FK關係。將數據從一個數據庫加載到另一個數據庫的最佳方法

我需要創建一個進程,它可以接受一個I​​D(整個數據庫的父表的PK),並將與該密鑰相關的數據庫中的所有數據傳輸到第二個數據庫。

我想過使用數據庫鏈接。但是,它看起來像這個選項不是「制裁」。

還有什麼其他的好選擇呢?我知道有MSSql Server的導入/導出工具,但我在Oracle上。我可以創建一個客戶端應用程序來處理連接到這兩個數據庫,但對於客戶端應用程序來說,這似乎很多工作。我可以導出到文件然後導入,但是再一次,這是很多工作。

任何想法,這樣做的好方法或我幾乎堅持我已經想到的解決方案?

我知道這可能是一個棘手的問題,真的有一個堅實的答案,我提前感謝大家的幫助!

回答

1

有兩種互補的命令行工具,稱爲exp和imp for oracle。您可以在這裏找到他們一些更多的信息http://www.orafaq.com/wiki/Import_Export_FAQ

您可能會感興趣的主位是在where子句選項

exp scott/tiger tables=emp query="where deptno=10" 
+0

看起來很有趣。我會看一看。看起來有一個更新版本的命令:http://www.orafaq.com/wiki/Data_Pump – kralco626

+0

雖然有一個問題,我該如何去使用這些命令?我在安裝SQL Developer的windows xp上。我需要安裝其他東西嗎? – kralco626

+0

此外,它看起來像使用這個過程需要一個數據庫鏈接,所以導入和導出。'使用網絡模式導入時,不需要任何中間轉儲文件(GREAT,不再需要轉儲文件的FTP)。數據通過數據庫鏈接導出並直接導入到目標數據庫中'這是一個我可以在本地計算機上執行的命令,讓它在那裏存儲dmp文件,然後從那裏加載轉儲文件,所以我不必使用數據庫鏈接? – kralco626

1

@ kralco626 - 我知道這個問題是舊的,但你可以做的是在源數據庫中創建一個與原始表的參數匹配的臨時表。然後將要移動到新數據庫的記錄從原始表複製到新的臨時表中。 語法:

CREATE TABLE source_new_table 
AS (SELECT * FROM source_old_table 
    WHERE old_table.column_name = criteria); 

現在導出新的臨時表數據泵導出表的命令。 語法:

EXPDP source_schema_name/source_schema_password TABLES=source_new_table DIRECTORY=datapump_dir DUMPFILE=dumpfile_name.dpdmp LOGFILE=expdp_logfile_name COMPRESSION=ALL 

採取這一數據泵導出文件,並用它做一個數據泵導入表命令到目標數據庫。 語法:

IMPDP destination_schema_name/destination_schema_password TABLES=source_new_table DIRECTORY=datapump_dir DUMPFILE=dumpfile_name.dpdmp LOGFILE=impdp_logfile_name 

然後從該新導入的臨時表中的記錄追加到原始表在目標數據庫。 語法:

INSERT INTO destination_old_table 
SELECT * FROM source_new_table; 

做每一個你需要從源數據庫獲取數據表此相同的一步。 完成所有工作後,您只需從兩個數據庫中刪除臨時表。 語法:

DROP TABLE destination_schema_name.source_new_table; 
DROP TABLE source_schema_name.source_new_table; 

這應該讓你得到你想要的結果。

相關問題