注册
记一次异常断电导致的数据文件坏块的处理过程
专栏/培训园地/ 文章详情 /

记一次异常断电导致的数据文件坏块的处理过程

彴约 2024/05/28 858 3 0
摘要

一、前提

在某个项目之中,生产环境为数据守护主备集群。
客户反馈,中午数据库服务器卡顿无反应、夯住,客户物理重启数据库服务器。重启后应用连接数据库报错:

试图在STANDBY模式下,修改用户库

远程连接生产环境进行排查。

二、排查过程

首先,根据客户反馈报错情况,判断为主库异常宕机,但连接上服务器后,发现主库数据库服务并未停止。
登录数据库主备库后,发现主备库都为挂起状态。
1.png
登录监视器,尝试强制接管,失败。
2.png
尝试停掉原主库后进行强制接管,失败。
3.png
4.png
尝试备库强制open,失败。
6.png
尝试备库进行强制接管,失败。
5.png
多次尝试后发现,强制接管时,数据库会自动重启,重启过程中报错。
7.png
根据报错可看出,数据库重启过程中,进行页校验过程中失败,怀疑因异常断电导致数据文件存在坏块。

三、处理过程

尝试使用
停掉主备数据库后,修改备库参数,跳过purge

PSEG_RECV=0

注意:修改PSEG_RECV=0,会跳过回滚活动事务和PURGE已经提交事务的步骤。在回滚表空间出现异常、损坏、系统无法正常启动时,可将PSEG_RECV设置为0,让系统启动;但存在一定风险,未提交事务的修改将无法回滚,破坏事务的原子性;另外,已提交未PURGE的事务,将导致部分存储空间无法回收。

本次在和客户确认过,数据库服务器重启后,应用未对外提供服务后,修改参数启动数据库。

尝试启动数据库

DmServiceDMSERVER start

8.png
成功启动数据库,正常退出数据库。

DmServiceDMSERVER stop

使用dmdbchk检测数据库

dmdbchk path=/dmdata/DAMENG/dm.ini

获取到数据库坏块
9.png
10.png
启动数据库

DmServiceDMSERVER start

登录数据库查询坏块所属对象

select owner,table_name,index_name from dba_indexes where index_name = (select name from sysobjects where id=33556771); select owner,table_name,index_name from dba_indexes where index_name = (select name from sysobjects where id=33560597);

导出坏块表

dexp SYSDBA/************ directory=/dmbak file=T_C_EXCEL_TEMP.dmp log=T_C_EXCEL_TEMP.log tables=PORTAL.T_C_EXCEL_TEMP

删除有坏块的表

drop table PORTAL.T_C_EXCEL_TEMP;

修改数据库参数

PSEG_RECV=3

重启数据库,并导入T_C_EXCEL_TEMP.dmp

dimp SYSDBA/************ directory=/dmbak file=T_C_EXCEL_TEMP.dmp log=T_C_EXCEL_TEMP2105.log

备份数据库

backup database full to backup_file0315 backupset '/dmbak/backup_file0315';

发送备份文件到备库

scp -r backup_file0315/ *.*.1.4:/dmbak

备库恢复数据库

dmrman ctlstmt="restore database '/dmdata/DAMENG/dm.ini' from backupset '/dmbak/backup_file0315'" dmrman ctlstmt="recover database '/dmdata/DAMENG/dm.ini' from backupset '/dmbak/backup_file0315'" dmrman ctlstmt="recover database '/dmdata/DAMENG/dm.ini' update db_magic"

启动数据库服务

DmServiceDAMENG start mount

修改数据库模式

disql SYSDBA/************ sp_set_para_value(1, 'ALTER_MODE_STATUS', 1); alter database primary/standby; sp_set_para_value(1, 'ALTER_MODE_STATUS', 0);

启动数据守护

DmWatcherServiceGRP1 start

登录监视器切换主备库

dmmonitor /dmdata/DAMENG/dmmonitor_GRP1.ini login switchover

应用验证

处理完成。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服