informix-4gl常见错误
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Informix-4gl编程过程中常见错误
Informix -244 错误:
Could not do a physical-order read to fetch next row.具体错误解释:
#finderr -244
原因:
a.锁表
b.记录太多
c.页损坏
d.某个进程死了以后资源未释放导致
在数据库端用 onstat –g ses/onstat –g sql /
Onstat –k 等找出锁表进程,用onmode –z结束该进程,不行,重启数据库释放。
锁方式:
行方式(row),页方式(默认page),表方式(table)。
解决:
1.降低锁级别
2.减少加锁事务的时间跨度
3.设置等待解琐时间
相关命令:
)检查索引及页损坏情况
#oncheck –cID database_name:table_name
) 查看锁级别
#oncheck –pt database_name:table_name
)设置锁级别(行方式)
#alter table table_name lock mode(row)
)设置隔离级别
#set isolation to dirty read
)设置等待解锁时间(不宜过大)
#set lock mode to wait second(秒)
不等待
#set lock mode to not wait
1:$ onstat -k | grep HDR+X
HDR+X 为排他锁
HDR 头
X 互斥
owner
是正持有锁的线程的共享内存地址
2:$ onstat -u |grep c60a363c
c60a363c 为1中查到的owner内容。
sessid
是会话标识符编号
3:$ onstat -g ses sessid
根据sessid得到进程pid
pid
与此会话的前端关联的进程标识
$ onstat -g sql sessid
通过上面命令查看执行的sql语句
4:$ ps -ef |grep pid
由此,我们可得到锁表的进程,可根据实际锁表进程的重要程度的具体情况采取相映处理方法:
对于重要且该进程可以自动重联数据库的进程,可以用onmode -z sesid 的方法杀掉锁表session,
$ onmode –z sessid
否则也可直接杀掉锁表的进程kill pid。
$ kill -9 pid
将表的页锁改为行锁
参考语句为
unload to optimize.sql delimiter "" select 'alter table
'||tabname||
' lock mode(row)'||';'from systables where locklevel=" P" and tabid > 99
将卸载的optimize.sql稍微删除一下其中出现的字符或乱码,后运行,即可把表的页锁改为行锁