参考文档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
[email protected]'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
[email protected]'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';
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
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[0]:
begin_pkg_seq: 4077
begin_lsn: 49304
end_pkg_seq: 4086
end_lsn: 49319
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
$file_seq |$size(KB) |$pos_desc |$content_type
0 |27430 |DB_BAK_FULL01.bak |DATA
1 |11 |DB_BAK_FULL01_1.bak |LOG
$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
$file_seq |$dsc_seq |$file_len |$begin_seqno |$begin_lsn |$end_seqno |$end_lsn
4 |0 |6144 |4077 |49304 |4086 |49319
$group_id |$schema_id|$table_id |$column_id|$file_id |$file_len |$path
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;
主库备份恢复到单机之后,默认只能启动到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来跳过这一限制。