逻辑日志空间满,数据库无法操作

故障现象:
  数据库无法进行任何操作,通过使用 onstat -l 命令观察逻辑日志状态,所有的逻辑日志都处于已使用未备份状态,即 flags 为 U------ 标志:

address number flags uniqid begin size used %used
44d58f88 7 U------ 32 2:53 25000 25000 100.00
44b2ff68 8 U—C-L 33 2:25053 25000 12846 100.00
44c0cf40 9 U------ 29 2:50053 25000 25000 100.00
44c0cfa8 10 U------ 30 2:75053 25000 25000 100.00
44d3c450 11 U------ 31 2:100053 25000 25000 100.00
5 active, 5 total

故障分析:
  该故障一般是备份出现问题或者新接触SinoDB数据库人员会遇见的。由于数据库的大部分操作都需要记录逻辑日志,所以如果逻辑日志因各种原因用满而没有及时备份,都可能导致数据库无法正常操作,需要等待逻辑日志空间的释放、重新再利用。这一般会由于数据库逻辑日志没有及时备份、数据库逻辑日志空间分配过小、逻辑日志里面包含活动事务、包含检查点信息等的原因。

故障处理:
  检查是否是由于逻辑日志备份出现问题,如果是不能备份请查找不能备份的原因,可能是由于磁带满或磁带机出现故障,或者是磁带设备繁忙,或者磁盘空间满了;个别情况下即使逻辑日志标志为已备份但是仍然是不可使用的,包括:
  1、该逻辑日志包含活动的事务信息,由于数据库需要考虑其可能的回滚操作,因此是不会让该逻辑日志的内容被覆盖的,可以通过 onstat -x 检查其 begin_logpos来确定事务的逻辑日志起始位置;
  2、包含检查点信息,可以通过 onstat -l 观察 flags 的最后一位为 L 的逻辑日志的位置,在它之后的逻辑日志即使已经备份也是不可使用的,因为这些逻辑日志内容将会在快速恢复中使用到。
  在这些情况出现以后如果暂时不能快速的处理,可以使用逻辑日志联机增加的功能,只要有空闲的 chunk 空间,使用 onparams -a -d -s -i 即可在当前逻辑日志后增加新的逻辑日志,并且不需要执行 0 级备份。