故障排查:
数据库无法启动,或者启动一段之间自动停止
具体现象要具体分析
1.判断系统因素
首先要确定内存空间和存储空间是否满了导致无法启动
查看内存命令:free -m
查看存储命令:df -h
如果查询结果都是未满的,要具体分析日志考虑是否为数据文件损坏。
- 对数据文件完整性进行校验
先停掉数据库外部连接,复制一份当前的数据文件到其他路径下留作备份,注意其他路径下空间大小是否充足。
cp /opt/dmdbms/data/DAMENG /home/DAMENG_OLD_BAK1
修改/opt/dmdbms/data/DAMENG/dm.ini中port_num(端口号)为5237(不和其他数据库端口冲突)
保证不会有外部因素影响。
前台启动数据库
cd /opt/dmdbms/bin/
./dmserver /opt/dmdbms/data/DAMENG/dm.ini
终端打印出system is ready后输入exit停止数据库
在相同路径下执行
./dmdbchk PATH=/opt/dmdbms/data/DAMENG/dm.ini
检查文件是否有报错
如果损坏,先将当前数据文件文件夹复制一份到其他位置保存,以便有一个最原始的存档。
有备份的情况下,可以基于备份还原。
无备份的情况下,可以尝试通过以下几种方式恢复。
记得将之前修改/opt/dmdbms/data/DAMENG/dm.ini中port_num(端口号)为5237改回5236。
恢复数据库方法:
数据库宕机后,此时服务停止,需要做以下操作尝试启动数据库服务
注意不要有任何应用连接数据库,以下方法均基于最初损坏时环境来进行操作,请不要直接将方法一和方法二连续使用,防止操作导致复制出的文件夹过多使人记忆混乱,操作失误
方法一:
1。确认服务状态 ,停服务
关于文件夹的操作,请注意是哪个路径下的文件夹
2。先复制一份当前的数据文件到其他路径下留作备份
cp /opt/dmdbms/data/DAMENG /home/DAMENG_OLD_BAK1
复制请注意其他路径下空间大小是否充足。
3。将当前(旧)数据库文件目录重命名
mv /opt/dmdbms/data/DAMENG /opt/dmdbms/data/DAMENG_OLD_BAK
(当前路径/opt/dmdbms/data/下应该只有DAMENG_OLD_BAK文件夹)
4。查看初始化参数
/opt/dmdbms/data/DAMENG_OLD_BAK文件夹中dminit+时间.log
5。打开终端,初始化一个新库,所有参数与之前库相同
cd /opt/dmdbms/bin/
./dminit path=/opt/dmdbms/data/ UNICODE_FLAG=1 CASE_SENSITIVE=0 EXTENT_SIZE=16 PAGE_SIZE=8 (后接参数视现场情况而定)
此时生成的DAMENG文件夹为新库的文件夹
(当前路径/opt/dmdbms/data/下应该有DAMENG(新库).DAMENG_OLD_BAK(旧库)两个文件夹)
6。初始化库完成后,启动新库服务一次:
./dmserver /opt/dmdbms/data/DAMENG/dm.ini
终端打印出system is ready后输入exit或按ctrl+c停止服务
7。拷贝出新库的ROLL.DBF文件,移走所有新库数据文件
cp -r opt/dmdbms/data/DAMENG/ROLL.DBF /opt/dmdbms/data/
mv /opt/dmdbms/data/DAMENG /opt/dmdbms/data/DAMENG_NEW_BAK
(当前路径/opt/dmdbms/data/下应该有DAMENG_NEW_BAK(新库)和DAMENG_OLD_BAK(旧库)两个文件夹)
8。复制一份旧库数据文件,命名为之前的名称
cp -r /opt/dmdbms/data/DAMENG_OLD_BAK /opt/dmdbms/data/DAMENG
将刚刚新库拿出来的ROLL.DBF替换到旧库复制出来的文件夹中
mv /opt/dmdbms/data/DAMENG/ROLL.DBF /opt/dmdbms/data/DAMENG/ROLL_BAK.DBF
cp /opt/dmdbms/data/ROLL.DBF /opt/dmdbms/data/DAMENG/ROLL.DBF
(当前路径下应该有DAMENG_NEW_BAK(新库).DAMENG_OLD_BAK(旧库)DAMENG(旧库复制过来的) 三个文件夹)
9。尝试启动已宕机的数据库:打开终端,cd进入/opt/dmdbms/bin目录下,执行以下命令启动宕机数据库:./dmserver /opt/dmdbms/data/DAMENG/dm.ini
如服务启动成功,应用访问正常,则数据库恢复成功。
此方法如果无法恢复数据库正常提供服务,请使用以下方法尝试
方法二:
1。确认服务状态 ,停服务
关于文件夹的操作,请注意是哪个路径下的文件夹
2。先复制一份当前的数据文件到其他路径下留作备份
cp /opt/dmdbms/data/DAMENG /home/DAMENG_OLD_BAK1
复制请注意其他路径下空间大小是否充足。
3.。查看初始化参数
/opt/dmdbms/data/DAMENG文件夹中dminit+时间.log
(当前路径/opt/dmdbms/data/下应该只有DAMENG文件夹)
4。打开终端,初始化一个新库,所有参数与之前库相同
cd /opt/dmdbms/bin/
./dminit path=/opt/dmdbms/data/ DB_NAME=DAMENG2 PORT_NUM=5237 UNICODE_FLAG=1 CASE_SENSITIVE=0 EXTENT_SIZE=16 PAGE_SIZE=8 (后接参数视现场情况而定)
此时生成的DAMENG1文件夹为新库的文件夹
(当前路径/opt/dmdbms/data/下应该有DAMENG1(新库),DAMENG(旧库)两个文件夹)
5。首先前台启动旧数据库
cd /opt/dmdbms/bin/
./dmserver /opt/dmdbms/data/DAMENG/dm.ini(此窗口不要关闭,关闭数据库也会停止)
6。新打开窗口,前台启动新数据库
cd /opt/dmdbms/bin/
./dmserver /opt/dmdbms/data/DAMENG1/dm.ini(此窗口不要关闭,关闭数据库也会停止)
以上两个窗口不要关闭
7。打开达梦迁移工具(dts)
新打开一个窗口
cd /opt/dmdbms/tool/
./dts
此时会启动达梦迁移工具
使用迁移工具将旧数据库数据迁移到新数据库中,期间会遇到数据文件损坏的表,然后会导致旧数据库再次宕机,此时需要记录是哪张表导致的,然后重新打开旧数据库,再次迁移,此次将上次导致迁移失败的表取消勾选,然后迁移,尽可能将表都迁过去,如有报错,依次跳过报错表,最后总结报错表,将表结构,数据导出为SQL语句。在新库中通过sql语句创建,尝试修复。