2011-05-30 195 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

相关问题