数据迁移 | 物理备份还原恢复(DISQL、DMRMAN、MANAGER、CONSOLE)

本文参考:
https://eco.dameng.com/docs/zh-cn/pm/backup-restore-introduction.html
https://eco.dameng.com/docs/zh-cn/ops/physical-backup.html

【注意】本文暂不涉及增量备份,所有内容均为全量备份

物理备份还原工具介绍

数据库状态命令行图形化备份还原
联机disqlMANAGER数据库 / 表空间 / 表 / 归档
脱机DMRMANCONSOLE数据库 / 归档数据库 / 表空间 / 归档

概要

什么是物理备份还原?

  • 物理备份还原是对数据库的操作系统物理文件(如数据文件、redo日志文件、归档日志)的备份还原

物理备份还原涉及哪些知识点?

  • 数据文件、归档日志、重做日志
  • LSN、包序号(PKG SEQNO)、检查点
  • 备份集、备份片、元数据
  • 完全备份、增量备份、联机备份、脱机备份
  • 介质管理
  • 备份方式

归档配置

与归档相关的两个文件:

  • dm.ini
    归档启停(由ARCH_INI参数控制)
  • dmarch.ini
    归档配置(设置归档路径、类型、大小等)

归档可分为:

  • 本地归档
  • 远程归档

DM物理备份还原使用的是:本地归档日志

配置本地归档

配置归档的方式

  • 联机归档配置
    实例运行期间,使用SQL语句修改参数文件dm.ini和dmarch.ini
  • 手动归档配置
    实例关闭期间,手动修改参数文件dm.ini和dmarch.ini

联机归档配置

准备存放归档的磁盘和目录
[root@localhost ~]# mkdir -p /data/arch
[root@localhost ~]# chown -R dmdba:dinstall /data
将数据库状态修改为mount,以修改数据库的配置
alter database mount;
配置本地归档
alter database add archivelog 'dest=/data/arch ,TYPE=local,FILE_SIZE=1024,SPACE_LIMIT=2048';
开启归档
alter database archivelog;
开启数据库
alter database open;

【要点1】
根据实际提供的参数,系统会自动创建dmarch.ini配置文件,其路径与dm.ini一致

alter database add archivelog 'dest=/data/arch ,TYPE=local,FILE_SIZE=1024,SPACE_LIMIT=2048';

dmarch.ini具体内容如下

[dmdba@localhost DMDB]$ cat dmarch.ini
#DaMeng Database Archive Configuration file
#this is comments

[ARCHIVE_LOCAL1]
        ARCH_TYPE            = LOCAL        
        ARCH_DEST            = /data/arch        
        ARCH_FILE_SIZE       = 1024        
        ARCH_SPACE_LIMIT     = 2048        
        ARCH_FLUSH_BUF_SIZE  = 0  

【要点2】
此命令将开启归档,系统会自动将dm.ini配置文件中的ARCH_INI参数修改为1

alter database archivelog;
[dmdba@localhost DMDB]$ cat dm.ini|grep ARCH_INI
                ARCH_INI                        = 1                     #dmarch.ini

【要点3】
针对本地归档,了解参数具体含义(dmarch.ini配置文件)

配置项参数值配置含义
[ARCH_NAME]ARCHIVE_LOCAL1REDO日志归档名为ARCHIVE_LOCAL1
ARCH_TYPELOCAL本地归档
ARCH_DEST/data/arch归档存放在/data/arch目录中
ARCH_FILE_SIZE1024单个归档日志文件大小为1G
ARCH_SPACE_LIMIT2048所有归档总大小不能超过2G,达到2G系统将自动删除最老的归档日志文件

注意:

  • ARCH_SPACE_LIMIT会影响归档日志的保留时间,设置需谨慎
  • ARCH_DEST设置的目录权限要正确

手动归档配置

  1. 停库
  2. 修改配置文件(dmarch.ini、dm.ini,两个文件的路径相同)
vi dmarch.ini
[ARCHIVE_LOCAL1]
        ARCH_TYPE            = LOCAL        
        ARCH_DEST            = /data/arch        
        ARCH_FILE_SIZE       = 1024        
        ARCH_SPACE_LIMIT     = 2048
vi dm.ini
修改如下配置
ARCH_INI=1
  1. 起库

检查归档状态

ARCH_MODE为Y,说明开启归档了

SQL> select arch_mode from v$database;

LINEID     ARCH_MODE
---------- ---------
1          Y

还可以到归档日志存放的路径,查看归档日志文件

[dmdba@localhost arch]$ cd /data/arch
[dmdba@localhost arch]$ ls
ARCHIVE_LOCAL1_0x21739092[0]_2021-11-24_08-31-45.log

启动DMAP

备份集备份还原实现策略:

  • 使用DMAP辅助进程
    备份还原依赖dmap进程,需启动dmap进程,才能进行备份还原
  • 不使用辅助进程
    由主进程dmserver执行备份还原,不依赖dmap进程

怎么使用dmap辅助进程?

  1. 启动dmap进程
    DmAPService start
  2. dm.ini参数文件中,将BAK_USE_AP参数设为1
    对于DMRMAN工具,启动时,需将参数use_ap设为1

使用dmap进程进行备份还原有什么好处?

  • 支持第三方备份(DEVICE TYPE=TAPE)
  • 提升备份还原效率(可设置并行度,可加速加密、压缩处理)

数据库

数据库级别可以联机备份也可以脱机备份

联机备份

使用SQL语句进行全库备份

注意
联机备份时,关闭已配置的本地归档之后再重新打开,会造成归档文件中部分日志缺失,备份时检查归档文件连续性时将会报错。存在该类操作时,用若要避免该错误,备份前需要调用 checkpo int(100) 主动刷新检查点。

最简单的全备

全库备份的参数很多,下面进行一次最简单的全备

SQL> backup database;
executed successfully

全库备份命令执行后,系统将在与dm.ini相同的路径下,创建bak目录,并根据备份类型、时间等,创建备份目录,存放此次备份的所有备份文件

[dmdba@localhost bak]$ cd /dm/data/DMDB/bak
[dmdba@localhost bak]$ ls
DB_DMDB_FULL_20211124_100658_566130
[dmdba@localhost bak]$ ls DB_DMDB_FULL_20211124_100658_566130/
DB_DMDB_FULL_20211124_100658_566130.bak
DB_DMDB_FULL_20211124_100658_566130.meta
DB_DMDB_FULL_20211124_100658_566130_1.bak

指定备份目录

指定备份集的路径为data/dmbak/db_full_bak_01
SQL> BACKUP DATABASE FULL BACKUPSET '/data/dmbak/db_full_bak_01';
executed successfully
used time: 00:02:58.072. Execute id is 12301.

备份完成后,将创建目录/data/dmbak/db_full_bak_01,此次全库备份产生的备份文件都存放在该目录中

[dmdba@localhost dmbak]$ cd /data/dmbak/
[dmdba@localhost dmbak]$ ls
db_full_bak_01
[dmdba@localhost dmbak]$ ll db_full_bak_01/
total 256200
-rw-r--r--. 1 dmdba dinstall 262207488 Nov 24 10:02 db_full_bak_01.bak
-rw-r--r--. 1 dmdba dinstall     94720 Nov 24 10:02 db_full_bak_01.meta
-rw-r--r--. 1 dmdba dinstall     33280 Nov 24 10:02 db_full_bak_01_1.bak

限制备份片大小

每个备份片不能超过50MB

SQL> BACKUP DATABASE full BACKUPSET '/data/dmbak/weekly_full_bak_20211125' MAXPIECESIZE 50;

[dmdba@localhost weekly_full_bak_20211125]$ du -sh *
33M     weekly_full_bak_20211125_1.bak
33M     weekly_full_bak_20211125_2.bak
34M     weekly_full_bak_20211125_3.bak
33M     weekly_full_bak_20211125_4.bak
224K    weekly_full_bak_20211125_5.bak
42M     weekly_full_bak_20211125.bak
100K    weekly_full_bak_20211125.meta

### 压缩备份
```bash
压缩备份集,压缩级别为5
BACKUP DATABASE full BACKUPSET '/data/dmbak/weekly_full_bak_20211125_compressed' COMPRESSED LEVEL 5;

结果对比(一个不添加参数COMPRESSED LEVEL 5[dmdba@localhost dmbak]$ du -sh *
172M    weekly_full_bak_20211125
28M     weekly_full_bak_20211125_compressed

并行备份

SQL> BACKUP DATABASE BACKUPSET '/data/dmbak/weekly_full_bak_20211125' PARALLEL 8;

疑问:
并行度与CPU相关吗?

增量备份

SQL> backup database increment backupset '/data/dmbak/incr_bak';

脱机备份

停库
[root@localhost dmdb]# systemctl stop DmServicedmdb.service 

脱机全备
[dmdba@localhost bin]$ dmrman
dmrman V8
RMAN> backup database '/dmdata/dmdb/dm.ini' backupset '/dmdata/dmbak/db_full_20211128';

脱机还原

数据库的还原包括:

  • 数据库配置文件还原(例如:dm.ini、dm.ctl、联机日志文件)
  • 数据文件还原
restore database '/dmdata/dmdb/dm.ini' from backupset '/dmdata/dmbak/db_full_20211128';

脱机恢复

数据库恢复是指重做REDO日志,有两种方式:

  • 基于备份集恢复(即重做备份集中的REDO日志)
  • 基于本地归档日志恢复(即重做归档中的REDO日志)

基于备份集恢复

recover database '/dmdata/dmdb/dm.ini' from backupset '/dmdata/dmbak/db_full_20211128';

基于本地归档恢复

recover database '/dmdata/dmdb/dm.ini' with archivedir '/dmdata/arch';

数据库更新

更新数据库的DB_MAGIC,并将数据库调整为可正常工作状态

数据库更新发生在重做REDO日志恢复数据库后,或者目标库不需要执行重做日志已经处于一致状态的情况

recover database '/dmdata/dmdb/dm.ini' update db_magic;

实践

联机备份 & 脱机还原、恢复

联机备份数据库,确保数据库运行在归档模式及OPEN状态

归档已开启、数据库已open
SQL> select arch_mode,status$ from v$database;

行号     arch_mode status$    
---------- --------- -----------
1          Y         4

联机全备

SQL> BACKUP DATABASE BACKUPSET '/dmdata/dmbak/db_full_20211127';
操作已执行
已用时间: 00:00:01.111. 执行号:303.

检查全备

[dmdba@localhost bin]$ dmrman
dmrman V8
RMAN> CHECK BACKUPSET '/dmdata/dmbak/db_full_20211127';
CHECK BACKUPSET '/dmdata/dmbak/db_full_20211127';
check backupset successfully.
time used: 50.425(ms)

停库,搞破坏

[root@localhost dmdb]# systemctl stop DmServicedmdb.service 
[root@localhost dmdb]# mv dmdb01.log dmdb01.log.bak
[root@localhost dmdb]# mv MAIN.DBF MAIN.DBF.bak

起库,看报错

数据库当然是起不来的
[root@localhost dmdb]# 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.

到数据库软件安装目录下的log目录,查看日志中的报错信息
[dmdba@localhost log]$ cd /home/dmdba/dmdbms/log

redo日志dmdb01.log不存在,起库失败
[dmdba@localhost log]$ tail -50 dm_DMDB_202111.log 
省略49行...
2021-11-27 21:49:15.969 [FATAL] database P0000015827 T0000000000000015827  /dmdata/dmdb/dmdb01.log not exist,can not startup

脱机还原

[dmdba@localhost bin]$ dmrman
dmrman V8
RMAN> restore database '/dmdata/dmdb/dm.ini' from backupset '/dmdata/dmbak/db_full_20211127';
restore database '/dmdata/dmdb/dm.ini' from backupset '/dmdata/dmbak/db_full_20211127';
file dm.key not found, use default license!
[Percent:0.00%][Speed:0.00M/s][Cost:00:00:01][Remaining:00:00:00]Normal of FAST                     
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
[Percent:100.00%][Speed:0.00M/s][Cost:00:00:02][Remaining:00:00:00]                                 
restore successfully.
time used: 00:00:02.387

【注意 1】
这一步会还原备份集里记录的信息,全备的话会还原数据文件、redo日志(所有的数据文件和redo日志的日期都会更新)

【注意 2】
要想正确执行上面的语句,需要确保控制文件存放路径正确,且控制文件可用

【注意 3】
上面的语句并不会恢复归档日志(因为没有备份归档日志)

【注意 4】
此时仅仅通过备份集还原了数据文件和redo日志,这些文件并不是最新的,故需要"恢复"到最新的时间点。(也就是说,还需要重做redo日志)

若此时起库,日志里会提示:
2021-11-27 22:06:58.566 [FATAL] database P0000016121 T0000000000000016121 Instance DMDB startup failed, execute ‘recover database … update db_magic’ in dmrman.

脱机恢复

RMAN> recover database '/dmdata/dmdb/dm.ini' from backupset '/dmdata/dmbak/db_full_20211127';
recover database '/dmdata/dmdb/dm.ini' from backupset '/dmdata/dmbak/db_full_20211127';
Database mode = 0, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
EP[0]'s cur_lsn[29829], file_lsn[29829]
EP:0 total 0 pkgs applied, percent: 0%
EP:0 total 2 pkgs applied, percent: 18%
EP:0 total 4 pkgs applied, percent: 36%
EP:0 total 6 pkgs applied, percent: 54%
EP:0 total 8 pkgs applied, percent: 72%
EP:0 total 10 pkgs applied, percent: 90%
EP:0 total 11 pkgs applied, percent: 100%
recover successfully!
time used: 00:00:02.712

【注意 1】
继续观察/dmdata/dmdb里的文件,可以发现部分文件的日志更新了,也就是说这些文件通过重做redo日志恢复到了最新的时间点。(此时,所有的数据文件对于备份的时间点来说,都是最新的了;若想恢复的时间点离当前时间点更接近一些,则需要归档日志,重做归档日志里归档的重做日志,进行更彻底的更新)

更新db_magic

RMAN> recover database '/dmdata/dmdb/dm.ini' UPDATE DB_MAGIC;
recover database '/dmdata/dmdb/dm.ini' UPDATE DB_MAGIC;
Database mode = 0, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
EP[0]'s cur_lsn[32103], file_lsn[32103]
recover successfully!
time used: 00:00:01.031

【疑问】
这一步更新了什么?为什么更新了redo日志和SYSTEM.DBF,为什么其他的不更新?

起库,验证数据库是否正常

[root@localhost dmdb]# systemctl  start DmServicedmdb.service 
[dmdba@localhost bin]$ disql SYSDBA/'"Hn@dameng123"'@localhost:5236

服务器[localhost:5236]:处于普通打开状态
登录使用时间 : 2.514(ms)
disql V8
数据库处于open状态
SQL> select status$ from v$database;

行号     status$    
---------- -----------
1          4

已用时间: 4.001(毫秒). 执行号:300.

所有表空间都为online状态
SQL> select name,status$ from v$tablespace;

行号     name   status$    
---------- ------ -----------
1          SYSTEM 0
2          ROLL   0
3          TEMP   0
4          MAIN   0
5          MyTbs  0

已用时间: 1.116(毫秒). 执行号:301.

表空间

表空间备份就是拷贝表空间内所有数据文件中的有效数据的过程,目前表空间仅支持联机备份

表空间备份: 联机
表空间还原&恢复: 脱机

联机备份

确保数据库开了归档,且处于OPEN状态,再执行表空间备份

SQL> create tablespace MyTbs datafile '/dmdata/dmdb/MyTbs.dbf' size 200;
SQL> backup tablespace MyTbs backupset '/dmdata/dmbak/ts_full_MyTbs_20211128';

脱机还原

脱机表空间还原仅涉及表空间数据文件的重建与数据页的拷贝,不需要事先置目标表空间为OFFLINE状态。

RMAN> restore database '/dmdata/dmdb/dm.ini' tablespace MyTbs from backupset '/dmdata/dmbak/ts_full_MyTbs_20211128';

表空间还原后,表空间状态被置为RES_OFFLINE,并设置数据标记FIL_TS_RECV_STATE_RESTORED,表示已经还原但数据不完整。

脱机恢复

表空间恢复通过重做REDO日志,以将数据更新到一致状态

RMAN> recover database '/dmdata/dmdb/dm.ini' tablespace MyTbs;

恢复完成后,表空间状态置为ONLINE,并设置数据标记为FIL_TS_RECV_STAT_RECOVERED,表示数据已恢复到一致状态

SQL> select name,status$ from v$tablespace;

行号     name   status$    
---------- ------ -----------
1          SYSTEM 0
2          ROLL   0
3          TEMP   0
4          MAIN   0
5          MyTbs  0

已用时间: 4.318(毫秒). 执行号:300.

实践

联机备份 & 脱机还原、恢复

检查数据库状态(归档模式、open状态)

SQL> select arch_mode,status$ from v$database;

行号     arch_mode status$    
---------- --------- -----------
1          Y         4

联机备份表空间

SQL> backup tablespace MyTbs backupset '/dmdata/dmbak/ts_full_MyTbs_20211128';
操作已执行
已用时间: 846.654(毫秒). 执行号:306.

联机校验表空间

SQL> select sf_bakset_check('DISK','/dmdata/dmbak/ts_full_MyTbs_20211128');

行号     sf_bakset_check('DISK','/dmdata/dmbak/ts_full_MyTbs_20211128')
---------- --------------------------------------------------------------
1          1

已用时间: 25.859(毫秒). 执行号:302.

删除表空间MyTbs的数据文件,关闭数据库

查看表空间MyTbs的数据文件位置
SQL> select file_name,tablespace_name from dba_data_files where tablespace_name='MyTbs';

行号     file_name              tablespace_name
---------- ---------------------- ---------------
1          /dmdata/dmdb/MyTbs.dbf MyTbs

已用时间: 3.892(毫秒). 执行号:309.
删除数据文件
[dmdba@localhost dmdb]$ rm -f /dmdata/dmdb/MyTbs.dbf

停库
[root@localhost dmbak]# systemctl  stop DmServicedmdb.service 

脱机还原表空间

RMAN> restore database '/dmdata/dmdb/dm.ini' tablespace MyTbs from backupset '/dmdata/dmbak/ts_full_MyTbs_20211128';
restore database '/dmdata/dmdb/dm.ini' tablespace MyTbs from backupset '/dmdata/dmbak/ts_full_MyTbs_20211128';
file dm.key not found, use default license!
Database mode = 0, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
EP[0]'s cur_lsn[42537], file_lsn[42537]
restore successfully.
time used: 00:00:02.237

脱机恢复表空间

RMAN> recover database '/dmdata/dmdb/dm.ini' tablespace MyTbs
recover database '/dmdata/dmdb/dm.ini' tablespace MyTbs
Database mode = 0, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
EP[0]'s cur_lsn[42537], file_lsn[42537]
EP:0 total 0 pkgs applied, percent: 0%
EP:0 total 3 pkgs applied, percent: 14%
EP:0 total 6 pkgs applied, percent: 28%
EP:0 total 9 pkgs applied, percent: 42%
EP:0 total 12 pkgs applied, percent: 57%
EP:0 total 15 pkgs applied, percent: 71%
EP:0 total 18 pkgs applied, percent: 85%
EP:0 total 21 pkgs applied, percent: 100%
recover successfully.
time used: 475.353(ms)

启动数据库,检查MyTbs表空间状态

[root@localhost dmbak]# systemctl  start DmServicedmdb.service 
[dmdba@localhost bin]$ disql SYSDBA/SYSDBA

服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 2.663(ms)
disql V8
SQL> select name,status$ from v$tablespace;

行号     name   status$    
---------- ------ -----------
1          SYSTEM 0
2          ROLL   0
3          TEMP   0
4          MAIN   0
5          MyTbs  0

已用时间: 3.788(毫秒). 执行号:300.

表备份不需要开归档

联机备份

联机还原

执行表还原,数据库必须处于OPEN状态

表还原实质是表内数据的还原,以及索引和约束等的重建。

实践

恢复表数据

创建测试表tab_01

SQL> create table tab_01(c1 int);
SQL> insert into tab_01 values(1128);
SQL> commit;
SQL> select * from tab_01;

行号     c1         
---------- -----------
1          1128

已用时间: 1.176(毫秒). 执行号:304.

联机备份表tab_01

SQL> backup table tab_01 backupset '/dmdata/dmbak/tb_tab_01_20211128';
操作已执行
已用时间: 825.148(毫秒). 执行号:305.

校验备份

SQL> select sf_bakset_check('DISK','/dmdata/dmbak/tb_tab_01_20211128');

行号     sf_bakset_check('DISK','/dmdata/dmbak/tb_tab_01_20211128')
---------- ----------------------------------------------------------
1          1

已用时间: 39.531(毫秒). 执行号:400.

清空表tab_01

SQL> truncate table tab_01;

还原表tab_01

SQL> restore table tab_01 from backupset '/dmdata/dmbak/tb_tab_01_20211128';
操作已执行
已用时间: 14.568(毫秒). 执行号:402.

检查表数据
SQL> select * from tab_01;

行号     c1         
---------- -----------
1          1128

已用时间: 0.768(毫秒). 执行号:403.

【注意 1】
联机还原表时,表必须存在,还原表并不能还原表结构

【注意 2】
此处的表还原语句没有关键字STRUCT,故只还原表内数据(表的索引和约束并不会还原)

恢复索引、约束、表数据

创建测试表

SQL> create table tab_02(c1 int primary key, c2 int);
操作已执行
已用时间: 6.615(毫秒). 执行号:506.
SQL> create index idx_tab_02_c2 on tab_02(c2);
操作已执行
SQL> insert into tab_02 values(2021,1128);
SQL> commit

备份测试表

SQL> backup table tab_02 backupset '/dmdata/dmbak/tb_tab_02_20211128';
操作已执行
已用时间: 798.071(毫秒). 执行号:514.

检查备份

SQL> select sf_bakset_check('DISK','/dmdata/dmbak/tb_tab_02_20211128');

行号     sf_bakset_check('DISK','/dmdata/dmbak/tb_tab_02_20211128')
---------- ---------------------------------------------------------
1          1

已用时间: 61.452(毫秒). 执行号:515.

搞破坏

清空测试表tab_02
SQL> truncate table tab_02;

删除表tab_02的索引
SQL> drop index idx_tab_02_c2;

表结构还原

SQL> restore table tab_02 struct from backupset '/dmdata/dmbak/tb_tab_02_20211128';
操作已执行
已用时间: 26.692(毫秒). 执行号:619.

【注意 1】
由于表备份(tb_tab_02_20211128目录)和目标表(tab_02)都含有约束和索引,故需要先进行表结构还原,才能进行表数据还原。

表数据还原

SQL> restore table tab_02 from backupset '/dmdata/dmbak/tb_tab_02_20211128';
操作已执行
已用时间: 25.311(毫秒). 执行号:621.

表数据恢复了
SQL> select * from tab_02;

行号     c1          c2         
---------- ----------- -----------
1          2021        1128

已用时间: 0.771(毫秒). 执行号:622.

表的索引也恢复了
SQL> select name from sysobjects where name='IDX_TAB_02_C2';

行号     name         
---------- -------------
1          idx_tab_02_c2

已用时间: 0.472(毫秒). 执行号:642.

归档

归档备份拷贝指定归档目录下的所有的归档文件到备份集中,并记录各个归档文件的属性、文件大小以及LSN区间等。归档备份不存在增量备份之说

联机备份

备份所有的归档日志(归档模式、数据库OPEN或MOUNT)

SQL> backup archive log all backupset '/dmdata/dmbak/arch_all_20211128';

脱机备份

备份所有的归档日志(归档模式、数据库处于关闭状态)

RMAN> backup archive log all database '/dmdata/dmdb/dm.ini' backupset '/dmdata/dmbak/arch_all_20211128';

脱机还原

把归档日志还原到归档路径(/dmdata/arch),若有同名的归档日志,则还原失败(即不覆盖)

RMAN> restore archive log from backupset '/dmdata/dmbak/arch_all_20211128' to archivedir '/dmdata/arch' overwrite 2;

【注意】
没有归档日志没有增量备份,因为归档日志不是覆盖写入的,不会对已有的归档日志进行修改。

脱机修复

归档修复会对目标库dmarch.ini中配置的所有本地归档日志目录执行修复

RMAN> REPAIR ARCHIVELOG DATABASE '/dmdata/dmdb/dm.ini';

一般建议在数据库故障后,应立即执行归档修复,否则后续还原恢复将会导致联机日志中未刷入本地归档的REDO日志丢失,届时再利用本地归档恢复将无法恢复到故障前的最新状态。

【注意】
归档修复,其实就是将未归档的redo日志进行归档。必须在全库还原前执行,因为全库还原将重建redo日志!

实践

确保数据库开了归档,且处于mount或open状态

SQL> select arch_mode,status$ from v$database;

行号     arch_mode status$    
---------- --------- -----------
1          Y         4

已用时间: 1.156(毫秒). 执行号:708.

联机归档备份

SQL> backup archivelog all backupset '/dmdata/dmbak/arch_all_20211128';
操作已执行
已用时间: 856.823(毫秒). 执行号:401.

校验备份集

SQL> select sf_bakset_check('DISK','/dmdata/dmbak/arch_all_20211128');

行号     sf_bakset_check('DISK','/dmdata/dmbak/arch_all_20211128')
---------- ---------------------------------------------------------
1          1

已用时间: 26.416(毫秒). 执行号:402.

停库,搞破坏

[root@localhost dmbak]# systemctl  stop DmServicedmdb.service 
[dmdba@localhost arch]$ cd /dmdata/arch/
[dmdba@localhost arch]$ mkdir test
[dmdba@localhost arch]$ mv ARCHIVE* ./test

脱机归档还原

[dmdba@localhost bin]$ dmrman
dmrman V8
RMAN> restore archivelog from backupset '/dmdata/dmbak/arch_all_20211128' to archivedir '/dmdata/arch' overwrite 2;
restore archivelog from backupset '/dmdata/dmbak/arch_all_20211128' to archivedir '/dmdata/arch' overwrite 2;

restore successfully.
time used: 38.293(ms)

脱机归档修复

RMAN> repair archivelog database '/dmdata/dmdb/dm.ini';
repair archivelog database '/dmdata/dmdb/dm.ini';
file dm.key not found, use default license!
Database mode = 0, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
EP[0]'s cur_lsn[51357], file_lsn[51357]
repair archive log successfully.
repair time used: 172.841(ms)
time used: 185.204(ms)

达梦云适配中心:
https://eco.dameng.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值