达梦数据库故障分析与恢复
一.文件损坏
1.undo日志损坏
1)优先选择“备份+归档”恢复,从实例日志获取故障时间;
2)无备份归档情况下,选择跳过ROLL.DBF启动数据库临时启动数据库(危险操作,可能破坏事务的原子性)
修改dm.ini参数PSEG_RECV=0
2.redo日志损坏
1)优先选择“备份+归档”恢复,从实例日志获取故障时间;
2)无备份归档的情况下,可以选择替换redo日志临时启动数据库(危险操作,可能会丢失部分数据),然后将数据迁移出来。无法使用备份归档恢复下,替换redo启动数据库步骤:
(1)查看初始化日志,观察初始化参数,重新初始化一个新的实例并前台启 动一次
(2)查看故障库的db_magic值和pemnt_magic值 ./dmmdf type=1 file=/home/dmdba/data/TEST/SYSTEM.DBF
(3)修改新库的db_magic值和pemnt_magic值并保存 ./dmmdf type=2 file=/home/dmdba/data/dmdbms/TEST/TEST01.log
(4)将修改后的redo挪到故障库下,尝试启动数据库 故障库:mv TEST01.log TEST01.log_old新库:cp TEST01.log /home/dmdba/data/TEST/
(5)此时已经启动起来的数据库仍然存在隐患,应立即完成数据的迁移工作,防止再次发生宕机事故。
二.数据页损坏
1、实例仍能启动:
实例正常启停一次 ./dmdbchk path=/home/dmdba/data/TEST/dm.ini
bin下会生成一个dbchk_err.txt,可能会记录有一些索引或者表错误,可以重建再做 dmdbchk
2、实例不能启动:
IGNORE_FILE_SYS_CHECK 默认 0,检查文件系统。1,不检查文件系统
三.其他故障
1.SQL语句触发版本bug
1)一般会在bin下生成core文件,分析core文件
如果没有生成core文件 vim /etc/security/limits.conf
* hard core unlimited
* soft core unlimited
分析core文件:
(1)通过 dmrdc 命令行工具分析core文件获取其中的SQL语句;core_tmp.2808
(2)收集堆栈信息:
gdb dmserver core.1086
输入bt或者where
记录最后的LWP号,寻找对应LWP号的SQL语句,进入manager工具测试这个SQL语句
2)开启sql日志记录执行sql ,分析sql日志
SP_SET_PARA_VALUE(1,'SVR_LOG',1); 第一个1表示在内存和ini中都修改该参 数值配置 sqllog.ini
2.磁盘问题导致故障
报错:os_file_flush error!handle:3,code:30,desc:Read-only file system
创建文件,报错只读文件系统
交给存储厂家处理
3.磁盘空间不足导致故障
日志报错:
tablespace 7 fail to extend.Please check disk space or extend attribbute of data files.
tablespace 6 fail to extend.Please check disk space or extend attribbute of data files.
ARCH_DEST[/opt/dmdbms/data/DAMENG/arch] will be out of space.
df -h查看空间
定时删除备份执行没?
归档上限设置没?
都没问题的话,争取加大盘
4.cpu占用过高导致实例被操作系统kill掉
1)top查看CPU占用率;
2)查看服务器配置;
-g是以GB为单位;也可以使用-m,即以MB为单位
3)配合应用日志检查问题;
4)数据库版本,尝试版本升级;