日期:2014-05-16  浏览次数:20425 次

Informix 数据库常用问题解决方案
转自博文:
http://blog.csdn.net/qinghua9/article/details/5295968
1.1修改锁模式方法
用dbaccess选择要修改的数据库,在Query-language中执行

修改某个表table_name为行锁:alter table table_name lock mode (row);

如果要修改为页锁可以将row 换为page



1.2SQLCODE=240
l         INFORMIX解释:

-240 不能删除行。
数据库服务器不能完成DELETE语句的执行。滚回当前的事务处理;然后,检查伴随的 ISAM错误代码,得到更多的信息。

l         问题分析:

这种情况比较复杂,数据库可能出错的方面比较多,但在应用文件日志中都有记录是哪个数据库的哪一张表有问题。

l          参考解决方法:

可以通过informix的oncheck命令进行检查修复,如果修复后还有问题,则只有将该表的数据unload出重新创建此表,再将数据load到新表中,

oncheck –cID databasename:tablename

1.3SQLCODE=268
l         INFORMIX解释:

-268 唯一限制<限制名>违法。
在执行这条语句期间,重复的值引入受唯一性限制保护的字段。不允许有重复值的行进入表中(不能插入或修改)。对于OnLine数据库服务器,在发现重复值之前由这条语句做的任何改动已被滚回。(然而,在事务中先于语句的影响,如果有的话,仍然起作用,必须明确地滚回或提交。)

l         问题分析:

上下级数据该表的主键不一致,请检查是否一致。

l          参考解决方法:

修改分公司索引,等待重新装载。

1.4SQLCODE=244
l         INFORMIX解释:

-244 不能按物理顺序读来取得下一行。
数据库服务器不能读取包含一个表的某行的磁盘页。更多的信息请检查伴随的ISAM 错误代码。可能硬件有问题,或表文件或索引文件可能被损坏。除非ISAM错误代码或操作系统信息指出其它原因,否则运行bcheck或secheck实用工具来检验文件的完整性。

l         举例:

l         问题分析:

同时对数据库的某个表操作时没有用到索引,导致应用程序之间出现互锁现象。

l          参考解决方法:

对数据库做优化,修改表的索模式为记录锁。等待重新装载。

问题十:索引优化

问题一:修改锁模式方法

1.5SQLCODE=242
l         INFORMIX解释:

-242 不能打开数据库表< 表名>。
数据库服务器不能开始读取表。更多的信息请检查伴随的ISAM错误代码。问题可能是在文件权限,硬件错误,或被损坏的系统目录等方面。除非ISAM错误代码或操作系统信息指出其它原因,否则运行bcheck或secheck实用工具来检验文件的完整性。

l          参考解决方法:

参考问题五:SQLCODE=244



1.1SQLCODE=271
l         INFORMIX解释:

-271 不能把新行插入这个表。
这个问题可能有许多原因,包括锁定的表或满磁盘。更多的信息请查看伴随的ISAM 错误代码。

l         问题分析:

可能是数据库空间、表空间满或者互锁。

l          参考解决方法:

检查数据库空间,如果是数据库空间满,则及时通知数据库管理员。如果还不能解决问题,则重建表,即先将表数据卸载下来,然后重新建表,在建表的语句中添加extent size 1048576 next size 104857 lock mode page,最后将表数据重新装载上去。

如create table sf01

(

    ksdm char(8) not null ,

    policyno char(22) not null ,

。。。。。。

    sffid serial not null ,

    primary key (policyno) constraint "datagath".sf01_p

) extent size 1048576 next size 104857 lock mode page;

 

1.2SQLCODE=329
l         INFORMIX解释:

-329 数据库没有找到或没有系统权限。
试图打开的数据库在数据库服务器中找不到。检查名称的拼写。可能是数据库放在不同的数据库服务器(或网络系统),而你忽略了指定有该数据库名的服务器名(或节点名)。如果确认数据库如你拼写的那样存在,下一步就取决于正在使用的数据库了。 如果使用的是INFORMIX-SE,看得见的数据库是在形如<数据库名>.dbs中的目录名。必须对它们可读可写。数据库服务器首先在当前工作目录查看,然后是在DBPATH环境变量中命名的每个目录。这个错误的最常见原因是不正确设置或没有设置DBPATH环境变量。 如果使用的是INFORMIX OnLine动态服务器,按所拼写的数据库不存在。在某些环境中,可能有一次运行两个或更多的OnLine的实例,每个实例有它自己的数据库集合。对于版本6.0或以后版本,INFORMIX SERVER环境变量决定使用哪个INFORMIX OnLine 动态服务器的实例。对于版本5.01或更早的版本,TBCONFIG环境变量指出配置文件,它决定使用哪个INFORMIX -OnLine的实例。如认为可能在使用错误的OnLine实例,请找OnLine管理员。

l         问题分析:

1、 跨server连接数据库时,没有指定服务器名称。

2、 未启动数据库。

l         参考解决方法:

检查数据库是否已经启动,如果没有,则请分公司启动数据库。

1.3SQLCODE=387
l &