南大通用GBase 8a数据库集群查询报错Table 'XXXX' is marked as crashed and should be repaired

GBase 8a数据库集群,其元数据大部分是保存在GsSYS引擎上的,如果表数据出现损坏,就会报Table 'XXXX' is marked as crashed and should be repaired。本文介绍其修复方法。

1、原因

该表损坏,需要修复。 目前版本都是数据库元数据表导致,比如audit_log. table_distribution等。 可以从show create table XXXX 里看到engine的类型。

常见原因除了磁盘故障,就是gssys引擎自身在处理大数据时(比如百万,千万行)自身没有内部多版本机制导致。

2、常规解决方案

通过如下命令修复表

repair table XXXX;

如执行结果包含 repair   status OK 字样就是修复成功了。 

3、修复表结构

如果修复失败,比如Incorrect file format 'audit_log'

gbase> repair table audit_log;
+-----------------+--------+----------+-----------------------------------+
| Table           | Op     | Msg_type | Msg_text                          |
+-----------------+--------+----------+-----------------------------------+
| gbase.audit_log | repair | Error    | Incorrect file format 'audit_log' |
| gbase.audit_log | repair | error    | Corrupt                           |
+-----------------+--------+----------+-----------------------------------+
2 rows in set (Elapsed: 00:00:00.00)

可以用repair table audit_log use_frm 强行修复表结构,当然数据就都丢失了。

gbase> repair table audit_log use_frm;
+-----------------+--------+----------+-----------------------------------+
| Table           | Op     | Msg_type | Msg_text                          |
+-----------------+--------+----------+-----------------------------------+
| gbase.audit_log | repair | Error    | Incorrect file format 'audit_log' |
| gbase.audit_log | repair | status   | OK                                |
+-----------------+--------+----------+-----------------------------------+
2 rows in set (Elapsed: 00:00:00.00)