Debian Informix数据库可能遇到的常见问题及其解决方案如下:
逻辑日志满
- 故障现象:数据库不再进行任何操作,使用
onstat –l
命令观察逻辑日志状态,所有的逻辑日志都处于已使用未备份状态,即 flags 为 U------ 标志。
- 故障分析:由于数据库的大部分操作都需要记录逻辑日志,如果逻辑日志由于各种各样的原因被充满都会导致数据库停止正常的操作,等待逻辑日志空间的释放、重新再利用。这一般会由于数据库逻辑日志没有及时备份、数据库逻辑日志空间分配过小、逻辑日志里面包含活动事务、包含检查点信息等原因。
- 故障处理:
- 检查是否是由于逻辑日志备份出现问题,如果是不能备份请查找不能备份的原因,可能是由于磁带满或磁带机出现故障,或者是磁带设备繁忙。
- 个别情况下即使逻辑日志标志为已备份但是仍然是不可使用的,包括:该逻辑日志包含活动的事务信息,由于数据库需要考虑其可能的回滚操作,因此是不会让该逻辑日志的内容被覆盖的,可以通过
onstat –x
检查其 beginlg
来确定事务的逻辑日志起始位置。
- 包含检查点信息,可以通过
onstat –l
观察 flags 的最后一位为 L 的逻辑日志的位置,在它之后的逻辑日志即使已经备份也是不可使用的,因为这些逻辑日志内容将会在快速恢复中使用到。
- 在这些情况出现以后如果暂时不能快速的处理,在 IDS 9.3x 或以后的版本上可以使用逻辑日志联机增加的功能,只要有空闲的 chunk 空间,使用
onparams -a -d <DBspace> -s <size> -i
即可在当前逻辑日志后增加新的逻辑日志,并且不需要执行 0 级备份。
锁表问题
- 故障现象:在正常的数据库操作中会经常出现-243、-244 等一类的锁错误码,出现类似 “Could not position within a table” 或 “Could not do a physical-order read to fetch next row” 的锁表现象。
- 故障分析:数据库在进行修改操作的时候为了防止其他用户的同时修改,都会在修改所涉及的数据上设置对应的锁,如果其他用户再访问到这些已经被放置上锁的数据,就会出现锁失败。
- 故障处理:
- 执行
onstat –u
来获得实际的 session 信息,从中就可以找到锁的拥有者。
- 调整数据库隔离级别,例如使用 dirty read,将数据库表的缺省页级锁修改为行级锁。
- 设置锁等待时间。
- 调整应用 SQL,提高执行效率,尽量快的完成事务处理,释放资源。
- 如果需要快速处理锁冲突的情况,在确定锁的实际拥有者以后可以确定是否应该终止其操作,执行
onmode –z sid Kill specified session id
,以达到释放锁资源的目的。
长事务问题
- 故障现象:在数据库日志里面出现发现长事务的提示,受影响的事务处于回滚状态,个别情况下会导致整个数据库实例的其他数据库会话都停止执行。
- 故障分析:当一个活动事务它所占用的逻辑日志个数的比例达到或超过 LTXHWM(长事务基准线)所设定的值,数据库就会判定该事务为一个长事务,对该事务进行回滚操作,如果这个时候逻辑日志的使用个数仍然持续上涨达到或超过 LTXEHWM 所设定的值,则数据库会停止其他会话的正常运转,全力保证该长事务的回滚操作。
- 故障处理:
- 根据数据库日志里面所提供的信息可以很方便的发现具体是哪一个事务造成了长事务。
- 事后可以有针对性的调整应用将大的事务划分为小事务进行提交。
- 避免一个活动事务长时间没有后续的操作。
- 提供充足的逻辑日志空间。
数据库 chunk 出现异常,I/O 失败
- 故障现象:数据库日志中出现 chunk IO 错误,使用
onstat –d
观察 chunk flag 的状态是 down 的状态,数据库操作中不能操作包含在这些 chunk 中的数据,如果使用到这些数据可能会返回错误,严重情况下会导致数据库宕机。
- 故障分析:由于发生 IO 错误,数据库不能正常的操作包含在受影响 chunk 中的数据,所有的操作请求都将失败。这可能是由于磁盘设备出现问题、chunk 所使用的设备不存在、使用的链接设备不存在、设备的权限错误等可能性。
- 故障处理:
- 根据前面所列出的可能性逐一进行检查。
- 一个快速确定存储设备是否可用的办法是:使用
dd
命令实际读取该设备,这里需要强调的是只能做读取操作,不能写入,严禁在 of 设备项指定为 chunk 路径,因此我们也只能验证其存储设备是否可读,例如:dd if/home/informix/940/dsk/data_chk1 of/dev/null bs2048k
。
- 在确定所有硬件或设置都已经恢复正常以后,可以首先尝试使用
onspaces –s
进行恢复,如果还不能恢复成功,请联系 IBM 相关人员技术支持。
希望这些信息能帮助您解决Debian Informix的常见问题。