签到成功

知道了

CNDBA社区CNDBA社区

REDO日志文件丢失修复

2021-08-28 18:17 1389 0 原创 DM数据库
作者: shinelifes

REDO日志文件丢失修复

一、什么是redo日志?redo日志有什么作用?

redo日志即重做日志,重做日志是在DM数据库中添加、删除、修改对象,或者改变数据,DM都会按照特定的格式,将这些操作执行的结果写入到当前的重做日志文件中。重做日志文件以log为扩展名。每个DM数据库实例必须至少有2个重做日志文件,默认两个日志文件为DAMENG01.logDAMENG02.log,这两个文件循环使用。重做日志文件因为是数据库正在使用的日志文件,因此被称为联机日志文件。重做日志文件主要用于数据库的备份与恢复。理想情况下,数据库系统不会用到重做日志文件中的信息。然而现实世界总是充满了各种意外,比如电源故障、系统故障、介质故障,或者数据库实例进程被强制终止等,数据库缓冲区中的数据页会来不及写入数据文件。这样,在重启DM实例时,通过重做日志文件中的信息,就可以将数据库的状态恢复到发生意外时的时间点。

重做日志文件对于数据库是至关重要的。它们用于存储数据库的事务日志,以便系统在出现系统故障和介质故障时能够进行故障恢复。在DM数据库运行过程中,任何修改数据库的操作都会产生重做日志,例如,当一条元组插入到一个表中的时候,插入的结果写入了重做日志,当删除一条元组时,删除该元组的事实也被写了进去,这样,当系统出现故障时,通过分析日志可以知道在故障发生前系统做了哪些动作,并可以重做这些动作使系统恢复到故障之前的状态。

二、redo日志被删除了怎么办?

redo日志对于数据库来说如此重要,当redo日志被删除了,该如何修复数据库?

通过实验回答一下这个问题。

故障模拟:

数据库为单机,通过手工删除redo日志文件,来模拟数据库的redo日志被删除的故障。

2.1 删除重做日志文件

备份重做日志文件后,删除重做日志文件。

dmdba@dm3:/home/dmdba/dmdata/DAMENG$ rm DAMENG01.log

http://www.cndba.cn/shinelifes/article/4694

dmdba@dm3:/home/dmdba/dmdata/DAMENG$ rm DAMENG02.log

dmdba@dm3:/home/dmdba/dmdata/DAMENG$ ls -lh

total 90M

drwxr-xr-x 2 dmdba dinstall    6 Aug 28 15:05 bak

drwxr-xr-x 2 dmdba dinstall  330 Aug 28 15:40 ctl_bak

-rw-r--r-- 1 dmdba dinstall 100M Aug 28 15:13 DAMENG01bak0828.log

-rw-r--r-- 1 dmdba dinstall 100M Aug 28 15:40 DAMENG02bak0828.log

-rw-r--r-- 1 dmdba dinstall  284 Aug 28 15:10 dmarch.ini

-rw-r--r-- 1 dmdba dinstall 5.0K Aug 28 15:40 dm.ctl

-rw-r--r-- 1 dmdba dinstall  50K Aug 28 15:10 dm.ini

-rw-r--r-- 1 dmdba dinstall  908 Aug 28 15:05 dminit20210828150553.log

-rw-r--r-- 1 dmdba dinstall  633 Aug 28 15:05 dm_service.prikey

drwxr-xr-x 2 dmdba dinstall    6 Aug 28 15:05 HMAIN

-rw-r--r-- 1 dmdba dinstall 128M Aug 28 15:05 MAIN.DBF

-rw-r--r-- 1 dmdba dinstall   12 Aug 28 15:08 rep_conflict.log

-rw-r--r-- 1 dmdba dinstall 128M Aug 28 15:41 ROLL.DBF

-rw-r--r-- 1 dmdba dinstall  481 Aug 28 15:05 sqllog.ini

-rw-r--r-- 1 dmdba dinstall  42M Aug 28 15:40 SYSTEM.DBF

-rw-r--r-- 1 dmdba dinstall  26M Aug 28 15:40 TEMP.DBF

drwxr-xr-x 2 dmdba dinstall    6 Aug 28 15:08 trace

dmdba@dm3:/home/dmdba/dmdata/DAMENG$

2.2 重启数据库

删除重做日志文件后,重启数据库,会提示重做日志文件不存在,无法启动数据库。

dmdba@dm3:/home/dmdba/dmdbms/bin$ ./DmServiceDAMENG restart

Stopping DmServiceDAMENG: [ OK ]

Starting DmServiceDAMENG: [ FAILED ]

file dm.key not found, use default license!

version info: develop

DM Database Server x64 V8 1-2-2-21.05.07-138925-10006-ENT  startup...

Normal of FAST

Normal of DEFAULT

http://www.cndba.cn/shinelifes/article/4694

Normal of RECYCLE

Normal of KEEP

Normal of ROLL

Database mode = 0, oguid = 0

/home/dmdba/dmdata/DAMENG/DAMENG01.log not exist, can not startup

dmdba@dm3:/home/dmdba/dmdbms/bin$

2.3 修改PSEG_RECV参数

如下是修改后的参数PSEG_RECV值为0跳过回滚活动事务和PURGE已经提交事务

dmdba@dm3:/home/dmdba/dmdata/DAMENG$ more dm.ini | grep PSEG_RECV

                PSEG_RECV                       = 0                     #Whether to rollback active transactions and purge committed transactions when system restarts after failure

dmdba@dm3:/home/dmdba/dmdata/DAMENG$ http://www.cndba.cn/shinelifes/article/4694

1修改dm.ini参数PSEG_RECV0,跳过回滚活动事务和PURGE已经提交事务的步骤。

2关于PSEG_RECV参数:

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

3该参数可以在线修改。

2.4 查看原库参数

根据数据库目录dminit+日期时间.log(例如:dminit20210828150553.log)的文件查看数据库的各个参数,重新初始化一个数据库实例

dmdba@dm3:/home/dmdba/dmdata/DAMENG$ more dminit20210828150553.log

start init database: V8, 2021-08-28 15:05:53

init params:

        db path: /home/dmdba/dmdata/DAMENG

        db name: DAMENG

        auto overwrite: 0

        page size: 16384

        extent size: 16

        time zone: +08:00

        string case sensitive: 1

        charset: 1

        length in char: 0

        page check mode: 0

        priv flag: 0

        rlog enc flag: 0http://www.cndba.cn/shinelifes/article/4694

        use new hash: 1

        blank pad mode: 1

        sec priv mode: 0

        huge with delta: 1

        rlog gen for huge: 0

        pseg_mgr_flag: 0

 log file path: /home/dmdba/dmdata/DAMENG/DAMENG01.log

 log file path: /home/dmdba/dmdata/DAMENG/DAMENG02.log

create ini file /home/dmdba/dmdata/DAMENG/dm.ini success.

create rlog file /home/dmdba/dmdata/DAMENG/DAMENG01.log success.

create rlog file /home/dmdba/dmdata/DAMENG/DAMENG02.log success.

SYSTEM file : /home/dmdba/dmdata/DAMENG/SYSTEM.DBF

MAIN file : /home/dmdba/dmdata/DAMENG/MAIN.DBF

ROLL file : /home/dmdba/dmdata/DAMENG/ROLL.DBF

create dm database success. 2021-08-28 15:05:56

2.5 初始化新实例

在另外一台服务器上重新初始化一个实例,参数和原库保持一致。原库在dm3服务器上,新实例在dm4服务器上。

dmdba@dm4:/home/dmdba/dmdbms/bin$ ./dminit path=/home/dmdba/dmdata page_size=16 extent_size=16 log_size=100 case_sensitive=1 charset=1 BLANK_PAD_MODE=1 port_num=5236

2.6 启动数据库

初始化数据库后,启动数据库。

dmdba@dm4:/home/dmdba/dmdbms/bin$ ./dmserver /home/dmdba/dmdata/DAMENG/dm.ini

启动完成后正常关闭数据库,然后将新实例的两个重做日志文件拷贝到原实例目录下。

2.7 将新初始化数据库的redo日志拷贝到要修复数据库

将新初始化的数据库的redo日志拷贝到要修复数据库文件夹下(拷贝前对要修复数据库的原redo日志做好备份)

dmdba@dm4:/home/dmdba/dmdata/DAMENG$ scp DAMENG0*.log dm3:/home/dmdba/dmdata/DAMENG/

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

替换完成后,利用dmmdf 修改redo日志的db_magic的值,否则启动会报如下错:

dmdba@dm3:/home/dmdba/dmdbms/bin$ ./DmServiceDAMENG start

Starting DmServiceDAMENG: ./DmServiceDAMENG: line 406:  5197 Floating point exception(core dumped) eval exec "/"$EXEC_PROG_FULL_PATH/"" "$STARTUP_PARAMS" -noconsole $TMP_START_MODE > "$SERVICE_LOG_FILE" 2>&1

[ FAILED ]

file dm.key not found, use default license!

version info: develop

DM Database Server x64 V8 1-2-2-21.05.07-138925-10006-ENT  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 2022-05-07

rfil grp log file error in (db_magic, permanent_magic),

        log file /home/dmdba/dmdata/DAMENG/DAMENG01.log is (173054809, 800943287),

        dbfile is(870887862, 2000257466).

dmdba@dm3:/home/dmdba/dmdbms/bin$

2.9 通过dmmdf查看原库的db_magic

通过查看原库的系统文件SYSTEM.DBF,查看原库的db_magic

dmdba@dm3:/home/dmdba/dmdbms/bin$ ./dmmdf TYPE=1 FILE=/home/dmdba/dmdata/DAMENG/SYSTEM.DBF

dmmdf V8

**********************************************************

1 db_magic=870887862

2 next_trxid=10021

3 pemnt_magic=2000257466

**********************************************************

Please input which parameter you want to change(1-3), q to quit: q

dmdba@dm3:/home/dmdba/dmdbms/bin$

2.10 通过dmmdf修改重做日志文件的db_magic

1)修改重做日志文件DAMENG01.log

dmdba@dm3:/home/dmdba/dmdbms/bin$ ./dmmdf TYPE=2 FILE=/home/dmdba/dmdata/DAMENG/DAMENG01.log

dmmdf V8

**********************************************************

1 sig = DMRLOG

2 ver = 7006

3 chksum = 2321349746

4 sta = 1

5 n_magic = 7

6 db_magic = 173054809

7 len = 104857600

8 free = 6271488

9 clsn = 23188

10 clsn_fil = 0

11 clsn_off = 6271488

12 pemnt_magic = 800943287

13 fil_id = 0

15 next_seq = 4091

16 g_next_seq = 4091

17 arch_lsn = 0http://www.cndba.cn/shinelifes/article/4694

18 arch_seq = 0

19 dbversion = 0x7000c

20 min_exec_version = V8.1.1.1http://www.cndba.cn/shinelifes/article/4694

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)

**********************************************************

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(20) or n_apply_ep(21).

Please input the num which one you want to change, q to quit: 6

Input the new value: 870887862

**********************************************************

1 sig = DMRLOG

2 ver = 7006

3 chksum = 3018118813

4 sta = 1

5 n_magic = 7

6 db_magic = 870887862

http://www.cndba.cn/shinelifes/article/4694

7 len = 104857600

8 free = 6271488

9 clsn = 23188

10 clsn_fil = 0

11 clsn_off = 6271488

12 pemnt_magic = 800943287

13 fil_id = 0

15 next_seq = 4091

16 g_next_seq = 4091

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)

**********************************************************

Do you want to quit and save the change to file (y/n): y

Save to file success!

dmdba@dm3:/home/dmdba/dmdbms/bin$

重做日志文件DAMENG01.log修改后,DAMENG02.log也同样需要修改

2)修改重做日志文件DAMENG02.log

dmdba@dm3:/home/dmdba/dmdbms/bin$ ./dmmdf TYPE=2 FILE=/home/dmdba/dmdata/DAMENG/DAMENG02.log

dmmdf V8

**********************************************************

1 sig = DMRLOG

2 ver = 7006

3 chksum = 1801234130

4 sta = 0

5 n_magic = 7

6 db_magic = 173054809

7 len = 104857600

8 free = 4096

9 clsn = 0

10 clsn_fil = 0

11 clsn_off = 0

12 pemnt_magic = 800943287

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)

**********************************************************

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(20) or n_apply_ep(21).

Please input the num which one you want to change, q to quit: 6

Input the new value: 870887862

**********************************************************

1 sig = DMRLOGhttp://www.cndba.cn/shinelifes/article/4694

2 ver = 7006

3 chksum = 1390709821

4 sta = 0

5 n_magic = 7

6 db_magic = 870887862

7 len = 104857600

8 free = 4096

9 clsn = 0

10 clsn_fil = 0

11 clsn_off = 0

12 pemnt_magic = 800943287

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)

http://www.cndba.cn/shinelifes/article/4694

   recv_apply_lsn_arr: (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)

**********************************************************

Do you want to quit and save the change to file (y/n): y

Save to file success!

dmdba@dm3:/home/dmdba/dmdbms/bin$

2.11 正常重启数据库

重做日志文件DAMENG01.logDAMENG02.log修改完成后,启动数据库。

dmdba@dm3:/home/dmdba/dmdbms/bin$ ./DmServiceDAMENG start

Starting DmServiceDAMENG: [ OK ]

http://www.cndba.cn/shinelifes/article/4694

dmdba@dm3:/home/dmdba/dmdbms/bin$

数据库启动成功,说明修复数据库成功,查询相关数据,写入部分测试数据,检查是否可以正常读写数据库数据。

2.12 数据启动后迁移数据

此种情况重启的数据库可能无法进行正常的读写操作。即使可以正常读写操作,可能存在一些未知的问题。为了数据库的稳定运行,建议重建新库,将数据迁移到新库中。

更多内容链接:https://edu.dameng.com,https://eco.dameng.com/

 

 

 

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

https://edu.dameng.com,https://eco.dameng.com/

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

shinelifes

关注
  • 28
    原创
  • 0
    翻译
  • 0
    转载
  • 0
    评论
  • 访问:32372次
  • 积分:99
  • 等级:注册会员
  • 排名:第29名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ