在 Windows 上部署 Informix 数据库,并解决相关错误问题总结
一、翻译说明
今天在使用 JDBC 程序为测试提供 Informix 测试数据,并读取验证库中二进制数据的内容的时候,发现每次都会报 java.sql.SQLExceprion:Invalid default sbspace name (sbspace)
异常,并且插入数据失败。但是插入普通字符串数字等字段的时候不会报错。
一开始很不明白 sbspace
的意思,但是大概猜测应该是数据库的某个空间。
后来证明是跟 Informix 对插入 CLOB/BLOB
类型的数据时候的配置有很大关系,得益于原文的启发,特别翻译过来供大家参考。
二、译文
目前我们正在添加 Carbon WSO2 的 IBM Informix 支持。一个挑战就是要让Informix在Linux或Mac上运行。任何情况下都有自己的问题,所以最终把Informix部署在了微软的Windows上。在一个 Windows 7 的虚拟机上尝试,但我希望这些步骤会和其他 Windows 版本相同,包括轻微的变化。
1) 从这里下载 IBM Informix 开发版。选择 “Ultimate Edition or Developer Edition AIX, HP-UX, Linux, Mac OS, Solaris, Windows”,然后选择 Informix 开发版的Windows 64版本 11.70FC7DE。
2) 选择默认/典型选项后开始安装。
3) 当安装开始后,安装程序会创建一个叫 informix
的用户,和一个叫 Informix-Admin
的组,并且需要你为创建的用户输入一个密码。
4) 安装结束后,你将会在 Windows 的开始菜单中看到如下的菜单。
5) 使用 informix
用户登录系统。
6) 你可以使用开始菜单中的 Server Instance Manager
工具创建任意数量的服务实例。默认情况下,informix创建了一个叫 ol_informix1170
的默认实例。
7) 在开始菜单中找到 ol_informix1170
项,右键并选择 以管理员身份运行
,开启 ol_informix1170
实例。
8) 现在你可以在命令提示符下输入以下内容来开启服务。
:\> oninit -ivy
9) 如果想要看服务的运行状态,键入以下内容:
:\> onstat -g dis
There are 1 servers found
Server: ol_informix1170
Server Number: 0
Server Type: IDS
Server Status: Up
Server Version: IBM Informix Dynamic Server Version 11.70.FC7DE
Shared Memory: 0x80000000
INFORMIXDIR: C:\PROGRA~1\IBM\Informix\11.70
ONCONFIG : C:\PROGRA~1\IBM\Informix\11.70/etc/onconfig.ol_informix1170
SQLHOSTS : C:\PROGRA~1\IBM\Informix\11.70/etc/sqlhosts
Host: prabath-PC
10) 若要创建一个数据库,在开始菜单中找到 ol_informix1170
项,右键并选择 以管理员身份运行
,并键入:
:\> dbaccess
你可以根据顶部的菜单导航来创建一个数据库,选择 Database
,按下回车,然后选择 Create
为数据库提供一个名称,然后按下回车。
选择 Log
来开启事务。
选择 Buffered Log
并回车,然后退出。
选择 Create-new-database
并按下回车来完成数据库的创建。
12) 在 Informix 中运行 SQL 脚本的话使用以下命令。
:\> dbaccess DATABASE_NAME SQL_SCRIPT
例如:
:\> dbaccess WSO2CARBON_DB c:\informix.sql
13) 要停止 Informix 的服务,你可以在开始菜单中找到 ol_informix1170
项,右键并选择 以管理员身份运行
,然后输入
:\> onmode -ky
14)若需要在 Informix 中使用一个 Java 的客户端工具,你可以在这里找到驱动。另外,对于 JDBC 的连接 url,你可以使用下面的这个:
jdbc:informix-sqli://192.168.1.4:9088/WSO2CARBON_DB:INFORMIXSERVER=ol_informix1170
ol_informix1170
是数据库实例的名字。
下面是相应的驱动程序类。
com.informix.jdbc.IfxDriver
其他注意事项:
1)如果你遇到下面的这个错误,这个链接可能会有帮助。
Error Only member of IXDBSA group (Informix-Admin, by default) can start IBM Informix Dynamic Server. on Windows.
2) Error : "oninit: Fatal error in shared memory initialization"
在你停止 Informix 服务后尝试使用 :\> oninit -ivy
来启动它的时候,你可能会碰到这个错误。
要摆脱这个错误,那么在停止 Informix 服务后,避免使用 i
选项来启动它。确保 i
选项只应该在你重启机器后第一次尝试启动 Informix 服务的时候使用。
3) Error : Invalid default sbspace name (sbspace)
这个错误一般在你尝试在 Informix 中插入 CLOB/BLOB
类型的数据的时候发生。想要跳过这个错误,你需要创建一个 sbspace
。
:\> onspaces -c -S sbspace2 -p c:\informix_data\data.dbs -o 100 -s 20000 -Df "LOGGING=ON"
确保在执行以上这条命令的时候,c:\informix_data\data.dbs
文件是存在的。(译注:没有就自己创建一个文本文件,然后把文件名连同后缀一起改掉。文件创建的位置一般在 Informix 的数据目录。)
现在,你需要在 INFORMIX_HOME/etc
目录里找到 onconfig.ol_informix1170
文件,然后更新它的内容。
在文件中找到 SBSPACENAME sbspace
,然后使用你创建的 sbspace 名称重新命名为 SBSPACENAME sbspace2
。
重启 Informix 服务。
完成。
做了那么多数据库的数据抽取检查,Informix真的是最难用的数据库了。IBM的东西真的是无力吐槽👿