GBase 8s
运维管理
文章

数据库截日志的后遗症分析

GBase社区管理员
发表于2023-05-16 10:24:4129次浏览0个评论

近日一个数据库因为操作系统异常,引起的数据库异常关闭(此时业务正在运行,内存中有大量的脏数据没有或正在刷新到磁盘)。

带来的问题如下:

1、数据库重启的时候,发现不能进行逻辑恢复。

处理方法:

日志截取。

后遗症:

日志截取之后数据库是起来了,但是有两个严重的问题:

1、online.log报出了大量的表或索引被损坏;

    对于这样的信息,处理方法通常是:

   a>重建索引;

   b>oncheck -cDI dbname:tabname -y   检查并自动修复

2、还有一些表的异常没有在online.log中报出来,而是抛出了af.*,极度占磁盘空间,搞不好一会儿分区就吃满了。

   处理方法:

   a> cat af* | grep partnum | awk '{print $9}' | sort | uniq -c    获得抛出的af文件中的不同的partnum;

   b>select tabname from systables where tabid in (
                   select tabid from systables where tabid>99  and partnum=1049105 union
                   select tabid from sysfragments  where partn=1049105);

          根据之前获得的partnum来获得表名,需要在不同的数据库去查找,

         select * from systabnames where partnum=1049105;

         或在sysmaster库中直接执行:

  c>找到对应的库和表之后,如下方法进行修复:

      11>重建索引;

       22>oncheck -cDI dbname:tabname    可能会遇到锁表的问题,这个也是一个很麻烦的事情;

评论已关闭