我是个有偏见的观察者(我在IBM的Informix上工作),请谨慎对待我的评论。
如果您的应用程序是使用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具有额外的语法来为数据库定位C-ISAM文件的CREATE TABLE;IDS具有完全不同的扩展集。基本的CREATE TABLE相同(虽然IDS具有SE没有的类型,例如VARCHAR),但修饰不同。
- SE具有CREATE AUDIT和DROP AUDIT,而IDS没有(它有其他审核设施)。
- SE具有START DATABASE和ROLLFORWARD DATABASE;IDS没有(IDS中的恢复和日志记录不同)。
主要可能导致问题的领域是事务管理。IDS和SE都有未记录、记录和“LOG MODE ANSI”数据库。在IDS中,建议使用记录数据库 - 这是一个强烈的建议。IDS在记录数据库中提供原子语句 - 要么整个语句工作,要么整个语句失败。然而,许多SE应用程序并没有考虑事务。当数据库上有事务时,有些事情无法完成,例如在事务范围之外为更新打开游标。这就是从SE迁移到IDS的代码所遇到的问题。此外,您不能在事务之外锁定表,也不能通过提交或回滚来解锁表。
这将是多大的问题取决于您在SE中使用了什么以及程序的设计方式(如果它们被设计而不是随意组合)。IDS未记录数据库和SE未记录数据库非常接近,并且您可以从一个迁移到另一个。但是,只有在使用记录的数据库时,IDS才能执行某些操作(例如复制),因此您应该着眼于使用记录的数据库。
然而,迁移到CSDK 3.50应该只是重新编译,除非您已经做了一些极其糟糕的事情。