在之前的博客我们看了达梦Redo log 故障的处理方法,如下:
DM 达梦数据库 redo log 损坏故障 解决方法
https://www.cndba.cn/dave/article/108602
同样,达梦的UNDO 表空间ROLL 文件也存在损坏的可能性。 但因为ROLL 不涉及到db_magic 的修改,所以相对来说,处理简单一些。
1 处理思路说明
对于ROLL 文件损坏的情况,处理方法同样是新建一个同配置(页大小、大小写敏感、字符集等)的实例,然后把新实例的ROLL文件替换掉原实例的ROLL文件,然后重启数据库。
2 具体操作过程
2.1 创建测试实例
我们这里直接利用之前创建的测试实例,这里不再新建,如果新建,命令如下:
[dave@www.cndba.cn data]$ dminit path=/data/dm/dmdbms/data page_size=32 extent_size=32 charset=0 db_name=cndba instance_name=cndba
2.2 破坏ROLL文件
这里直接MV 掉。
[dave@www.cndba.cn cndba]$ mv ROLL.DBF ROLL.DBF.bak
[dave@www.cndba.cn cndba]$
此时启动直接报错:
[dave@www.cndba.cn cndba]$ dmserver dm.ini
file dm.key not found, use default license!
version info: develop
DM Database Server 64 V8 03134283890-20220304-158322-10045 startup...
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
Database mode = 0, oguid = 0
/data/dm/dmdbms/data/cndba/ROLL.DBF not exist, can not startup
[dave@www.cndba.cn cndba]$
2.3 新建临时实例
注意我这里实例名不同,不过并不影响恢复,能创建同名,最好。
[dave@www.cndba.cn data]$ dminit path=/data/dm/dmdbms/data page_size=32 extent_size=32 charset=0 db_name=dave instance_name=dave port_num=5238
initdb V8
db version: 0x7000c
file dm.key not found, use default license!
License will expire on 2023-03-04
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
log file path: /data/dm/dmdbms/data/dave/dave01.log
log file path: /data/dm/dmdbms/data/dave/dave02.log
write to dir [/data/dm/dmdbms/data/dave].
create dm database success. 2022-08-04 23:17:31
[dave@www.cndba.cn data]$
这里要先启动一次实例,在正常关闭。 达梦实例创建后,必须先启动一次才能正常使用。
[dave@www.cndba.cn data]$ cd dave
[dave@www.cndba.cn dave]$ ls
bak dave01.log dm.ctl dminit20220804231728.log HMAIN ROLL.DBF SYSTEM.DBF
ctl_bak dave02.log dm.ini dm_service.prikey MAIN.DBF sqllog.ini
[dave@www.cndba.cn dave]$ dmserver dm.ini
file dm.key not found, use default license!
version info: develop
DM Database Server 64 V8 03134283890-20220304-158322-10045 startup...
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
Database mode = 0, oguid = 0
License will expire on 2023-03-04
file lsn: 0
ndct db load finished
ndct second level fill fast pool finished
ndct third level fill fast pool finished
ndct second level fill fast pool finished
ndct third level fill fast pool finished
ndct fill fast pool finished
iid page's trxid[1002]
NEXT TRX ID = 1003
……
2.4 将临时实例的ROLL复制到旧环境
[dave@www.cndba.cn cndba]$ cp ../dave/ROLL.DBF .
[dave@www.cndba.cn cndba]$ ls
bak cndba01.log.bak cndba02.log.bak dm.ctl dminit20220804230707.log HMAIN rep_conflict.log ROLL.DBF.bak SYSTEM.DBF trace
cndba01.log cndba02.log ctl_bak dm.ini dm_service.prikey MAIN.DBF ROLL.DBF sqllog.ini TEMP.DBF
[dave@www.cndba.cn cndba]$
2.5 启动实例
[dave@www.cndba.cn cndba]$ dmserver dm.ini
file dm.key not found, use default license!
version info: develop
DM Database Server 64 V8 03134283890-20220304-158322-10045 startup...
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
Database mode = 0, oguid = 0
License will expire on 2023-03-04
file lsn: 39768
ndct db load finished
ndct second level fill fast pool finished
ndct third level fill fast pool finished
ndct second level fill fast pool finished
ndct third level fill fast pool finished
ndct fill fast pool finished
iid page's trxid[5010]
NEXT TRX ID = 5011
pseg_collect_mgr_items, total collect 0 active_trxs, 0 cmt_trxs, 0 pre_cmt_trxs, 0 to_release_trxs, 0 active_pages, 0 cmt_pages, 0 pre_cmt_pages, 0 to_release_pages, 0 mgr pages, 0 mgr recs!
iid page's trxid[6012]
NEXT TRX ID = 7014.
total 0 active crash trx, pseg_crash_trx_rollback sys_only(0) begin ...
pseg_crash_trx_rollback end, total 0 active crash trx, include 0 empty_trxs, 0 empty_pages which only need to delete mgr recs.
pseg_crash_trx_rollback end
pseg recv finished
nsvr_startup end.
aud sys init success.
aud rt sys init success.
systables desc init success.
ndct_db_load_info success.
nsvr_process_before_open begin.
nsvr_process_before_open success.
total 0 active crash trx, pseg_crash_trx_rollback sys_only(0) begin ...
pseg_crash_trx_rollback end, total 0 active crash trx, include 0 empty_trxs, 0 empty_pages which only need to delete mgr recs.
pseg_crash_trx_rollback end
SYSTEM IS READY.
3 小结
在ROLL文件的处理中,我们是直接替换的,没有更新db_magic,也没有修改PSEG_RECV参数以故障重启实例。 相对来说,是一个风险较小的操作。 但从生产环境的稳定性角度来看,也可能会遇到替换ROLL后,还有问题的情况,这种情况可能就需要连REDO LOG 一起替换了。 具体过程这里不再重复。
最后,虽然替换ROLL 文件风险较小,但还是建议导出数据到新的实例中,以确保数据库实例的稳定性。
DM7 达梦数据库 物理备份还原之 备份管理 操作手册
https://www.cndba.cn/dave/article/3600
DM7 达梦数据库 物理备份还原之 联机备份(SQL备份) 使用手册
https://www.cndba.cn/dave/article/3595
版权声明:本文为博主原创文章,未经博主允许不得转载。