我在数据库中有大量数据,需要将这些数据传输到另一台服务器。我正在使用SerializeJSON将数据写入文件,这对于较小的数据量很有效,但现在我遇到了内存不足的错误。数据库服务器不在同一网络中。它们可以“看到”彼此,所以这就是为什么我要在文件中传输数据的原因。
关于如何使用文件和ColdFusion将数据从一个数据库传输到另一个数据库,有什么想法吗?
发布于 2011-05-31 06:50:58
您的问题给人的印象是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解析器。
发布于 2011-05-30 20:13:59
我解决这个问题的方法是切断应用服务器(ColdFusion),并尝试使用DTS启动进程。其思想是将每个表中的特定数据库行导出为单个导出,然后将其导入到另一个数据库中。
因此,请查看您的模式,找出需要查询的表,并为每个表编写这些查询。根据新数据库中的主键,您可能需要修改导入语句以避免插入主键,而是让数据库来处理-并且您将需要调整引用此(更改后的)主键的任何其他导入。
这是一项棘手的工作,我认为最好是使用DTS等数据库工具手动完成。
我希望这能有所帮助。
发布于 2011-05-30 17:59:57
看看Jailer吧。它是一个基于Java的GUI应用程序,允许您选择数据库的特定表并根据某些条件导出数据。它工作得很好,而且很容易使用。
https://stackoverflow.com/questions/6174528
复制相似问题