Informix下大对象(BLOB和CBLOB)的处理机问题的解决办法
在informix数据库中大对象BLOB和CBLOB处理出错的分析和解决办法:
1:分析: Informix数据库中大对象存储在分为两大类: 简单大对象:TEXT、Byte对象,他们存放在BLOB表空间(普通表空间)中,如果IDS系统没有建立BLOB表空间,或缺省没有时,存储可能出错。 智能化大对象:BLOB、CLOB对象,他们存放在SBSPACE表空间(智能化表空间)中,如果IDS系统没有建立SBSPACE表空间,或缺省没有时,存储可能出错。错误信息为没有SBSPACE表空间存在 故我们在使用大对象时首先要检查是否创建相应的表空间:检查命令:onstat –d,显示: Dbspaces address number flags fchunk nchunks flags owner name c9e27d0 1 0x1 1 1 N informix rootdbs c9e2ab8 2 0x1 2 1 N informix ol_infxcrm c9e2c00 3 0x8001 3 1 N S informix sbspace c9e2d48 4 0x1 4 1 N informix datadbs1 c9e2e90 5 0x1 5 2 N informix db_data_info cd4f018 6 0x2001 6 1 N T informix db_temp_info cde83b8 7 0x8001 8 1 N S informix mydatasbsp cdf7548 8 0xa001 9 1 N S informix mydatatsbsp 8 active, 2047 maximum 如果flags标志中有S表示已建立智能化大对象空间,如果没有采用下面命令创建: 创建永久存储空间: onspaces -c -S mydatasbsp -p D:\Informix\crmdb\db_sb_infomix.dat -o 0 -s 100000 其中:: D:\Informix\crmdb\db_sb_infomix.dat 表示文件存放路径可以改,如果为unix或linux系统时:为/informix/infxdata/db_sb_informix.data。如果文件不存在先创建文件:unix为:touch db_sb_informix.data 就可以了。 2:表使用的表空间的正确性 在缺省情况下,我们在创建数据库时指定了使用的表空间,当在建表时系统缺省为创建的表使用缺省的表空间。但大对象在创表时一定要指定相应的表空间对象:其创建表的格式为: create table blob_test( id integer, name varchar(20), data blob, primary key (id) constraint pk_blob_test ); alter table blob_test put data in (sbspace); 3:最后一种情况是在前边都配置好的时候由于驱动程序的版本不正确导致数据大对象操作失败,建议采用Informix jdbc driver2.21.jc5这个版本的驱动程序,经过测试,比较稳定。
4.也可以使用如下方式:
a、创建存放大对象的空间
touch /home/informix/sbspaces/emos_integ_sp
onspaces -c -S emos_integ_sp -p /home/informix/sbspaces/emos_integ_sp -o 500 -s 20480
b、修改$INFORMIXDIR/etc/onconfig文件中的设置属性SBSPACENAME
SBSPACENAME emos_integ_sp c、重新启动数据库 |