Sql server 不同DBMS之间的数据迁移&x27;s
由于我无法得到任何令人满意的答案,似乎我们必须为此编写自己的程序,我们正处于设计阶段,我们正在考虑使用哪种格式来备份数据 程序将用Delphi编写 需要在Oracle/Informix/Msserver之间导出/导入数据,非常重要这里是性能问题,因为此程序将在1-2 GB数据库上运行。除了正常数据之外,数据库中还有必须备份的blob 我们认为Xml数据或逗号分隔的数据都是透明的(这很好),但这里必须考虑BLOB。在这种情况下,Paradox格式不是可选的 有人能推荐一些高性能的格式吗 任何其他实现相同目标的想法都是受欢迎的Sql server 不同DBMS之间的数据迁移&x27;s,sql-server,oracle,delphi,relational-database,informix,Sql Server,Oracle,Delphi,Relational Database,Informix,由于我无法得到任何令人满意的答案,似乎我们必须为此编写自己的程序,我们正处于设计阶段,我们正在考虑使用哪种格式来备份数据 程序将用Delphi编写 需要在Oracle/Informix/Msserver之间导出/导入数据,非常重要这里是性能问题,因为此程序将在1-2 GB数据库上运行。除了正常数据之外,数据库中还有必须备份的blob 我们认为Xml数据或逗号分隔的数据都是透明的(这很好),但这里必须考虑BLOB。在这种情况下,Paradox格式不是可选的 有人能推荐一些高性能的格式吗 任何其他实
Thanx。DbUnit是一种流行的工具,可以提取和加载XML格式的数据,请参阅 您是否检查过ODI(Oracle Data Integrator),它支持很多源数据库。它能够从源数据库捕获更改并将其集成到目标数据库中。它的性能很好,但有价格标签
Ronald.新的DBExpress框架提供了在多个数据库之间导出/导入数据的可能性。如果您还必须导出元数据,而不仅仅是数据,那么您可以检查此CodeRage会话,它可能非常复杂。在您将要使用的数据库之间有许多细微的差别,这种格式应该足够通用,导出/导入代码应该能够跨数据库转换和映射元数据,并且因为外部应用程序不能直接写入数据库内部结构,它必须生成正确的数据库DDL来创建数据结构。 只要这是一种专有格式,IMHO的设计是您最不关心的问题,如果大小和性能很重要,并且文件是按顺序读取的,那么设计二进制格式并不困难。
无论如何,导入/导出和备份是两个不同的任务。如果必须备份数据库,请使用其功能。它们通常允许更多的控制,即时间点恢复。如果必须跨数据库移动数据,这是另一个问题-我只编写代码来移动数据,而不是元数据,在目标数据库中预先创建所需的结构。我使用一个名为备份的优秀程序,但它只通过ODBC处理Informix,而不是直接处理。如果您发现可以使用OmegaSync,您会发现它的性能非常出色,因为它首先比较数据库,然后只同步差异。如果效率是您的首要目标,那么如果您决定自己进行编程,您可能希望使用这个想法 但是,正如其他人回答您的问题时所说,编程数据库转换非常复杂。那么,为什么不开发您需要的SQL,并以这种方式进行转换呢。例如,请参见:要移动数据,请查看以下源:
您可以将SQL优化到我确信的适当速度,如果您能够灵活地转储和加载数据。您应该使用自己的二进制格式,通过(xml表示文本/流表示blob)集成。您可以尝试一下 它支持您提到的所有平台,可以在源平台上执行“导出表数据以插入语句”之类的操作,然后可以在目标平台上运行。 IIRC甚至还有一些Toad内部备份格式,可能是跨平台的 蟾蜍群落:
// partial database export
QueryDataSet partialDataSet = new QueryDataSet(connection);
partialDataSet.addTable("FOO", "SELECT * FROM TABLE WHERE COL='VALUE'");
partialDataSet.addTable("BAR");
FlatXmlDataSet.write(partialDataSet, new FileOutputStream("partial.xml"));
// full database export
IDataSet fullDataSet = connection.createDataSet();
FlatXmlDataSet.write(fullDataSet, new FileOutputStream("full.xml"));