逻辑日志满
故障现象:
数据库不再进行任何操作,使用 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 等一类的锁错误码出现
-243 Could not position within a table table-name.
-244 Could not do a physical-order read to fetch next row.
故障分析:
数据库在进行修改操作的时候为了防止其他用户的同时修改,都会在修改所涉及的数据上设置对应的锁,如果其他用户再访问到这些已经被放置上锁的数据,就会出现锁失败。例如如果需要知道在指定的表上是有哪些用户具体占用了锁,可以通过以下的步骤:
首先确定表的 partnum,可以通过查询 systables 里面的 partnum,也可以通过执行 oncheck –pt database:tabname 查看 Partition partnum 来获得,该数据为十进制数,需要转换为十六进制;
执行 onstat –k | grep partnum 来查找相应的信息,partnum 为上一个步骤获得的结果,需要使用具体的十六进制值来替换,观察其 owner 字段的地址信息;
执行 onstat –u | grep address 来获得实际的 session 信息,address 为上一个步骤获得的结果,这是就可以找到具体的锁的拥有者。
oncheck -pt stores:customer
…
Partition partnum 2097201
2097201=0x200031
onstat -k| grep 200031
5409bed4 0 54d93878 5409be7c HDR+IX 200031 0 0
5409bf2c 0 54d93878 5409bed4 HDR+U 200031 100 0
onstat -u | grep 54d93878
54d93878 Y--P--- 6 informix 12 5558e720 0 3 113 0
故障处理:
调整数据库隔离级别,例如使用 dirty read;将数据库表的缺省页级锁修改为行级锁;设置锁等待时间;调整应用 SQL,提高执行效率,尽量快的完成事务处理,释放资源;如果需要快速处理锁冲突的情况,在确定锁的实际拥有者以后可以确定是否应该终止其操作,执行 onmode –z <sid> Kill specified session id,以达到释放锁资源的目的。
长事务
故障现象:
在数据库日志里面出现发现长事务的提示,受影响的事务处于回滚状态,个别情况下会导致整个数据库实例的其他数据库会话都停止执行。
故障分析:
当一个活动事务它所占用的逻辑日志个数的比例达到或超过 LTXHWM 所设定的值,数据库就会判定该事务为一个长事务,对该事务进行回滚操作,如果这个时候逻辑日志的使用个数仍然持续上涨达到或超过 LTXEHWM 所设定的值,则数据库会停止其他会话的正常运转,全力保证该长事务的回滚操作。
故障处理:
根据数据库日志里面所提供的信息可以很方便的发现具体是那一个事务造成了长事务。系统在将某个事务判定为长事务以后就会自动对其进行回滚操作。事后可以有针对性的调整应用将大的事务划分为小事务进行提交;避免一个活动事务长时间没有后续的操作;提供充足的逻辑日志空间,这里所指出的不仅是空间的总量需要增加,逻辑日志的个数也是应该增加的,因为判断的标准是以逻辑日志的使用个数所占比例来确定的。在 INFORMIX 9.3X 以后的版本中可以通过动态增加逻辑日志的手段避免由于长事务带来的一些不良影响,在长事务回滚过程中如果逻辑日志空间被消耗完毕,如果 DYNAMIC_LOGS 设置为 2,数据库服务器会自动在最后创建的逻辑日志所存在的 dbspace 上查找空余空间,按照最后创建的逻辑日志的大小自动在当前逻辑日志之后新增逻辑日志,如果不能满足需要则会创建失败,需要管理员手工添加。
数据库 chunk 出现异常,I/O 失败
故障现象:
数据库日志中出现 chunk IO 错误,使用 onstat –d 观察 chunk flag 的状态是 down 的状态,数据库操作中不能操作包含在这些 chunk 中的数据,如果使用到这些数据可能会返回错误,严重情况下会导致数据库宕机。例如:
onstat –d
…
Dbspaces
554241a0 2 0x1 2 2 N D informix datadbs
…
54dd2610 2 2 0 25000 23964 PD-- /home/informix/940/dsk/data_chk1
故障分析:
由于发生 IO 错误,数据库不能正常的操作包含在受影响 chunk 中的数据,所有的操作请求都将失败。这可能是由于磁盘设备出现问题、chunk 所使用的设备不存在、使用的链接设备不存在、设备的权限错误等可能性。
故障处理:
根据前面所列出的可能性逐一进行检查。一个快速确定存储设备是否可用的办法是:使用 dd 命令实际读取该设备,这里需要强调的是只能做读取操作,不能写入,严禁在 of 设备项指定为 chunk 路径,因此我们也只能验证其存储设备是否可读,例如:
dd if=/home/informix/940/dsk/data_chk1 of=/dev/null bs=2048k
在确定所有硬件或设置都已经恢复正常以后,可以首先尝试使用 onspaces –s 进行恢复,如果还不能恢复成功,请联系 IBM 相关人员技术支持。
不能插入数据
故障现象:
在向数据库表插入数据的时候报没有空间或不能创建新的 extent,其返回错误码可能是:
-131 ISAM error: no free disk space.
-136 ISAM error: no more extents.
-271 Could not insert new row into the table.
故障分析:
由于表所存在的 dbspaces 上没有足够的连续空间来创建新的 extent;达到每个单片表的 extents 个数上限;达到每个单片表记录数的上限,以上 3 种可能都会导致不能插入数据情况的发生。
故障处理:
在出现这种问题以后,首先应该查看应用日志、应用程序,也可以通过查看当前正在执行并返回错误的 SQL 以确定到底是哪张表不能插入数据。在定位受到影响的表以后应该确定表所存在的 dbspace 是否有足够的连续空闲空间,如果没有请相应的增加 chunk 空间以扩充其数据库存储空间。在确认存在足够的连续空闲空间以后再检查是否达到后续的 2 个上限,可以使用一些脚本工具或数据库命令来实现这一点。在确认问题的原因以后,理想的解决方法是为数据库表提供更多的使用空间,例如增加 chunk、将表进行重建、将表进行合理的分片等;应急的处理原则是:小批量、小批量地删除部分数据,尽量将需要处理的数据限制在较小的范围内,通过多次的操作来达到删除数据的目的,避免出现大事务、长时间不能完成的情况出现。
分享到:
相关推荐
在 Informix 数据库中,锁表问题是一个常见的错误,会导致系统性能下降和数据不一致。锁表问题的解决需要对数据库进行深入的分析和诊断。本文将讨论 Informix 数据库锁表问题的解决方案,包括锁表的定位和处理。 一...
在1990年代初,推出了Informix OnLine版本,它针对大量用户的联机事务处理和多媒体应用环境进行了优化。在1993年,发布了Informix Dynamic Server(Informix IDS),IDS采用了Dynamic Scalability Architecture...
8. **故障排查**:学习如何识别和解决常见的Informix问题,如性能瓶颈、错误日志分析和故障诊断。 9. **SQL与存储过程**:熟悉Informix支持的SQL语法,编写复杂的查询语句和存储过程,以实现业务逻辑的自动化。 10...
- **常见问题**:列出并解答了用户在使用过程中可能遇到的一些常见问题。 - **故障排除**:提供了详细的故障排查流程和解决方法,帮助用户快速定位并解决问题。 ### 总结 IBM Informix DB-Access 是一款强大的...
8. **IBM Informix SQL参考指南**: 这是Informix SQL功能的全面参考,包括不常见的函数、操作符和高级SQL特性,对深化SQL技能大有裨益。 9. **IBM Informix数据库设计和实现指南**: 数据库设计是数据库管理的重要一...
然而,字符集问题往往是数据库管理和应用开发中的一个常见挑战。Informix 支持多种字符集,如拉丁、ASCII、UTF-8等,不同的字符集设置可能导致数据乱码或者无法正常显示。在Informix 27版本中,若遇到字符集问题,...
- **故障排除**: 学会如何诊断和解决常见问题,如性能下降、连接失败等。 ### 考试准备资源 对于准备参加IBM000-918考试的学习者来说,除了官方文档和培训课程之外,还可以参考第三方资源如TestInside网站提供的...
7. **故障排查与维护**:这部分内容将指导读者如何处理常见问题,如错误诊断、日志分析和性能瓶颈识别。还会讲解定期维护任务,如数据库的检查、清理和升级。 8. **高级特性**:Informix拥有许多独特的高级特性,如...
例如,`Class.forName("com.informix.jdbc.IfxDriver")`是加载驱动的常见方式,然后`Connection conn = DriverManager.getConnection(url, username, password)`用于建立连接,其中`url`是数据库的URL,`username`和...
IBM Informix SQL Reference Manual详细介绍了iSQL的各种命令和语法,通过阅读手册,用户可以了解每个命令的语法、参数和使用场景,以及如何解决常见的错误和问题。 7. **图标约定**: 手册中使用了特定的图标来...
#### 四、常见问题与解决方法 1. **安装过程中遇到权限问题**: - 确保当前用户具有足够的权限执行安装命令。 - 使用 `sudo` 或以 root 用户身份重新执行命令。 2. **缺少必要的库文件**: - 使用包管理器(如 ...
在Java应用程序中,与各种数据库进行交互是常见的需求,Informix JDBC驱动程序正是实现这一目标的关键组件。本文将深入探讨Informix JDBC驱动的相关知识点,帮助开发者更好地理解和使用这个强大的工具。 一、...
- **SQLCODE -1203**:表示死锁检测到,这是在并发事务处理中常见的问题,需要系统管理员介入来解决。 - **SQLCODE -2005**:表示数据库不可用,可能是由于数据库关闭、未正确配置或存在其他技术问题。 - **SQLCODE ...
.NET框架与Informix数据库的连接是一项常见的任务,尤其是在开发企业级应用时。Informix是一款功能强大的关系型数据库管理系统,尤其在处理大数据和实时事务处理方面表现出色。然而,当使用.NET进行连接时,可能会...
以上错误代码涵盖了 Informix 数据库中常见的一些错误情况。对于每个错误代码,都应该仔细检查相关配置和环境,以便快速定位问题所在。同时,也可以参考官方文档或寻求专业技术支持来解决问题。
三、常见错误及处理方法 1. 数据库连接错误:如“-940”错误,表示无法建立数据库连接,这可能是因为服务器未运行或网络问题。解决方法包括检查数据库服务状态、网络连接和配置文件。 2. SQL语法错误:“-104”...
### Informix DB-Access 使用方法详解 #### 一、引言 ...通过本文介绍的基本概念、安装配置步骤以及常见操作方法,相信读者已经能够熟练地使用 DB-Access 来处理日常工作中遇到的各种数据库管理任务。