我是一个有偏见的观察者(我在 Informix 上为 IBM 工作) - 谨慎对待我的评论。
如果您的应用程序是用 Informix ESQL/C 编写的,那么您必须进行大手术才能将它们迁移到其他系统。您需要决定使用哪个替代接口 - 您的跨平台选择(以 C 作为基本语言)是 ODBC,但 Oracle 提供了 OCI,而 Sybase 提供了 TDS 作为替代方案。
相比之下,使用 Informix ESQL/C,升级到当前版本(Informix ClientSDK 3.50,包含 ESQL/C 3.50,比您当前使用的 ESQL/C 6.00 更新)应该很轻松,除非您已经外出你写坏代码的方式。
即使只是简单地迁移数据也可能有点创伤——并非无法克服。在某种程度上,复杂性取决于您使用的数据类型。(字符串很容易迁移;例如,日期和时间值不太容易。)但是,正如您所说,迁移应用程序需要大量工作,除非您非常有先见之明并编写了一个非常好的数据抽象层。
升级到 Informix SE 7.26 将不费吹灰之力 - 获取软件,安装它,将其指向您现有的数据库。您可能希望重新编译您的程序以使用更现代的 CSDK,但您可以谨慎地逐步执行此操作(两个 INFORMIXDIR 值,一个用于旧代码,一个用于新代码)。
升级到 Informix Dynamic Server (IDS) 11.50 需要您从 SE 导出数据 (DB-Export) 并将其导入 (DB-Import) 到 IDS。一旦 IDS 启动并运行,这也将非常简单。启动和运行 IDS 比 SE 需要更多的努力,但并不是那么难。
显然,我的建议是继续使用 Informix。当然,决定权在你。
使用 IDS,我们是否必须进行代码更改或只是重新编译?
IDS 与 SE 密切相关,但又有所不同。IDS 提供了几乎严格的 SE 功能超集。我能想到的存在差异的地方主要是边缘情况:
- SE 为 CREATE TABLE 提供了额外的语法来定位数据库的 C-ISAM 文件;IDS 有一组完全不同的扩展。基本的 CREATE TABLE 是相同的(尽管 IDS 具有 SE 没有的类型,例如 VARCHAR),但装饰不同。
- SE 有 CREATE AUDIT 和 DROP AUDIT 而 IDS 没有(它有其他审计设施)。
- SE 有 START DATABASE 和 ROLLFORWARD DATABASE;IDS 没有(恢复和登录 IDS 是不同的)。
可能导致问题的主要领域是事务管理。IDS 具有未记录、记录和“LOG MODE ANSI”数据库,SE 也是如此。在 IDS 中,我们鼓励您使用已记录的数据库——强烈建议您这样做。IDS 在记录的数据库中提供原子语句——语句作为一个整体工作或作为一个整体失败。然而,许多 SE 应用程序在编写时并没有考虑到事务。当数据库上有事务时,有些事情是不能做的,例如在事务范围之外打开游标进行更新。这就是从 SE 迁移到 IDS 的代码。此外,您不能在事务中锁定表,并且不能通过 COMMIT 或 ROLLBACK 解锁表。
这将有多少问题取决于您在 SE 中使用的内容以及程序的设计方式(如果它们是设计的而不是放在一起的)。IDS 未记录数据库和 SE 未记录数据库非常接近 - 您可以从一个迁移到另一个。但是 IDS 只有在记录数据库时才能执行操作(如复制),并且您应该以使用记录数据库为目标。
然而,迁移到 CSDK 3.50 应该只是重新编译,除非你已经设法做了一些非常可怕的事情。