签到成功

知道了

CNDBA社区CNDBA社区

DM7 达梦数据库多次故障恢复后使用归档和redo log 恢复实例,redo数据不丢失

2020-06-24 14:29 2413 0 原创 达梦数据库
作者: franklin

DM7 达梦数据库多次故障恢复后使用不同数据库归档和redolog 恢复实例,redolog数据不丢失
参考了Dave的文章https://www.cndba.cn/dave/article/3615
添加了修改redolog的动作,是恢复实例时将数据库恢复到redolog最后的条目

dminit PATH=/opt/dmbase/dmdbms/data DB_NAME=aaa INSTANCE_NAME=aaa
dmserver /opt/dmbase/dmdbms/data/aaa/dm.ini &
select instance_name from v$instance;
ALTER DATABASE MOUNT;
ALTER DATABASE ADD ARCHIVELOG ‘DEST = /opt/dmbase/dmdbms/arch, TYPE = local, FILE_SIZE = 128, SPACE_LIMIT = 0’;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;

操作数据库的同时备份数据库,备份集为 B1。此处以向表中循环插入数据为例操作数据库。

CREATE TABLE TAB1(C1 INT);
BEGIN
FOR I IN 1..100000 LOOP
INSERT INTO TAB VALUES(I);
COMMIT;
END LOOP;
END;
/
备份B1
backup database full to b1 backupset ‘/opt/dmbase/dmdbms/bak/B1’ device type disk backupinfo ‘database aaa full backup online’ maxpiecesize 2048;https://www.cndba.cn/franklin/article/4191

https://www.cndba.cn/franklin/article/4191

继续向数据库插入数据一段时间后杀掉数据库进程,模拟数据库故障。从备份后到数据库故障这段时间的生成的归档称为 A1。
INSERT INTO TAB_FOR_RECOVER VALUES(2000);
INSERT INTO TAB_FOR_RECOVER VALUES(2001);
INSERT INTO TAB_FOR_RECOVER VALUES(2002);
INSERT INTO TAB_FOR_RECOVER VALUES(2003);
commit;

ps -ef |grep dm
kill -9

创建目标库 test_res,即待还原的库,并配置归档,归档目录与数据库aaaHh 相同。
./dminit path=/opt/dmbase/dmdbms/data DB_NAME=test_res
initdb V7.6.0.120-Build(2018.12.12-100516)ENT
db version: 0x7000a
file dm.key not found, use default license!
License will expire on 2020-06-04
log file path: /opt/dmbase/dmdbms/data/test_res/test_res01.log
log file path: /opt/dmbase/dmdbms/data/test_res/test_res02.log
write to dir [/opt/dmbase/dmdbms/data/test_res].
create dm database success. 2020-05-21 12:27:08

vim dm.ini
ARCH_INI = 1

cp /opt/dmbase/dmdbms/data/aaa/dmarch.ini /opt/dmbase/dmdbms/data/test_res/

https://www.cndba.cn/franklin/article/4191
https://www.cndba.cn/franklin/article/4191

启动DMRMAN工具,利用备份集B1和归档A1恢复数据库test_res到aaa故障前的状态。
$ cd /opt/dmbase/dmdbms/bin
$ ./dmrman
RMAN> restore database ‘/opt/dmbase/dmdbms/data/test_res/dm.ini’ from backupset ‘/opt/dmbase/dmdbms/bak/B1’;
restore database ‘/opt/dmbase/dmdbms/data/test_res/dm.ini’ from backupset ‘/opt/dmbase/dmdbms/bak/B1’;
file dm.key not found, use default license!
checking if the database under system path [/opt/dmbase/dmdbms/data/test_res] is running, write dmrman info.
RESTORE DATABASE CHECK……
RESTORE DATABASE,dbf collect……
RESTORE DATABASE,dbf refresh ……
RESTORE BACKUPSET [/opt/dmbase/dmdbms/bak/B1] START……
total 4 packages processed…
RESTORE DATABASE,UPDATE ctl file……
RESTORE DATABASE,REBUILD key file……
RESTORE DATABASE,CHECK db info……
RESTORE DATABASE,UPDATE db info……
total 5 packages processed!
CMD END.CODE:[0]
restore successfully.
time used: 15716.476(ms)
RMAN> recover database ‘/opt/dmbase/dmdbms/data/test_res/dm.ini’ with archivedir ‘/opt/dmbase/dmdbms/arch’;
recover database ‘/opt/dmbase/dmdbms/data/test_res/dm.ini’ with archivedir ‘/opt/dmbase/dmdbms/arch’;
checking if the database under system path [/opt/dmbase/dmdbms/data/test_res] is running…[4].
checking if the database under system path [/opt/dmbase/dmdbms/data/test_res] is running…[3].
checking if the database under system path [/opt/dmbase/dmdbms/data/test_res] is running…[2].
checking if the database under system path [/opt/dmbase/dmdbms/data/test_res] is running…[1].
checking if the database under system path [/opt/dmbase/dmdbms/data/test_res] is running…[0].
checking if the database under system path [/opt/dmbase/dmdbms/data/test_res] is running, write dmrman info.
EP[0] max_lsn: 851190
EP[0] Recover LSN from 851191 to 851190.
Recover from archive log finished, time used:0.000s.
recover successfully!
time used: 7057.984(ms)

启动目标库 test_res,向数据库中继续插入数据。
cd /opt/dmbase/dmdbms/bin
./dmserver /opt/dmbase/dmdbms/data/test_res/dm.ini &

恢复后用原来的用户名密码连接
./disql sysdba/1234567890
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间: 3.950(毫秒)
disql V7.6.0.120-Build(2018.12.12-100516)ENT

继续插入数据
BEGIN
FOR I IN 1..10 LOOP
INSERT INTO TAB_FOR_RECOVER VALUES(1999); —输入特定数值,后期验证
COMMIT;
END LOOP;
END;
/
select count() from tab_for_recover where c1=1988;
行号 COUNT(
)


1 12
BEGIN
FOR I IN 1..100000 LOOP
INSERT INTO TAB_FOR_RECOVER VALUES(i); —填充数据,做归档切换
COMMIT;
END LOOP;
END;
/
alter system switch logfile; —把提交数据归档

插入数据一段时间后,杀掉数据库进程,模拟数据库第二次故障。数据库 test_res 启动到第二次故障之间产生的归档为 A2。
查看当前启动目录
$ ps -ef|grep dm.ini
dmdba 7138 7112 1 12:33 pts/4 00:00:02 ./dmserver /opt/dmbase/dmdbms/data/test_res/dm.ini
kill -9 7138

查看备份集的数据库信息,获取源库的 DB_MAGIC。
RMAN> show backupset ‘/dm/dm_bak/db_full_bak_for_recover_arch’ info db;

https://www.cndba.cn/franklin/article/4191

恢复目标库test_res到第一次故障前的状态。恢复一次,目标库的DB_MAGIC都会改变,因此归档 A1、A2 的 DB_MAGIC 不同,属于不同的数据库。第一次恢复只能先重做归档 A1,即恢复到第一次故障前的状态。

RMAN> restore database ‘/opt/dmbase/dmdbms/data/test_res/dm.ini’ from backupset ‘/opt/dmbase/dmdbms/bak/B1’;
restore database ‘/opt/dmbase/dmdbms/data/test_res/dm.ini’ from backupset ‘/opt/dmbase/dmdbms/bak/B1’;
file dm.key not found, use default license!
checking if the database under system path [/opt/dmbase/dmdbms/data/test_res] is running…[4].
checking if the database under system path [/opt/dmbase/dmdbms/data/test_res] is running…[3].
checking if the database under system path [/opt/dmbase/dmdbms/data/test_res] is running…[2].
checking if the database under system path [/opt/dmbase/dmdbms/data/test_res] is running…[1].
checking if the database under system path [/opt/dmbase/dmdbms/data/test_res] is running…[0].
checking if the database under system path [/opt/dmbase/dmdbms/data/test_res] is running, write dmrman info.
RESTORE DATABASE CHECK……
RESTORE DATABASE,dbf collect……
RESTORE DATABASE,dbf refresh ……
RESTORE BACKUPSET [/opt/dmbase/dmdbms/bak/B1] START……
total 4 packages processed…
RESTORE DATABASE,UPDATE ctl file……
RESTORE DATABASE,REBUILD key file……
RESTORE DATABASE,CHECK db info……
RESTORE DATABASE,UPDATE db info……
total 5 packages processed!
CMD END.CODE:[0]
restore successfully.
time used: 10450.739(ms)

RMAN> recover database ‘/opt/dmbase/dmdbms/data/test_res/dm.ini’ with archivedir ‘/opt/dmbase/dmdbms/arch’;
recover database ‘/opt/dmbase/dmdbms/data/test_res/dm.ini’ with archivedir ‘/opt/dmbase/dmdbms/arch’;
file dm.key not found, use default license!
checking if the database under system path [/opt/dmbase/dmdbms/data/test_res] is running…[4].
checking if the database under system path [/opt/dmbase/dmdbms/data/test_res] is running…[3].
checking if the database under system path [/opt/dmbase/dmdbms/data/test_res] is running…[2].
checking if the database under system path [/opt/dmbase/dmdbms/data/test_res] is running…[1].
checking if the database under system path [/opt/dmbase/dmdbms/data/test_res] is running…[0].
checking if the database under system path [/opt/dmbase/dmdbms/data/test_res] is running, write dmrman info.
EP[0] max_lsn: 851190
EP[0] Recover LSN from 851191 to 851190.
Recover from archive log finished, time used:0.001s.
recover successfully!
time used: 7055.853(ms)https://www.cndba.cn/franklin/article/4191

使用dmrachk 工具查看归档 A2 的 DB_MAGIC。
/opt/dmbase/dmdbms/bin/dmrachk arch_fil=./ARCHIVE_LOCAL1_20200521112133690_0.log
rachk V7.6.0.120-Build(2018.12.12-100516)ENT
/*/
归档文件./ARCHIVE_LOCAL1_20200521112133690_0.log明细.
version : 0x7004
status : INACTIVE
n_rpags : 101026
db_magic : -1438457570
pemnt_magic : -1441248904
arch_lsn : 440885
arch_seq : 115458
clsn : 846223
next_seq : 216483
file len : 51729408
file free : 51729408
create time : 2020-05-21 11:21:33
close time : 2020-05-21 11:24:07
crc_check : TRUE
/*/

概要(节点[0]):
总计: 1 个文件
正确: 1 个文件
错误: 0 个文件
重复: 0 个文件https://www.cndba.cn/franklin/article/4191

the rachk tool running cost 0.318 ms

修改目标库 test_res 的 DB_MAGIC 与归档 A2 一致。

cd /opt/dmbase/dmdbms/data/test_res
—修改文件 SYSTEM.DBF
/opt/dmbase/dmdbms/bin/dmmdf SYSTEM.DBF
Invalid input SYSTEM.DBF
格式: ./dmmdf KEYWORD=value

例程: ./dmmdf TYPE=1 FILE=/opt/dmbase/dmdbms/data/test_res/SYSTEM.DBF

关键字 说明

TYPE 类型
1表示dbf
2表示rlog
3表示original bak
4表示bakset meta
5表示bakset bkp
6表示bakset
7表示批量修改归档文件的db_magic
8表示数据库降级
9表示批量修改指定库的联机日志的CRC_CHECK
10表示批量修改指定归档目录中归档日志CRC_CHECK
FILE 文件路径
DCR_INI dmdcr.ini路径
DB_MAGIC_SRC db_magic_src,TYPE=7和10时使用
DB_MAGIC_DST db_magic_dst,TYPE=7时使用
CRC_CHECK 目标修改的CRC_CHECK值,TYPE=9和10时使用
HELP 打印帮助信息


     ./dmmdf TYPE=1 FILE=/opt/dmbase/dmdbms/data/test_res/SYSTEM.dbf
     ./dmmdf TYPE=2 FILE=/opt/dmbase/dmdbms/data/test_res/test_res01.log
     ./dmmdf TYPE=3 FILE=/opt/dmbase/dmdbms/data/test_res/bak/full.bak
     ./dmmdf TYPE=4 FILE=/opt/dmbase/dmdbms/data/test_res/bak/B1/aaa.meta
     ./dmmdf TYPE=5 FILE=/opt/dmbase/dmdbms/data/test_res/bak/B1/aaa.bak
     ./dmmdf TYPE=6 FILE=/opt/dmbase/dmdbms/data/test_res/bak/B1
     ./dmmdf TYPE=7 FILE=/opt/dmbase/dmdbms/data/test_res/arch DB_MAGIC_SRC=4734373 DB_MAGIC_DST=4734366
     ./dmmdf TYPE=8 FILE=/opt/dmbase/dmdbms/data/test_res/dm.ctl
     ./dmmdf TYPE=9 FILE=/opt/dmbase/dmdbms/data/test_res/dm.ini CRC_CHECK=1
     ./dmmdf TYPE=10 FILE=/opt/dmbase/dmdbms/data/test_res/arch CRC_CHECK=0_MAGIC_SRC=4734373

修改
dmdba@fan-machine:/opt/dmbase/dmdbms/data/test_res$ /opt/dmbase/dmdbms/bin/dmmdf TYPE=1 FILE=SYSTEM.DBF
dmmdf V7.6.0.120-Build(2018.12.12-100516)ENT


1 db_magic=172670064
2 next_trxid=201172
3 pemnt_magic=-1441248904


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

https://www.cndba.cn/franklin/article/4191


1 db_magic=-1438457570
2 next_trxid=201172
3 pemnt_magic=-1441248904https://www.cndba.cn/franklin/article/4191


Do you want to save the change to file (y/n): Y
Save to file success!

-修改文件2个重做日志文件:重复2次,修改2个文件:
/opt/dmbase/dmdbms/bin/dmmdf type=2 file=test_res02.log
dmmdf V7.6.0.120-Build(2018.12.12-100516)ENT

https://www.cndba.cn/franklin/article/4191


1 sig = DMRLOG
2 ver = 7004
3 chksum = 0
4 dbversion = 0x7000a
5 sta = 0
6 n_magic = 14
7 db_magic = 172670064
8 clsn_fil = 0
10 next_seq = 0
11 arch_seq = 0
12 len = 268435456
13 free = 4096
14 clsn = 0
15 clsn_off = 0
16 arch_lsn = 0
17 pemnt_magic = -1441248904
18 fil_id = 1
19 crc_check = 1


You can only reset sta(5) or db_magic (7) or clsn (14) or pemnt_magic(17) or fil_id(18).
Please input the num which one you want to change, q to quit: 7
Input the new value: -1438457570


1 sig = DMRLOG
2 ver = 7004
3 chksum = 0
4 dbversion = 0x7000a
5 sta = 0
6 n_magic = 14
7 db_magic = -1438457570
8 clsn_fil = 0
10 next_seq = 0
11 arch_seq = 0
12 len = 268435456
13 free = 4096
14 clsn = 0
15 clsn_off = 0
16 arch_lsn = 0
17 pemnt_magic = -1441248904
18 fil_id = 1
19 crc_check = 1


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

利用归档 A2 恢复数据库至第二次故障前的状态。
RMAN> recover database ‘/opt/dmbase/dmdbms/data/test_res/dm.ini’ with archivedir ‘/opt/dmbase/dmdbms/arch’;

起库查询:
$ ./dmserver /opt/dmbase/dmdbms/data/test_res/dm.ini/dm.ini

如果没有修改日志文件,就会报这个错误
RMAN> recover database ‘/opt/dmbase/dmdbms/data/test_res/dm.ini’ with archivedir ‘/opt/dmbase/dmdbms/arch’;
recover database ‘/opt/dmbase/dmdbms/data/test_res/dm.ini’ with archivedir ‘/opt/dmbase/dmdbms/arch’;
checking if the database under system path [/opt/dmbase/dmdbms/data/test_res] is running…[4].
checking if the database under system path [/opt/dmbase/dmdbms/data/test_res] is running…[3].
checking if the database under system path [/opt/dmbase/dmdbms/data/test_res] is running…[2].
checking if the database under system path [/opt/dmbase/dmdbms/data/test_res] is running…[1].
checking if the database under system path [/opt/dmbase/dmdbms/data/test_res] is running…[0].
checking if the database under system path [/opt/dmbase/dmdbms/data/test_res] is running, write dmrman info.
rfil grp log file error in (db_magic, permanent_magic),
log file /opt/dmbase/dmdbms/data/test_res/test_res01.log is (172670064, -1441248904),
dbfile is(-1438457570, -1441248904).

达梦相关技术信息在达梦云适配中心
https://eco.dameng.com

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

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

franklin

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

        QQ交流群

        注册联系QQ