【问题标题】:Script to copy data from one Informix database to another将数据从一个 Informix 数据库复制到另一个的脚本
【发布时间】:2016-05-04 02:44:36
【问题描述】:

我需要将数据从一个 Informix 数据库复制到另一个。我不想使用 LOAD 来执行此操作。有什么脚本可以帮助我解决这个问题吗?有没有其他方法可以做到这一点?

【问题讨论】:

  • 鉴于 LOAD(和 UNLOAD)是显而易见的答案,但您拒绝它,您应该解释为什么 LOAD 不适合您。

标签: database scripting informix


【解决方案1】:

如果没有关于您拥有的 Informix 数据库类型的更多信息,很难准确地说出最适合您的选择。

如果是少量表和大量数据,请查看 onunload、onload 和/或高性能加载程序。 (我假设我们在这里讨论的不是标准引擎。)

另一方面,如果您有很多表格并且 HPL 过于繁琐,请查看 myexport/myimport(可在 iiug.org 网站上获得)。这些是标准 dbexport/dbimport 实用程序的非锁定等效项。

【讨论】:

    【解决方案2】:

    最简单的解决方案是备份数据库实例并将其还原到单独的实例。如果您无法做到这一点,那么还有其他可能性。

    • dbexport/dbimport
    • 卸载/加载
    • 手工制作的 SQL 插入

    如果数据库结构相同,则可以使用 dbexport/dbimport,但这会将数据卸载到平面文件中,无论是在文件系统中还是在磁带上,然后从平面文件中导入。

    我通常发现如果数据库结构相同,那么加载/卸载是最简单的解决方案。

    如果您不想使用加载/卸载 dbimport/dbexport,那么您可以使用直接 SQL INSERTS,如下所示(未经测试,您需要检查语法)

    INSERT INTO dbname2@informix_server2:table
    SELECT * FROM dbnam1e@informix_server1:table_name
    

    这当然意味着表结构一致,如果结构不同,您可以使用列列表。

    会导致您出现问题的一个方面是参照完整性。如果您有外键,那么这会给您带来问题,因为您需要确保插入以正确的顺序完成。您可能还会遇到 SERIAL 列和 INSERTS 的问题。加载不会遇到这个问题,因为您可以将序列值加载到表中并保留原始值。

    我经常发现最好的解决方案如下

    • 从数据库 1 中获取架构。
    • 把它分成两部分 段是所有的表创建 陈述,第二部分是全部 CREATE INDEX 的,参考的 完整性等声明。
    • 从第一部分创建 database2 架构。
    • 使用 UNLOAD/LOAD 将数据加载到 数据库2。
    • 将架构的第二部分应用于 database2

    这与 dbimport 所经历的过程非常相似,但从历史上看,我一直无法使用 dbimport,因为我的数据库包含另一个数据库的同义词,而 dbimport 可以/不使用这些。

    【讨论】:

    • dbexport/dbimport 的另一大限制是您必须一次性完成整个数据库。最初的问题没有提到必须复制整个数据库,只有 some_data.
    【解决方案3】:

    UNLOAD 和 LOAD 是最简单的方法。通过排除它们,您也排除了使用 DB-Load 和 DB-Access 以及 DB-Export 和 DB-Import。这些是最简单的方法。

    如前所述,您可以考虑使用 HPL。

    您还可以设置一个 ER 系统 - 它比 UNLOAD 后跟 LOAD 更难,但不使用禁止操作。

    如果两台机器基本相同,可以考虑onunload和onload;我不会推荐它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-06
      • 1970-01-01
      • 1970-01-01
      • 2012-04-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多