注册
达梦数据库误删除REDO如何恢复
技术分享/ 文章详情 /

达梦数据库误删除REDO如何恢复

潘栋民 2022/04/21 3145 1 1

误删redo日志文件

  1. 删除后数据库还能正常使用,应该是下次切换日志才会有报错
[dmdba@dmdb01 dmdb]$ mv dmdb01.log dmdb01.log.bk
[dmdba@dmdb01 dmdb]$ mv dmdb02.log dmdb02.log.bk

重启数据库服务报错

[root@dmdb01 ~]# systemctl stop DmServicedmdb.service 
[root@dmdb01 ~]# systemctl start DmServicedmdb.service 
Job for DmServicedmdb.service failed because the control process exited with error code.
See "systemctl status DmServicedmdb.service" and "journalctl -xe" for details.
  • 查看日志可以发现报错信息是缺少redo日志文件
[dmdba@dmdb01 log]$ pwd
/home/dmdba/dmdbms/log
[dmdba@dmdb01 log]$ tail -f DmServicedmdb.log 
version info: develop
DM Database Server x64 V8 1-2-94-21.11.11-150650-10038-ENT  startup...
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
Database mode = 0, oguid = 0
/dmdata/dmdb/dmdb01.log not exist, can not startup

根据源库的初始化参数,重新初始化一个数据库实例,REDO大小要>=源库的

  1. 初始化参数要和原库一致,页大小、大小写敏感、字符集等
  2. 在数据库文件存放路径查询,…/data/DAMENG 目录下以 dminit+日期时间.log 命名的文件中查询
[dmdba@dmdb01 dmdb]$ pwd 
/dmdata/dmdb
[dmdba@dmdb01 dmdb]$ 
[dmdba@dmdb01 dmdb]$ cat dminit20220321233751.log 
start init database: V8, 2022-03-21 23:37:51
init params:
        db path: /dmdata/dmdb
        db name: dmdb
        page size: 32768
        extent size: 32
        string case sensitive: 1
        charset: 0
 log file path: /dmdata/dmdb/dmdb01.log
 log file path: /dmdata/dmdb/dmdb02.log
create ini file /dmdata/dmdb/dm.ini success.
create rlog file /dmdata/dmdb/dmdb01.log success.
create rlog file /dmdata/dmdb/dmdb02.log success.
SYSTEM file : /dmdata/dmdb/SYSTEM.DBF
MAIN file : /dmdata/dmdb/MAIN.DBF
ROLL file : /dmdata/dmdb/ROLL.DBF
create dm database success. 2022-03-21 23:37:54

启动这个新初始化的实例,然后正常关闭

./dminit path=/dmbak page_size=32 extent_size=32 charset=0 log_size=2048 db_name=dmdb instance_name=dmdb
[dmdba@dmdb01 bin]$ pwd
/home/dmdba/dmdbms/bin
[dmdba@dmdb01 bin]$ ./dmserver /dmbak/dmdb/dm.ini
SQL> select para_name,para_value from v$dm_ini where para_name like '%PATH%';
LINEID     PARA_NAME            PARA_VALUE
1          CTL_PATH             /dmbak/dmdb/dm.ctl
2          CTL_BAK_PATH         /dmbak/dmdb/ctl_bak
3          SYSTEM_PATH          /dmbak/dmdb
4          CONFIG_PATH          /dmbak/dmdb
5          TEMP_PATH            /dmbak/dmdb
6          BAK_PATH             /dmbak/dmdb/bak
7          AUD_PATH             NULL
8          DFS_PATH             $/dmdb
9          UNIX_SOCKET_PATHNAME NULL
10         SVR_LOG_FILE_PATH    ../log
11         TRACE_PATH           /dmbak/dmdb/trace

将两个REDO拷贝到故障实例下面

[dmdba@dmdb01 dmdb]$ ll /dmbak/dmdb/*.log
-rw-rw-r-- 1 dmdba dmdba 2147483648 Mar 23 23:00 /dmbak/dmdb/dmdb01.log
-rw-rw-r-- 1 dmdba dmdba 2147483648 Mar 23 23:00 /dmbak/dmdb/dmdb02.log
[dmdba@dmdb01 dmdb]$ cp /dmbak/dmdb/dmdb01.log /dmdata/dmdb/dmdb01.log
[dmdba@dmdb01 dmdb]$ cp /dmbak/dmdb/dmdb02.log /dmdata/dmdb/dmdb02.log

利用dmmdf 修改redo日志的db_magic的值,保持和源库一样(两个文件都要改)

[dmdba@dmdb01 bin]$ ./dmmdf type=1 file=/dmdata/dmdb/SYSTEM.DBF
dmmdf V8
**********************************************************
1 db_magic=630735552
2 next_trxid=8069
3 pemnt_magic=276255351
**********************************************************
Please input which parameter you want to change(1-3), q to quit: q
[dmdba@dmdb01 bin]$ ./dmmdf type=2 file=/dmdata/dmdb/dmdb01.log
dmmdf V8
**********************************************************
1 sig = DMRLOG
2 ver = 7006
3 chksum = 3866123057
4 sta = 1
5 n_magic = 7
6 db_magic = 1612587212
7 len = 2147483648
8 free = 8757760
9 clsn = 33073
10 clsn_fil = 0
11 clsn_off = 8757760
12 pemnt_magic = 913014907
13 fil_id = 0
15 next_seq = 4295
16 g_next_seq = 4295
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: 630735552
**********************************************************
1 sig = DMRLOG
2 ver = 7006
3 chksum = 2750822717
4 sta = 1
5 n_magic = 7
6 db_magic = 630735552
7 len = 2147483648
8 free = 8757760
9 clsn = 33073
10 clsn_fil = 0
11 clsn_off = 8757760
12 pemnt_magic = 913014907
13 fil_id = 0
15 next_seq = 4295
16 g_next_seq = 4295
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!

修改完毕后,编辑dm.ini将PSEG_RECV设置为0(原值为3,0代表故障也启动),启动故障数据库服务

[dmdba@dmdb01 bin]$ cat /dmdata/dmdb/dm.ini | grep PSEG_RECV
                PSEG_RECV                       = 0  
[dmdba@dmdb01 bin]$ ./dmserver /dmdata/dmdb/dm.ini
SYSTEM IS READY.

将数据库全库备份

利用全备重新部署集群

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服