签到成功

知道了

CNDBA社区CNDBA社区

DM 达梦数据库 redo log 损坏故障 解决方法

2022-08-25 13:00 2419 0 原创 DM 达梦
作者: dave

关于达梦数据库redo log ,在之前的博客中有说明,如下:http://www.cndba.cn/dave/article/108602

DM 达梦数据库 重做日志 redo log 的进一步测试
https://www.cndba.cn/cndba/dave/article/3733

DM7 达梦数据库 重做日志管理 及 归档模式切换
https://www.cndba.cn/dave/article/3575

http://www.cndba.cn/dave/article/108602
http://www.cndba.cn/dave/article/108602

本片关注另外一个问题,就是在达梦redo log 出现损坏,且实例无法正常启动情况下,如何进行处理的过程。 http://www.cndba.cn/dave/article/108602

1 处理思路说明

对于Redo log 损坏的情况,处理方法就是新建一个同配置(页大小、大小写敏感、字符集等)的实例,然后把新实例的redo log 文件替换掉原实例的所有redo log,然后重启数据库。 http://www.cndba.cn/dave/article/108602

因为这种redo log 替换可能会存在其他问题,所以等实例启动之后,将数据导出,重新导入到新的实例中。

DM 达梦数据库 生产环境 实例 推荐配置参数
https://www.cndba.cn/dave/article/108599

2 具体操作过程

2.1 创建测试实例

这里直接对单机进行测试,先创建测试实例。 主要因为原环境是DMDW的,不想破坏了环境,所以新建议一个实例进行测试。

[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
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/cndba/cndba01.log


 log file path: /data/dm/dmdbms/data/cndba/cndba02.log

write to dir [/data/dm/dmdbms/data/cndba].
create dm database success. 2022-08-04 23:07:09
[dave@www.cndba.cn data]$

这里即使忘记旧环境的参数也没有关系,虽然库无法启动,也可以通过数据库日志来查看,日志在DATA目录下以 dminit+日期时间.log 命名。

[dave@www.cndba.cn cndba]$ cat dminit20220804230707.log
start init database: V8, 2022-08-04 23:07:07
init params:
        db path: /data/dm/dmdbms/data/cndba
        db name: cndba
        auto overwrite: 0
        page size: 32768
        extent size: 32
        char_fix_storage: 0
        sql_log_forbid: 0
        secur_flag: 2
        time zone: +08:00
        string case sensitive: 1
        charset: 0
        length in char: 0
        page check mode: 0
        page check algorithm id: 0
        priv flag: 0
        rlog enc flag: 0
        use new hash: 1
        blank pad mode: 0
        sec priv mode: 0
        huge with delta: 1
        rlog gen for huge: 0
        pseg_mgr_flag: 0

 log file path: /data/dm/dmdbms/data/cndba/cndba01.log


 log file path: /data/dm/dmdbms/data/cndba/cndba02.log

create ini file /data/dm/dmdbms/data/cndba/dm.ini success.

create rlog file /data/dm/dmdbms/data/cndba/cndba01.log success.

create rlog file /data/dm/dmdbms/data/cndba/cndba02.log success.

SYSTEM file : /data/dm/dmdbms/data/cndba/SYSTEM.DBF

MAIN file : /data/dm/dmdbms/data/cndba/MAIN.DBF

ROLL file : /data/dm/dmdbms/data/cndba/ROLL.DBF

create dm database success. 2022-08-04 23:07:09
[dave@www.cndba.cn cndba]$

2.2 破坏redo log 文件

这里直接MV 掉。

http://www.cndba.cn/dave/article/108602

[dave@www.cndba.cn cndba]$ mv cndba01.log cndba01.log.bak
[dave@www.cndba.cn cndba]$ mv cndba02.log cndba02.log.bak

此时启动直接报错:

[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/cndba01.log 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 将临时实例的redo 复制到旧环境

[dave@www.cndba.cn data]$ cp dave/dave01.log cndba/cndba01.log
[dave@www.cndba.cn data]$ cp dave/dave02.log cndba/cndba02.log

2.5 利用dmmdf 修改redo日志的db_magic的值

两个文件都要改,保持和源库一样。http://www.cndba.cn/dave/article/108602http://www.cndba.cn/dave/article/108602

DM7 达梦数据库 使用dmmdf 工具 修改 db_magic
https://www.cndba.cn/dave/article/3613

[dave@www.cndba.cn cndba]$ dmmdf type=1 file=SYSTEM.DBF
dmmdf V8
**********************************************************
1 db_magic=1287424634
2 next_trxid=3007
3 pemnt_magic=909598176
**********************************************************
Please input which parameter you want to change(1-3), q to quit: Q
[dave@www.cndba.cn cndba]$

[dave@www.cndba.cn cndba]$ dmmdf type=2 file=cndba02.log
dmmdf V8
**********************************************************
1 sig = DMRLOG
2 ver = 7007
3 chksum = 3739147829
4 sta = 0
5 n_magic = 7
6 db_magic = 881908182
7 len = 268435456
8 free = 4096
9 clsn = 0
10 clsn_fil = 0
11 clsn_off = 0
12 pemnt_magic = 1117177040
13 fil_id = 1
15 next_seq = 0
16 g_next_seq = 0
17 arch_lsn = 0
18 arch_seq = 0
19 dbversion = 0x7000c
20 min_exec_version = V8.1.1.1
21 min_dct_version  = 4
22 p_db_magic = 0
23 n_apply_ep = 0
24 apply_info_lsn = 0
   pkg_seq_arr: (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
   apply_lsn_arr: (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
25 recv_p_db_magic = 0
26 recv_n_apply_ep = 0
   recv_pkg_seq_arr: (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
   recv_apply_lsn_arr: (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
27 l_term_id = 0
28 term_id = 0
29 c_seqno = 0
30 c_lsn = 0
**********************************************************
You can only reset sta(4) or db_magic (6) or clsn (9) or clsn_fil(10) or clsn_off(11) or pemnt_magic(12) or fil_id(13) or next_seq(15) or g_next_seq(16) or p_db_magic(22) or n_apply_ep(23).
Please input the num which one you want to change, q to quit: 6
Input the new value: 1287424634
**********************************************************
1 sig = DMRLOG
2 ver = 7007
3 chksum = 2800913817
4 sta = 0
5 n_magic = 7
6 db_magic = 1287424634
7 len = 268435456
8 free = 4096
9 clsn = 0
10 clsn_fil = 0
11 clsn_off = 0
12 pemnt_magic = 1117177040
13 fil_id = 1
15 next_seq = 0
16 g_next_seq = 0
17 arch_lsn = 0
18 arch_seq = 0
19 dbversion = 0x7000c
20 min_exec_version = V8.1.1.1
21 min_dct_version  = 4
22 p_db_magic = 0
23 n_apply_ep = 0
24 apply_info_lsn = 0
   pkg_seq_arr: (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
   apply_lsn_arr: (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
25 recv_p_db_magic = 0
26 recv_n_apply_ep = 0
   recv_pkg_seq_arr: (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
   recv_apply_lsn_arr: (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
27 l_term_id = 0
28 term_id = 0
29 c_seqno = 0
30 c_lsn = 0
**********************************************************
Do you want to quit and save the change to file (y/n): y
Save to file success!
[dave@www.cndba.cn cndba]$

2.6 修改PSEG_RECV参数为0

PSEG_RECV参数控制系统故障重启时,对活动事务和已提交事务的处理方式。 默认为3。

0:跳过回滚活动事务和 PURGE已经提交事务的步骤。在回滚表空间出现异常、损坏、系统无法正常启动时,可将 PSEG_RECV 设置为 0,让系统启动;但存在一定风险,未提交事务的修改将无法回滚,破坏事务的原子性;另外,已提交未 PURGE的事务,将导致部分存储空间无法回收;
1:回滚活动事务并PURGE已经提交事务;
2:延迟 PURGE已提交事务,延迟回滚活动事务;
3:回滚活动事务,延迟 PURGE已提交事务。

我们这里直接编辑dm.ini将PSEG_RECV设置为0(原值为3,0代表故障也启动),启动故障数据库服务。

[dave@www.cndba.cn cndba]$ cat dm.ini|grep PSEG
                PSEG_RECV                       = 0                     #Whether to rollback active transactions and purge committed transactions when system restarts after failure
[dave@www.cndba.cn cndba]$

2.7 启动故障实例

[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: 35869
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[4008]
NEXT TRX ID = 4009
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.

实例成功启动,因为采用的是故障启动,所以无法保障事务的一致性和原子性,所以这里必须将数据导出,然后导入的新建的环境中。 http://www.cndba.cn/dave/article/108602

备份恢复这块参考我之前的博客,这里不再描述:

DM7 达梦数据库 物理备份还原之 备份管理 操作手册
https://www.cndba.cn/dave/article/3600
DM7 达梦数据库 物理备份还原之 联机备份(SQL备份) 使用手册
https://www.cndba.cn/dave/article/3595

http://www.cndba.cn/dave/article/108602

版权声明:本文为博主原创文章,未经博主允许不得转载。

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
dave

dave

关注

人的一生应该是这样度过的:当他回首往事的时候,他不会因为虚度年华而悔恨,也不会因为碌碌无为而羞耻;这样,在临死的时候,他就能够说:“我的整个生命和全部精力,都已经献给世界上最壮丽的事业....."

  • 2261
    原创
  • 3
    翻译
  • 578
    转载
  • 191
    评论
  • 访问:7965897次
  • 积分:4346
  • 等级:核心会员
  • 排名:第1名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ