将数据从一个Informix数据库复制到另一个数据库的脚本

时间:2009-06-17 08:36:35

标签: database scripting informix

我需要将数据从一个Informix数据库复制到另一个数据库。我不想使用LOAD来做这件​​事。有没有可以帮助我的脚本?还有其他办法吗?

3 个答案:

答案 0 :(得分:2)

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

如果是少量表和大量数据,请查看onunload,onload和/或High Performance Loader。 (我假设我们不是在谈论标准引擎。)

如果另一方面你有很多桌子而且HPL太过繁琐,请看看myexport / myimport(可在iiug.org网站上找到)。这些是标准dbexport / dbimport实用程序的非锁定等价物。

答案 1 :(得分: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的问题。加载不会遇到此问题,因为您可以加载到具有序列值的表中并保留原始值。

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

  • 从database1获取架构。
  • 将它分成初始的2个部分 segment是所有表创建 陈述,第二部分是全部 CREATE INDEX,参考 诚信等声明。
  • 从第1部分创建database2 架构。
  • 使用UNLOAD / LOAD将数据加载到 DATABASE2。
  • 将架构的第二部分应用于database2

这与dbimport经历的过程非常相似,但历史上我无法使用dbimport,因为我的数据库包含另一个数据库的同义词,而dbimport确实/不适用于这些数据库。

答案 2 :(得分:1)

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

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

你也可以设置一个ER系统 - 它比UNLOAD更难跟着LOAD,但是不使用verboten操作。

如果这两台机器完全相同,你可以考虑onunload和onload;我不推荐它。