数据库截日志的后遗症分析
GBase社区管理员近日一个数据库因为操作系统异常,引起的数据库异常关闭(此时业务正在运行,内存中有大量的脏数据没有或正在刷新到磁盘)。
带来的问题如下:
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 可能会遇到锁表的问题,这个也是一个很麻烦的事情;
热门帖子
- 12025-12-01浏览数:182759
- 22023-05-09浏览数:25044
- 42023-09-25浏览数:18519
- 52020-05-11浏览数:17526