Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 不同DBMS之间的数据迁移&x27;s_Sql Server_Oracle_Delphi_Relational Database_Informix - Fatal编程技术网

Sql server 不同DBMS之间的数据迁移&x27;s

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格式不是可选的 有人能推荐一些高性能的格式吗 任何其他实

由于我无法得到任何令人满意的答案,似乎我们必须为此编写自己的程序,我们正处于设计阶段,我们正在考虑使用哪种格式来备份数据

程序将用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内部备份格式,可能是跨平台的

蟾蜍群落:

有关导出、导入的一些视频:


Thanx对于答案,听起来很有趣,但我如何在Msserver和Informix之间导入/导出数据?imsut通过oracle完成(如果两者都支持的话):(检查一下,它确实支持多个平台和多个数据库供应商。有很多预配置的模块可供使用,可以让您完成大量工作。可能不再相关;)-请参阅我对您的其他问题的回答,对于这个问题,有一个著名的开源数据迁移产品+1;但我真的怀疑您能否在标题(备份格式)中找到问题的解决方案,因为现在的数据库有太多内容:要成为“备份格式”,您需要传输存储过程、视图以及每个数据库供应商允许您做的任何事。至少可以说,这不是小事。但是,为了以防万一你找到了一个工具,我对这个问题投了赞成票并加了星星。在这个阶段,对你来说,性能或编写/维护代码的容易程度更重要的是什么?您只需要传输数据还是还需要传输模式信息?@jachguate:在第1行,我需要在另一个系统上有相同的数据库,包括相同的选项卡结构和索引。我没有任何存储过程/触发器等。所以主要是表,包括它们的索引和约束(PK/FK)。谢谢你的建议,这是一个非常好而且性能非常好的工具,尽管我仍然需要在ODBC上试用。@O.D-我很想知道它是否适合ODBC。如果你尝试一下,并得到一个意见,如果你回到岗位上,让每个人都知道,那就太好了路易斯
    // 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"));