2012-11-10 64 views
5

我有2個Oracle數據庫,並且我經常使用TOAD將數據從prod數據庫複製到測試數據庫,方法是生成用於Prod DB的插入腳本並稍後在測試數據庫上運行它。將數據從一個數據庫複製到另一個數據庫

我想通過批處理文件更快地完成它。

我認爲我可以使用this解決方案,但DB有auto-increment列。如果我使用這種解決方案,該列是否會受到影響?我需要以某種方式更改腳本嗎?我還沒有嘗試過,因爲我沒有訪問數據庫,只能在星期一進行測試。

有沒有更好的辦法,我可以做到這一點?我基本上在尋找的是使用批處理文件來完成整個複製過程,這可以最大限度地減少使用TOAD花費的時間。

另外,如果我可以在正確的方向上引導,如果解決方案並不簡單,那我就很好。

+0

雖然它可能非常有用,但[COPY](http://docs.oracle.com/cd/E11882_01/server.112/e16604/apb.htm#CHDEAEDE)命令最終會被廢棄,並且它具有一些奇怪的行爲。最簡單,最快速的方法是使用[數據庫鏈接](http://docs.oracle.com/cd/E11882_01/server.112/e26088/statements_5005.htm#i2061505)。 –

+1

也可以考慮導出。 – user75ponic

回答

5

確保兩個表具有相同的結構。

連接到目標數據庫。

創建到源數據庫的公共鏈接。用戶應該具有「CREATE PUBLIC DATABASE LINK」系統權限來執行此操作。

CREATE PUBLIC DATABASE LINK mylink 
    CONNECT TO source_user IDENTIFIED BY source_password 
    USING 'source_entry_in_tnsnames'; 

複製數據:

INSERT INTO mytable SELECT * FROM [email protected]; 

如果表的主鍵來自一個順序,設置序列 - 至少 - 相同的值在源數據庫中:

ALTER SEQUENCE mysequence increment by 100000; 
SELECT mysequence.nextval FROM DUAL; 
ALTER SEQUENCE mysequence increment by 1; 
+0

「source_entry_in_tnsnames」周圍的單引號是至關重要的;沒有他們,你可能會花一些時間想知道爲什麼甲骨文向你拋出錯誤。請參閱[文檔](https://docs.oracle.com/cd/B12037_01/server.101/b10759/statements_5005.htm)。 –

相關問題