参考文档DM8 1-1-190版本《DM8备份恢复手册》
主备集群恢复到单机的场景
使用主库的全备+备库的归档日志文件恢复到单机数据库。
环境说明
OS:Linux
DB_VERSION:DM8 1-1-190-21.04.16-137954-ENT Pack4
主备集群使用备库归档还原恢复
第一步 在主库进行备份
[dmdba@localhost bin]$ ./disql disql V8 用户名: 密码: 服务器[LOCALHOST:5236]:处于主库打开状态 登录使用时间 : 5.839(ms) SQL> SQL> create table t as select * from dba_objects; 操作已执行 已用时间: 742.287(毫秒). 执行号:400. SQL> select count(*) from t; 行号 COUNT(*) ---------- -------------------- 1 1365 已用时间: 4.000(毫秒). 执行号:402. ---执行备份 SQL> backup database full backupset '/home/dmdba/DB_BAK_FULL01'; 操作已执行 已用时间: 00:00:03.972. 执行号:404. ---备份完成后再创建两张表 SQL> create table ttt as select * from dba_objects; 操作已执行 已用时间: 68.788(毫秒). 执行号:500. SQL> create table tt as select * from dba_objects; 操作已执行 已用时间: 89.548(毫秒). 执行号:507. SQL> select count(*) from ttt; 行号 COUNT(*) ---------- -------------------- 1 1367 已用时间: 0.778(毫秒). 执行号:601. SQL> select count(*) from tt; 行号 COUNT(*) ---------- -------------------- 1 1369 已用时间: 1.011(毫秒). 执行号:602. SQL> exit
复制
备库切换在线日志执行checkpoint生成归档日志。
第二步 拷贝备份文件和备库归档日志到目的库
[dmdba@localhost ~]$ scp -r DB_BAK_FULL01 192.168.15.50:/home/dmdba dmdba@192.168.15.50's password: DB_BAK_FULL01.bak 100% 27MB 32.8MB/s 00:00 DB_BAK_FULL01_1.bak 100% 11KB 5.3MB/s 00:00 DB_BAK_FULL01.meta 100% 81KB 23.5MB/s 00:00 [dmdba@localhost arch]$ scp *.log 192.168.15.50:/data/dmarch/stb_arch dmdba@192.168.15.50's password: STANDBY_ARCHIVE_0x137E5B0D[0]_2021-05-11_18-30-39.log 100% 25KB 7.8MB/s 00:00 STANDBY_ARCHIVE_0x137E5B0D[0]_2021-05-11_18-35-34.log 100% 128MB 57.5MB/s 00:02
复制
第三步 在单机目的库进行还原恢复
需要注意的是:
默认情况下,恢复阶段收集归档时只收集与待恢复库DB_MAGIC、PERMANENT_MAGIC一致的归档文件,而在主备环境中PERMANNET_MAGIC是一致的,此时可通过指定备库归档日志的DB_MAGIC跳过这一限制,如果不指定DB_MAGIC则会报错。
(1)可以使用DMRMAN先查看下主库备份文件的DB_MAGIC值:
RMAN> show backupset '/home/dmdba/DB_BAK_FULL01'; show backupset '/home/dmdba/DB_BAK_FULL01'; <backupset [DEVICE TYPE:DISK, BACKUP_PATH: /home/dmdba/DB_BAK_FULL01] info start ..........> <DB INFO> system path: /dm/dm134/data/DAMENG pmnt_magic: 197080140 src_db_magic: 327047949 db_magic: 327047949 ---备份文件的DB_MAGIC dsc node: 1 sys mode: 1 page check: 0 rlog encrypt: 0 external cipher[id/name]: 0/ external hash[id/name]: 0/ length in char: 0 use new hash: 1 page size: 16KB extent size: 16 case sensitive: 1 log page size: 512B unicode_flag/charset: 1 data version: 0x7000C sys version: V8 enable policy: 0 archive flag: 1 blank_pad_mode: 0 crc_check: TRUE page_enc_slice_size: 0 <META INFO> backupset sig: BA backupset version: 0x400A database name: DAMENG backup name: DB_FULL_20210511_182553_195320 backupset description: n_magic: 0x3F029C24 parent n_magic: 0xFFFFFFFF meta file size : 82432 compressed level: 0 encrypt type: 0 parallel num: 1 backup range: database mpp_timestamp: 1620728753 with_huge: FALSE backupset_type: NORMAL mpp_flag: FALSE backup level: online backup type: full without log: FALSE end_lsn: 49319 max_trxid: 48413 base begin_lsn: -1 base end_lsn: -1 base n_magic: 0xFFFFFFFF base name: base backupset: backup time: 2021-05-11 18:25:57 min exec ver: 0x08010101 min dct ver: 4 pkg size: 0x02000000 <EP INFO> EP[0]: begin_pkg_seq: 4077 begin_lsn: 49304 end_pkg_seq: 4086 end_lsn: 49319 <FILE INFO> backupset directory: /home/dmdba/DB_BAK_FULL01 backupset name: DB_BAK_FULL01 backup data file num: 4 backup piece num: 2 backup huge file num: 0 <backup_piece_list> $file_seq |$size(KB) |$pos_desc |$content_type 0 |27430 |DB_BAK_FULL01.bak |DATA 1 |11 |DB_BAK_FULL01_1.bak |LOG <data_file_list> $file_seq |$group_id |$group_name |$file_id |$file_path |$mirror_path |$file_len |$copy_num |$size_flag 1 |0 |SYSTEM |0 |/dm/dm134/data/DAMENG/SYSTEM.DBF | |45088768 |0 |0 2 |1 |ROLL |0 |/dm/dm134/data/DAMENG/ROLL.DBF | |134217728 |0 |0 3 |4 |MAIN |0 |/dm/dm134/data/DAMENG/MAIN.DBF | |134217728 |0 |0 <arch_file_list> $file_seq |$dsc_seq |$file_len |$begin_seqno |$begin_lsn |$end_seqno |$end_lsn 4 |0 |6144 |4077 |49304 |4086 |49319 <huge_file_list> $group_id |$schema_id|$table_id |$column_id|$file_id |$file_len |$path <backupset [DEVICE TYPE:DISK, BACKUP_PATH: /home/dmdba/DB_BAK_FULL01] info end .> show backupsets successfully. time used: 26.900(ms) RMAN>
复制
(2)使用dmrachk工具查看备机归档日志文件的DB_MAGIC值:
[dmdba@localhost bin]$ ./dmrachk help rachk V8 格式: dmrachk keyword=value 例程: dmrachk arch_fil=/opt/a.log 强制参数: 必须指定arch_fil或者arch_path 关键字 说明(默认值) -------------------------------------------------------------------------------- ARCH_FIL 指定一个归档文件 CMP_FIL 指定一个用于比较的归档文件 ARCH_PATH 指定一个归档目录 CMP_PATH 指定一个用于比较的归档目录 TRUNC_FIL 指定新的文件,用于存储从错误归档中,抽取的有效数据。 EXTRACT_FIL 指定新的文件,用于存储从指定的seq范围的归档文件中抽取数据 ARCH_BAK_PATH 指定备份文件路径,用于存储归档修复过程中的重复文件 CHECK 校验级别(0, 1, 2, 3, 4) 0: 文件校验, 1: 包校验(seq & magic),2:ptx校验,3:rrec校验, 4:清理无效的归档文件,默认(0) BEGIN_LSN 指定归档目录时,指定排除小于该LSN的文件 END_LSN 指定归档目录时,指定排除大于该LSN的文件 BEGIN_SEQ 指定归档目录时,抽取大于该SEQ的文件 END_SEQ 指定归档目录时,抽取小于该SEQ的文件 BEFORE_LSN CHECK=4,指定归档目录,删除该LSN之前的文件。默认为0,所有LSN范围内日志均删除 BEFORE_SEQ CHECK=4,指定归档目录,删除该SEQ之前的文件。默认为0,所有SEQ范围内日志均删除 BEFORE_TIME CHECK=4,指定归档目录,删除该时间点之前的文件。默认删除所有时间点的归档 EXCLUDE_DB_MAGIC CHECK=4,指定归档目录,删除指定的DB_MAGIC之外的文件。 OUTPUT_FIL LOG可以指定输出到文件 DCR_INI 指定dmdcr.ini路径,若未指定,则不使用 DM_INI 目标库dm.ini的路径,用于获取日志加密信息 AFTER_FREE 指定TRUNC_FIL时,是否校验并抽取FREE之后的内容。0 不抽取;1 抽取。默认0 HELP 显示帮助信息 [dmdba@localhost bin]$ ./dmrachk ARCH_PATH=/data/dmarch/stb_arch rachk V8 the database pmnt_magic: 197080140 the database db_magic: 1125819454 /*******************************************************************/ 归档文件/data/dmarch/stb_arch/STANDBY_ARCHIVE_0x137E5B0D[0]_2021-05-11_18-30-39.log明细. version : 0x7006 status : INACTIVE enc_flag : FALSE n_rpkgs : 2 pmnt_magic : 197080140 db_magic : 1125819454 ---备库归档日志文件的DB_MAGIC src_db_magic : 327047949 arch_lsn : 50279 arch_seq : 4102 clsn : 50510 next_seq : 4103 g_next_seq : 4103 file len : 25088 file free : 25088 dsc seqno : 0 dsc node : 1 create time : 2021-05-11 20:45:58.000000 close time : 2021-05-11 18:31:54.429738 /*******************************************************************/ /*******************************************************************/ 归档文件/data/dmarch/stb_arch/STANDBY_ARCHIVE_0x137E5B0D[0]_2021-05-11_18-35-34.log明细. version : 0x7006 status : ACTIVE enc_flag : FALSE n_rpkgs : 16 pmnt_magic : 197080140 db_magic : 1125819454 src_db_magic : 327047949 arch_lsn : 50511 arch_seq : 4104 clsn : 51779 next_seq : 4119 g_next_seq : 4119 file len : 134217728 file free : 168960 dsc seqno : 0 dsc node : 1 create time : 2021-05-11 18:31:54.429738 close time : 2021-05-11 18:35:34.056232 /*******************************************************************/ 概要(节点[0]): 总计: 2 个文件 正确: 2 个文件 错误: 0 个文件 重复: 0 个文件 the rachk tool running cost 2.969 ms
复制
(3)开始进行还原
RMAN> restore database '/data/dmdata/TEST2/dm.ini' from backupset '/home/dmdba/DB_BAK_FULL01';
复制
(4)开始进行恢复
如果不指定备库归档文件的DB_MAGIC,使用默认的DB_MAGIC(也就是主库的DB_MAGIC,主库备份文件中的DB_MAGIC,备库归档日志中的src_db_magic),则会报错。如下:
指定归档文件的DB_MAGIC执行恢复:
RMAN> recover database '/data/dmdata/TEST2/dm.ini' with archivedir '/data/dmarch/stb_arch' use db_magic 1125819454;
复制
更新DB_MAGIC:
RMAN> recover database '/data/dmdata/TEST2/dm.ini' update db_magic;
复制
第四步 启动数据库并OPEN,验证数据
主库备份恢复到单机之后,默认只能启动到mount状态,需要将数据库修改为normal模式并手动OPEN。
SQL> alter database normal;
SQL> alter database open;
SQL> select count(*) from t;
SQL> select count(*) from ttt;
SQL> select count(*) from tt;
复制
至此,还原恢复完成。
结语
主备集群使用备库归档进行恢复的场景还是比较实用的,当主库归档删除后,我们可以使用备库的归档日志来讲数据恢复到最新状态。
在使用主库备份文件+备库归档日志进行还原恢复时,RECOVER的时候需要指定备库归档日志文件的DB_MAGIC,如果不指定DB_MAGIC则会报错。因为默认情况下,RECOVER阶段收集归档时只收集与待恢复库DB_MAGIC、PERMANENT_MAGIC一致的归档文件,而在主备环境中PERMANNET_MAGIC是一致的,所以需要指定DB_MAGIC来跳过这一限制。
更多资讯请上达梦技术社区了解:https://eco.dameng.com