2011-05-30 193 views
1

我在數據庫中有大量數據,需要將該數據傳輸到另一個服務器。我使用SerializeJSON將數據寫入文件,對於較小數量的數據可以正常工作,但現在出現內存不足錯誤。數據庫服務器不在同一個網絡中。他們無法互相看到,所以我想將數據傳輸到文件中。將數據從一個數據庫傳輸到另一個數據庫

有關如何使用文件和ColdFusion將數據從一個數據庫傳輸到另一個數據庫的想法?

+0

是什麼樣的數據庫呢? – 2011-05-30 09:37:10

+0

它是一個包含90個表的mssql數據庫 – birdy1980 2011-05-30 09:38:04

+0

爲什麼不簡單地導出MYSQL數據並將它們導回到目標數據庫? – 2011-05-30 09:40:03

回答

1

你的問題給人的印象是OOM正在寫出數據。也許通過嘗試編寫整個記錄集。相反,您可能需要編寫一個遍歷數據頁面的算法 - SQL Server's ROW_NUMBER(ORDER BY x, y, z)是正確的方法。然後,您可以寫出多個文件或使用fileWrite(fileObj, data)來創建一個大文件 - 後者您可能需要執行JSON之外的格式,例如CSV。

現在如果問題是數據插入,there is a bug with ColdFusion and looping over SQL statements。基本上,當重複循環時,您需要將<cfquery>INSERT...</cfquery>放入<cfthread/>之內。

最後,如果遇到從文件中讀取數據的問題,您需要進行緩衝讀取。在這種情況下,如果使用XML,則需要使用CSV作爲序列化格式或使用SAX XML分析器,但我不知道以緩衝方式讀取的JSON分析器。

+0

感謝您的幫助。我現在正在使用fileWriteLine寫一個.csv文件。在我的情況下真正的殺手是。我將它改爲另見本文:[http://wiki.mxunit.org/display/default/How+cfloop+查詢%3D +殺+ A +的ColdFusion +服務器] – birdy1980 2011-05-31 08:33:45

0

看看Jailer。它是一個基於Java的GUI應用程序,允許您選擇數據庫的特定表並根據某些標準導出數據。它工作得很好,而且使用起來很方便。

4

我這樣做的方法是剪掉應用程序服務器(ColdFusion)並嘗試使用DTS來滾動進程。我們的想法是將每個表中的特定數據庫行作爲單個導出導出,然後您可以將其導入到其他數據庫中。

因此,查看您的模式並找出需要查詢的表,然後爲每個表編寫這些查詢。根據新數據庫中的主鍵,您可能需要修改導入語句以避免插入主鍵,而是讓數據庫處理 - 並且您將需要調整引用此(已更改)主鍵的任何其他導入。

這是一個棘手的工作,我認爲你最好用DTS等數據庫工具手工完成。

我希望有幫助。

+0

對於純數據庫方法的+1 +1 – Sergii 2011-05-30 15:22:33

0

如果你有SQL Server Management Studio,爲什麼不創建一個完整的備份文件,將所有的數據,然後在新的數據庫上運行還原。那應該還原所有的模式,表格和數據。

hth, larry

相關問題