签到成功

知道了

CNDBA社区CNDBA社区

达梦数据损坏问题处理方法

2025-05-30 10:38 106 0 原创 DM数据库
作者: shinelifes

一、现象描述

客户反馈数据库异常HALT,数据库日志有如下告警信息:Server page check error!

http://www.cndba.cn/shinelifes/article/131632
http://www.cndba.cn/shinelifes/article/131632
http://www.cndba.cn/shinelifes/article/131632

二、环境信息

IP地址:..50.158
CPU:Intel(R) Xeon(R) 16核
内存:32G
操作系统:Kylin Linux Advanced Serverrelease V10 (SP3) /(Lance)-x86_64-Build23/20230324
数据库版本:DM Database 64 V8 03134283968-20230103-178822-20033
数据库架构:单机

三、问题分析过程

3.1 数据库日志分析

数据库日志分析,日志显示数据库存在页损坏,表空间ID是4,文件ID是0,页号是:1068800。通过SF_PAGE_GET_SEGID系统过程和dba_objects视图联合查询获取损坏数据页的对象信息。损坏数据页的对象是”CLOUDPIVOT”.”h_log_biz_service”表。如下图所示。


1)”CLOUDPIVOT”.”h_log_biz_service”表信息如下所示:
—查表的行数14372
select count() from CLOUDPIVOT.h_log_biz_service;
—查询表已使用的页数,160264.75MB
SELECT
TABLE_USED_PAGES(‘CLOUDPIVOT’,’H_LOG_BIZ_SERVICE’)
PAGE()/1024.0/1024.0
FROM
DUAL;http://www.cndba.cn/shinelifes/article/131632

2)”CLOUDPIVOT”.”h_log_biz_service”表结构信息
CREATE TABLE “CLOUDPIVOT”.”h_log_biz_service”
(
“id” VARCHAR2(120) NOT NULL,
“bizServiceStatus” VARCHAR2(20),
“code” VARCHAR2(40),
“createdTime” TIMESTAMP(6),
“endTime” TIMESTAMP(6),
“EXCEPTION” CLOB,
“methodName” VARCHAR2(120),
“options” CLOB,
“params” VARCHAR2(2000),
“RESULT” CLOB,
“SERVER” VARCHAR2(200),
“startTime” TIMESTAMP(6),
“usedTime” INT,
“schemaCode” VARCHAR2(40),
“bizObjectId” VARCHAR2(200),
NOT CLUSTER PRIMARY KEY(“id”)) STORAGE(ON “CLOUDPIVOT”, CLUSTERBTR) ;
该表存在三个CLOB字段。

3.2 core文件分析

Core文件信息如下图所示。

http://www.cndba.cn/shinelifes/article/131632
http://www.cndba.cn/shinelifes/article/131632

3.3 将损坏数据导出到SQL文件

在执行导出的过程中,数据库会直接HALT。数据导出失败。所以损坏数据是无法导出除SQL文件。
http://www.cndba.cn/shinelifes/article/131632

3.4 将损坏数据迁移到新的表中

将损坏的数据迁移到新建的表中,数据库会直接HALT。数据迁移失败。
http://www.cndba.cn/shinelifes/article/131632

3.5 损坏数据

CLOUDPIVOT”.”h_log_biz_service表共有14372行数据,通过limit查询方法逐步缩小数据损坏的范围,通过排查”CLOUDPIVOT”.”h_log_biz_service”表所有数据,共存在三行数据损坏。表的ID分别是:e4c09c178ec17d8a018ec6c0827a0095,e4c09c178ec17d8a018ec6c481bb0096,e4c0a1bd9023ad7b0191542874af1742。如下图所示。

经过反复测试和验证,确定具体的损坏数据在”CLOUDPIVOT”.”h_log_biz_service”表的”RESULT”字段上,该字段类型是CLOB。操作和查询这三行数据的RESULT列值时,数据库会立即HALT。

http://www.cndba.cn/shinelifes/article/131632

四、问题根因分析

三行数据损坏。表的ID分别是:e4c09c178ec17d8a018ec6c0827a0095,e4c09c178ec17d8a018ec6c481bb0096,e4c0a1bd9023ad7b0191542874af1742。

数据分别是2024年4月10日和2024年8月15日产生,目前已无操作系统日志和数据库日志,数据损坏的根本原因暂不清楚。在数据库使用过程中,不涉及”CLOUDPIVOT”.”h_log_biz_service”表的”RESULT”字段的操作,不影响数据库的使用。http://www.cndba.cn/shinelifes/article/131632

五、解决方案及建议

经过反复测试验证,和客户确认的解决方案是:
(1)手动备份数据库。
(2)将”CLOUDPIVOT”.”h_log_biz_service”表,所有数据迁移到新表”CLOUDPIVOT”.”h_log_biz_servic_0528”中(排除数据损坏的三行数据)。
(3)将原表”CLOUDPIVOT”.”h_log_biz_service”中数据损坏的三行数据迁移到”CLOUDPIVOT”.”h_log_biz_servic_0528”中(排除”RESULT”字段值)。
(4)删除”CLOUDPIVOT”.”h_log_biz_service”表。
(5)再将”CLOUDPIVOT”.”h_log_biz_servic_0528”表重命名为”CLOUDPIVOT”.”h_log_biz_servic”。
具体操作方法如下:
(1)备份数据库。
backup database full backupset ‘/opt/dmdbms/data/dmbackup/DB_FULL_2025052801’ compressed level 1 parallel 15;
select sf_bakset_check(‘DISK’,’/opt/dmdbms/data/dmbackup/DB_FULL_2025052801’);
(2)所有数据迁移到新表,排除数据损坏的三行数据
INSERT INTO “CLOUDPIVOT”.”h_log_biz_service_0528” SELECT *
FROM “CLOUDPIVOT”.”h_log_biz_service”
where id not in(‘e4c09c178ec17d8a018ec6c0827a0095’,
‘e4c09c178ec17d8a018ec6c481bb0096’,
‘e4c0a1bd9023ad7b0191542874af1742’);
COMMIT;
(3)将数据损坏的三行数据迁移到新表,排除”RESULT”字段值
insert into “CLOUDPIVOT”.”h_log_biz_service_0528”(id,bizServiceStatus,code,createdTime,endTime,EXCEPTION,methodName,options,params,SERVER,startTime,usedTime,schemaCode,bizObjectId) select id,bizServiceStatus,code,createdTime,endTime,EXCEPTION,methodName,options,params,SERVER,startTime,usedTime,schemaCode,bizObjectId from “CLOUDPIVOT”.”h_log_biz_service” where id in(‘e4c09c178ec17d8a018ec6c0827a0095’,’e4c09c178ec17d8a018ec6c481bb0096’,’e4c0a1bd9023ad7b0191542874af1742’);
commit;
(4)删除”CLOUDPIVOT”.”h_log_biz_service”表
truncate table “CLOUDPIVOT”.”h_log_biz_service”;
drop table “CLOUDPIVOT”.”h_log_biz_service”;

(5)重命名表”CLOUDPIVOT”.”h_log_biz_service_0528”
alter table “CLOUDPIVOT”.”h_log_biz_service_0528” rename to h_log_biz_service;

建议:
(1)定期备份数据库。
(2)日常维护数据库过程中,使用正确命令停止数据库服务进程,不要直接kill数据库进程。

版权声明:本文为博主原创文章,未经博主允许不得转载。

达梦数据损坏问题处理方法参考

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
shinelifes

shinelifes

关注
  • 28
    原创
  • 0
    翻译
  • 0
    转载
  • 0
    评论
  • 访问:32346次
  • 积分:99
  • 等级:注册会员
  • 排名:第29名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ