我在数据库中有大量数据,需要将该数据传输到另一台服务器。我正在使用SerializeJSON将数据写入文件,这对于少量数据工作正常,但现在我出现了内存错误。数据库服务器不在同一网络中。他们互相“看见”,这就是我想把数据传输到文件中的原因。
关于如何使用文件和ColdFusion将数据从一个数据库传输到另一个数据库的任何想法?
答案 0 :(得分:4)
我接近这个的方法是删除应用程序服务器(ColdFusion)并尝试使用DTS滚动进程。我们的想法是将每个表中的特定数据库行导出为单个导出,然后您可以将其导入另一个数据库。
因此,请查看您的架构并找出需要查询的表,并为每个表编写这些查询。根据新数据库中的主键,您可能需要修改import语句以避免插入主键,而是让数据库负责处理 - 您需要调整引用此(已更改)主键的任何其他导入。
这是一项棘手的工作,我认为您最好使用DTS等数据库工具手动完成。
我希望有所帮助。
答案 1 :(得分: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解析器。
答案 2 :(得分:0)
看看Jailer。它是一个基于Java的GUI应用程序,允许您选择数据库的特定表并根据某些条件导出数据。它工作得很好,而且很容易使用。
答案 3 :(得分:0)
如果您有SQL Server Management Studio,为什么不创建完整的备份文件,将所有数据,然后在新数据库上运行还原。这应该恢复所有的架构,表格和数据。
HTH, 拉里