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 参考解决方法:
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 INFORMIX解释:
-387 没有连接权限。
不能访问这条语句所要求的数据库,因为没有被获准与该数据库连接的权限。请与拥有该数据库管理员权限的人联系,并向他申请与该数据库连接的权限。
l 问题分析:
没有给下发用户赋连接权限。
l 参考解决方法:
给下发用户授权,然后在下发用户下,用dbaccess连接该数据库,测试连接是否成功。
1.4上下级数据库表结构不一致
l 现象描述
SQLCODE=1215,SQLCODE=217。
l 问题分析:
产生原因可能是作升级操作或者修改数据库结构导致上下级公司数据库表结构不一致。
l 参考解决方法:
仔细查询上下级数据库表结构,检查每个字段的字段明、数据类型、长度是否一致,如果不一致,将下级数据库表结构修改和上级数据库一致。
1.5SQLCODE=217
l INFORMIX解释:
-217 查询中在任何表中都无法找到字段 column-name (或 SLV 未定义)。
该名称出现在此次查询的选择列表或 WHERE 子句中,但未在表中定义且不以语句本地变量 (SLV) 的定义出现。检查字段名或 SLV 名以及所选表名的拼写是否与所需的一样。 如果所有名称的拼写都正确,则所使用的表是错的,或数据库已改变,或者尚未定义 SLV。如果此无法找到的名称是对某一字段的引用,则该字段可能已重命名或被取消。如果此无法找到的名称代表的是 SLV 而且在语句中已定义了这个 SLV,则要确保 SLV 定义出现在对 SLV 名的其它所有引用之前。 当引擎试图更新与该表有关的视图时,在执行 ALTER TABLE 期间,该错误消息也会出现。
l 问题分析:
可能是上下级数据库升级不一致导致,问题十一:上下级数据库表结构不一致
1.6SQLCODE=1215
l INFORMIX解释:
-1215 值过大,不能放进一个INTEGER。
INTEGER数据类型能接受绝对值从 0 到 2,147,483,647 (±231-1)的数值。若要存储超过此范围的数,字段或变量必须重定义为DECIMAL类型。(-2,147,483,648 是32位的值,但不被接受;在4GL中,它被用来指示一个null值。)
l 问题分析:
可能是上级数据库字段类型支持的长度比较大导致。
l 参考解决方法:
按照实际长度修改分公司字段类型。
1.7SQLCODE=201
l INFORMIX解释:
-201 出现语法错误。
该一般性错误表明 SQL 语句的格式有错。可查找是否有遗漏或多余的标点(如遗漏或多余的逗号、子查询两边遗漏了括号等等)、拼写错误的关键字(如将 VALUES 写成 VALEUS )、用错的关键字(如 INSERT 语句中的 SET 或子查询中的 INTO )、顺序错误的关键字(如将 "NOT value IS" 写成 "value IS NOT" ),或将保留字用作标识符等。 提供完全 NIST 兼容的数据库服务器不保留任何字;在这些服务器上可以进行的查询,在较早期版本的 Informix 数据库服务器上就有可能失败并返回错误 -201。 试图将 round-robin 语法与索引上的 CREATE INDEX 或 ALTER FRAGMENT INIT 一起使用可能会引起此错误。不能用 round-robin 索引。
l 问题分析:
产生原因可能是数据不规范,如单证号带有特殊字符或是单引号”’”,导致应用生成SQL时报语法错误。
l 参考解决方法:
修改loadfile下的报错的数据文件,然后用bin目录下的compress.sh压缩回去。重新启动装载。
1.1SQLCODE=134
l INFORMIX解释:
-134 ISAM错误: 没有更多的锁。
ISAM处理器需要锁定一行或一个索引页但是已没有可用的锁了。一个操作所需要的锁的个数主要取决于在一个事务中改变的行的个数。你可以通过减少每个事务所修改的行数来减少一个操作所需的锁的个数,或通过锁定整个表来代替锁定行。可用的锁的个数根据你所使用的实现可能在下面三个位置之一被配置:操作系统核心;共享内存段;或是OnLine。向你的系统管理员咨询如何获得更多的锁。
l 问题分析:
需要删除或更新的数据过多导致的错误。
l 参考解决方法:
查看是否锁资源不足,请系统管理员解决。
1.2索引优化
l 问题分析:
由于集中对数据库的修改、查询比较多,对数据库的索引要求也比较高,应用会因为索引的没有及时优化而导致互锁或提取插入慢。
l 参考解决方法:
选择要优化的数据库执行
UPDATE STATISTICS HIGH 或 UPDATE STATISTICS MEDIUM
1.3SQLCODE=206
l INFORMIX解释:
-206 数据库中没有指定的表。
在数据库中找不到需要的表或者视图。
l 问题分析:
可能该数据库中没有需要的表或者该表已经改名或者已经从数据库中删除
1.4SQLCODE=691
l INFORMIX解释:
-691 在参照约束的参照表中遗漏主键。
违反了参照的约束条件。当试图把值插入到参照的约束条件中的某个字段或者修改其中某个字段的时候,试图插入的值不在被参照的父键里。
l 问题分析:
插入纪录时存在约束,插入时必须要先在与其有主键关系的表中插入相应的纪录。
l 参考解决方法:
查看数据库中需要插入纪录的表所存在的主键关系,先在与其有关联的表中插入相关记录,然后再插入需要插入的纪录
1.5SQLCODE=692
l INFORMIX解释:
-692 约束的键值仍然被参照。
违反了参照的约束条件。这情况通常发生在你试图删除某一行,而该行的某一列(父键)与另一行的某一列(子键)有约束关系的时候。
l 问题分析:
删除纪录的时候存在约束,删除时必须要先将与其有外键关系的表中的相应纪录删除。
l 参考解决方法:
查看数据库中需要删除纪录的表所存在的外键关系,先将与其有关联的表的相关记录删除,然后再删除需要删除的纪录。
1.6SQLCODE=847
l INFORMIX解释:
-847 正在装载的行报错。
这种情况通常出现在装载数据文件的某一行的数据时。操作将在插入该行时报错并退出。如果该操作时在某个事务中,会造成事务回滚,否则在重新开始执行此项操作前,要把已经插入的纪录从表里面删除或者把文件中已经装上的数据移走。
l 问题分析:
可能存在数据转换问题,(例如,在需要数值类型数据时出现了非数值型数据,非法格式的日期型数据或者太长的字符串)。还可能是在不为空的列里面插入了一个空值。
l 参考解决方法:
编辑装载报错的文件,找出报错的行,并检查是否有存在类似问题的行。确认文件没有问题之后,重新执行装载。
1.1SQLCODE=568
l INFORMIX解释:
-568 数据库没有逻辑日志。
l 参考解决办法:
请分公司加日志。
1.2下发传输未完成
l 问题描述
下发过程中程序中断或者挂起,数据未传输完成。
l 问题分析
1、 可能是总公司数据量过大,导致程序coredump了。出现这种问题的数据一般只能是按时间传输数据的表或者全量表。
2、 其他原因导致进程被中断。
l 参考解决办法
1、 检查数据量是否过大,如果确实过大,需要考虑是否采用别的方式下发数据。请相关系统的老师查看是否正常。
2、 做重新传输的准备工作。
1) 如果是ids系统
先执行$HOME/application/dataexch/bin下命令:sh updatecontrol.sh 1;然后删除sendfile下的txt文件。
2) 如果是其他系统
删除$HOME/dataexchange/DataExch_new/sendfileBak下的txt文件。
3、 重新启动传输
执行bin目录下的tmpsend.sh。
使用方法:sh tmpsend.sh 系统号[比如:01]&
4、 扫尾工作
Ids补传之后,需要在$HOME/application/dataexch/bin下执行命令:sh updatecontrol.sh 2