达梦数据库故障处理流程

达梦数据库故障处理流程

收集信息,对问题定性。
分析定位问题,找到原因。

能处理当场处理、无法处理的则重现问题。

问题反馈,上报BUG。问题定性
确定问题的重要性

确定问题的紧迫性
问题的种类:A、B、C


项目的状态:上线、开发、测试

影响范围:点、面

用户关切度:非常、一般
客户关系度:好、一般、紧张

问题种类
A: 最严重错误,系统崩溃,或性能极差,计算结果错误等
B: 严重错误,系统崩溃

C: 一般性错误
D: 功能的补充完善

E: 费时但不重要的功能
F: 文档或安装方面的问题
G: 体系结构限制,一时难以解决

紧急问题处理流程
重要且紧迫的问题:

首要任务不是找到问题的原因、而是要尽快恢复数据库服务。

能够绕过的问题,通过重启、等价改写SQL或暂停使用相关模块等变通的方法处理 。
无法绕过问题,做好用户沟通工作,稳住客户,让客户有信心。

尽快定位问题,并将重现步骤反馈给开发人员。

问题定位和分析

系统出现问题,无法及时响应用户/应用请求时,可能的原因是多方面的。一般来说

网络是否正常

内存使用量
CPU使用率

I/O是否正常
系统日志

动态性能视图

信息收集
LINUX常用监控命令

free命令查看内存使用情况

top命令查看cpu使用率

iostat命令查看磁盘I/O使用情况
nmon工具监控系统一段时间的整体情况

通过nmon工具可以实时查看服务器负载情况,包括cpu 内存 硬盘的访问情况,也可以通过定时采集形成报表

信息收集

系统信息收集工具nmon
通过nmon工具可以实时查看服务器负载情况,包括cpu 内存 硬盘的访问情况,也可以通过定时采集形成报表

系统日志
事件日志

系统启动、关闭、内存申请失败、IO错误等一些致命错误。

跟踪日志

系统各会话执行的SQL语句、参数信息、错误信息等

设置不同的语句掩码可以收集不同的语句

主要用于分析错误和分析性能问题
1.排除可能导致问题出现的外部因素,避免被误导。

2.利用应用或者数据库日志信息对问题进行分析。

3.整理出导致问题出现操作步骤

事件日志
1.排除可能导致问题出现的外部因素,避免被误导。

2.利用应用或者数据库日志信息对问题进行分析。

3.整理出导致问题出现操作步骤

跟踪日志
1.排除可能导致问题出现的外部因素,避免被误导。

2.利用应用或者数据库日志信息对问题进行分析。
3.整理出导致问题出现操作步骤

动态性能视图

数据库连接信息

通过 V$SESSIONS可获取会话的具体信息,如执行的sql语句、主机名、当前会话状态、用户名以及回话总数等等 。
数据库运行信息,主要是数据库服务的资源占用情况,如cpu 内存 锁情况以及连接情况。另外日志问题和临时库的状态也要确认。

数据库锁、事务等信息

通过V L O C K 、 V LOCK 、V LOCK、VTRX 可以获取锁和事务的具体信息,如锁对象、状态、等待的事务及事务对应的会话等相关信息。
数据库运行信息,主要是数据库服务的资源占用情况,如cpu 内存 锁情况以及连接情况。另外日志问题和临时库的状态也要确认。

监控工具
达梦监控工具
通过达梦的监控工具可以实时跟踪数据库内存使用情况、数据库连接情况和语句执行情况。并且可以汇总出现执行慢或者执行频率高的sql语句

故障重现
拆解问题,简化场景
剔除不相关的场景或者操作步骤,使复杂问题简单化。
使用 sql 语句
用 isql、manager工具, 确定问题, 接口 or 服务器
编写测试程序
与数据环境相关,需要逻辑/物理进行备份还原

常见问题处理
服务器无响应
服务器宕机
文件损坏
集群故障
性能问题

接口问题

故障处理时一定要注意操作的安全性,不能让故障进一步的恶化。

服务器无响应

现象:

当前操作长时间不返回。

服务器 CPU 负载比较高。

据库连接池快速膨胀,直到达到上限。

数据库响应延迟增大。

原因:

事务未提交或长时间执行,占用的锁阻塞了其他事务。

内部 BUG ,产生死循环或死锁。

解决方法

通过动态性能视图获取未提交事务的session id
通过 session id 关闭对应连接,

sp_close_session(sess_id);

副作用:对应事务会回滚

利用kill命令,主动产生core文件并获取堆栈信息。

kill -SIGSEGV pid

副作用:重启时间很长,也可能无法启动成功。

服务器宕机
现象:

无法连接数据库、 dmserver 进程 ID 不存在。

原因:
内部 bug 或者 磁盘IO等硬件错误

处理方法:

有 CORE文件, 通过CORE文件,找出正在执行的SQL。

没有CORE文件,通过跟踪日志文件,找出宕机前最后一条执行的SQL 。

CORE文件获取SQL

DEBUG 版服务器

gdb dmserver core文件名字,打开core文件。

一般第一个线程里面正在执行的sql语句就是故障SQL语句

Where或者bt命令,打印堆栈
如果堆栈中有函数

ntsk_process_exec、ntsk_process_prepare、

ntsk_process_prepare_and_exec f 到该层,通过p sess->sqls 取到SQL语句。

vm_run_pln

f 到该层,通过p pln->sqlstr 取到SQL语句。

有时SQL语句过长,而这里显示的SQL语句有限,可以先执行set print element 0

RELEASE 版服务器
通过 dmrdc 命令行工具分析core文件获取其中的SQL语句

./dmrdc SFILE=<core文件名>

该工具会将分析的SQL保存在结果文件中。

位 置:core文件所在的路径

文件名: core文件名_tmp

文件损坏
LOG 日志文件

ROL 回滚文件
服务器无法启动。

DBF 数据文件
数据丢失、服务器宕机。

可用 dmdbchk 工具来检查确认是否损坏

./dmdbchk path=<dm.ini>

原因:
数据库非正常关闭、磁盘硬件故障或内部BUG

文件损坏应急处理方法:

ROL文件损坏

dm.ini中添加配置项PSEG_RECV = 0 。

再次启动,dmserver 就可以跳过回滚操作,启动起来。

LOG文件损坏
初始化新库,初参数与问题库保持一致,然后正常新库并正常关闭

将新库的ROLL.DBF和DAMENG0*.LOG拷贝覆盖到问题库。

使用dmmdf修改日志文件的db_magic。

再次启动,dmserver 就可以正常启动。
正常启动后要进行数据备份工作
副作用:

数据丢失
仅在没有备份文件的情况下使用、不到万不得已不能使用
操作前要备份文件。

DBF文件损坏

数据库可正常启动:

disql 下执行check_db_index(), 会打印出问题的索引名。
查询系统字典表SYSOBJECTS

获取 索引 ID

SELECT ID FROM SYSINDEXES

SUBTYPE$ = ‘INDEX’ AND NAME = ‘IDX_NAME’
查询 SYSINDEXES 获取索引类别,0 为聚集索引;1为二级索引

SELECT XTYPE & 0x01 FROM SYSINDEXES

WHERE ID = IDX_ID

二级索引则直接删除然后重建即可

聚集索引则只能重导数据或备份还原的方式进行数据恢复。

DBF文件损坏

数据库无法正常启动

建新库导数据

利用备份文件和归档文件进行还原

备份数据!备份数据!备份数据!

集群故障
RAC

主备

读写分离

HA
任何操作之前,永远先关闭备机HA

确定主机启动完成,恢复正常后
最后再开启备机的HA

HA环境 务必要配置

HA_INST_CHECK_IP

HA_INST_CHECK_PORT

案例:
HA正常情况下,先关闭主机HA,在关的过程中,主机HA长时间无响应,直接强杀主机HA,会出现什么异常?主机dmsever没退,
HA 被杀掉

备机HA监听不到主机的HA心跳 就认为主机挂了,然后挂盘,起dmserver,这样,就造成了双主

HA磁盘双挂
确定目前哪一台是备机,关掉备机的HA。

在备机上unmount磁盘

在主机上检查数据文件

重启数据库

性能故障
定位SQL

优化
建索引
改写SQL

修改参数
更新统计信息

接口问题

使用isql和manager进行初步排查
针对应用程序使用的具体接口,编写重现例子

通报问题

上一篇:基于MATLAB的国际象棋


下一篇:vCenter HA无法启用