在某个项目之中,生产环境为数据守护主备集群。
客户反馈,中午数据库服务器卡顿无反应、夯住,客户物理重启数据库服务器。重启后应用连接数据库报错:
试图在STANDBY模式下,修改用户库
远程连接生产环境进行排查。
首先,根据客户反馈报错情况,判断为主库异常宕机,但连接上服务器后,发现主库数据库服务并未停止。
登录数据库主备库后,发现主备库都为挂起状态。
登录监视器,尝试强制接管,失败。
尝试停掉原主库后进行强制接管,失败。
尝试备库强制open,失败。
尝试备库进行强制接管,失败。
多次尝试后发现,强制接管时,数据库会自动重启,重启过程中报错。
根据报错可看出,数据库重启过程中,进行页校验过程中失败,怀疑因异常断电导致数据文件存在坏块。
尝试使用
停掉主备数据库后,修改备库参数,跳过purge
PSEG_RECV=0
本次在和客户确认过,数据库服务器重启后,应用未对外提供服务后,修改参数启动数据库。
尝试启动数据库
DmServiceDMSERVER start
成功启动数据库,正常退出数据库。
DmServiceDMSERVER stop
使用dmdbchk检测数据库
dmdbchk path=/dmdata/DAMENG/dm.ini
获取到数据库坏块
启动数据库
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
处理完成。
文章
阅读量
获赞