RMAN备份与恢复


??参考链接:

https://www.cnblogs.com/WoLykos/p/11585744.html
https://www.oraclejsq.com/oraclebf/010400846.html
https://www.linuxidc.com/Linux/2018-11/155178.htm
http://blog.itpub.net/29785807/viewspace-2704547/
http://blog.itpub.net/30126024/viewspace-2145041/
https://www.cnblogs.com/wukc/p/13380580.html

RMAN是物理备份,可以做到任意时间点的恢复。

归档模式下,RMAN既可以冷备,也可以热备

非归档模式下,RMAN只能冷备。


一、创建并注册恢复目录

  1. SQL窗口中创建恢复目录所使用的表空间

SQL> create tablespace rman_tbsp datafile '/u01/app/oracle/oradata/orcl/rman_tbsp.dbf' size 1G autoextend on;
Tablespace created.

  2. 创建RMAN用户并授权

SQL> create user rman_user identified by 123456 default tablespace rman_tbsp temporary tablespace temp;
SQL> grant connect,recovery_catalog_owner,resource to rman_user;

  3. shell窗口打开恢复管理器

rman target sysdba/123456 catalog rman_user/123456;

  4. 在RMAN模式下,创建恢复目录

create catalog tablespace rman_tbsp;

  5. 在RMAN模式下,使用register命令注册数据库

register database;

database registered in recovery catalog
starting full resync of recovery catalog
full resync complete

二、在归档模式下和非归档模式下备份数据库(一致性与非一致性)

2.1一致性备份

数据库一致性备份是指关闭了数据库后备份所有数据文件和控制文件的方法。当使用SHUTDOWN 命令正常关闭了数据库之后,所有数据库文件的当前SCN 值完全一致,所以关闭后的数据库备份被称为数据库一致性备份或者冷备份。 数据库一致性备份既适用于ARCHIVELOG 也适用于NOARCHIVELOG

2.2非一致性备份

数据库非一致性备份是指在OPEN 状态下备份数据库所有数据文件和控制文件的方法。

因为在OPEN 状态下数据库内容随时都会改变,从而导致不同数据库文件的当前SCN值完全不同,所以打开时的数据库备份被称为数据库非一致性备份。进行数据库一致性备份会中断业务操作。而数据库非一致性备份不会影响业务操作,因此建议你在实际环境中应该使用数据库非一致性备份。

数据库非一致性备份只适用于ARCHIVELOG模式

三、使用RMAN备份数据库文件和归档日志

3.1 非一致性备份整个数据库(打开状态下全库备份

  1. 启动RMAN并连接到目标数据库,输入backup database命令备份数据库。 在命令中可以指定format参数,为RMAN生成的每个备份片段指定一个唯一的名称和存储位置。

rman target sysdba/123456 catalog rman_user/123456;   #连接RMAN
RMAN> backup database format '/data/ora_bak/oradb_%Y_%M_%D_%U.bak'; 

--%U代表“一个唯一的文件名” unique
--等价于%u_%p_%c
-- %u 一个八个字符的名称代表备份集与创建时间 
-- %p 该备份集中的备份片号,从1开始到创建的文件数
-- %c 备份片的拷贝数 

  2. 对于非一致性备份,必须在备份完毕后,手工对当前的redo-log进行归归档。 因为在使用备份恢复数据库时,需要使用当前重做日志中的重做记录。(是不是与备份过程中发生的数据变化相关???)

RMAN> sql 'alter system archive log current';

sql statement: alter system archive log current


  3. 在RMAN中执行如下命令,查看建立的备份集与备份片段的信息

RMAN> list backup of database;


List of Backup Sets
===================


BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
663     Full    1.92G      DISK        00:00:09     15-NOV-21      
        BP Key: 665   Status: AVAILABLE  Compressed: NO  Tag: TAG20211115T105908
        Piece Name: /data/ora_bak/oradb_2021_11_15_010e7rjs_1_1.bak
  List of Datafiles in backup set 663
  File LV Type Ckp SCN    Ckp Time  Name
  ---- -- ---- ---------- --------- ----
  1       Full 6782909    15-NOV-21 /u01/app/oracle/oradata/orcl/system01.dbf
  2       Full 6782909    15-NOV-21 /u01/app/oracle/oradata/orcl/sysaux01.dbf
  3       Full 6782909    15-NOV-21 /u01/app/oracle/oradata/orcl/undotbs01.dbf
  4       Full 6782909    15-NOV-21 /u01/app/oracle/oradata/orcl/users01.dbf
  5       Full 6782909    15-NOV-21 /u01/app/oracle/oradata/orcl/example01.dbf
  6       Full 6782909    15-NOV-21 /u01/app/oracle/oradata/orcl/test01.dbf
  7       Full 6782909    15-NOV-21 /u01/app/oracle/oradata/orcl/undotbs02.dbf
  8       Full 6782909    15-NOV-21 /u01/app/oracle/oradata/orcl/testtbs01.dbf
  9       Full 6782909    15-NOV-21 /u01/app/oracle/oradata/orcl/rman_tbsp.dbf

3.2 一致性状态下的全库备份(脱机全库备份)

RMAN> shutdown immediate
RMAN> startup mount
RMAN> backup database format '/data/cool_bak/oradb_%d_%s.bak';
RMAN> alter database open;

3.3 非一致性备份表空间

  1. 如果RMAN在联机状态下,进行表空间备份,不需要在备份前执行alter tablespace xxx begin backup;将表空间设置为备份模式。

RMAN> backup tablespace testtbs,tb1 format '/data/tbs_bak/%d_%p_%t_%c.dbf';

-- 注:不是表空间物理文件的名字,而是库中tablespace_name

  2. 查看建立的表空间备份信息

RMAN> list backup of tablespace testtbs,tb1;


List of Backup Sets
===================


BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
663     Full    1.92G      DISK        00:00:09     15-NOV-21      
        BP Key: 665   Status: AVAILABLE  Compressed: NO  Tag: TAG20211115T105908
        Piece Name: /data/ora_bak/oradb_2021_11_15_010e7rjs_1_1.bak
  List of Datafiles in backup set 663
  File LV Type Ckp SCN    Ckp Time  Name
  ---- -- ---- ---------- --------- ----
  6       Full 6782909    15-NOV-21 /u01/app/oracle/oradata/orcl/test01.dbf
  8       Full 6782909    15-NOV-21 /u01/app/oracle/oradata/orcl/testtbs01.dbf

BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
707     Full    1.91G      DISK        00:00:08     15-NOV-21      
        BP Key: 712   Status: AVAILABLE  Compressed: NO  Tag: TAG20211115T112027
        Piece Name: /data/cool_bak/oradb_ORCL_3.bak
  List of Datafiles in backup set 707
  File LV Type Ckp SCN    Ckp Time  Name
  ---- -- ---- ---------- --------- ----
  6       Full 6785408    15-NOV-21 /u01/app/oracle/oradata/orcl/test01.dbf
  8       Full 6785408    15-NOV-21 /u01/app/oracle/oradata/orcl/testtbs01.dbf

BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
709     Full    2.04M      DISK        00:00:00     15-NOV-21      
        BP Key: 714   Status: AVAILABLE  Compressed: NO  Tag: TAG20211115T113955
        Piece Name: /data/tbs_bak/ORCL_1_1088681996_1.dbf
  List of Datafiles in backup set 709
  File LV Type Ckp SCN    Ckp Time  Name
  ---- -- ---- ---------- --------- ----
  6       Full 6788370    15-NOV-21 /u01/app/oracle/oradata/orcl/test01.dbf
  8       Full 6788370    15-NOV-21 /u01/app/oracle/oradata/orcl/testtbs01.dbf

3.4 备份数据文件

在使用backup datafile命令对单独的数据文件进行备份。备份数据时,既可以使用其名称,也可以使用其编号来指定数据文件。

RMAN> backup datafile 1,2,3 format '/data/dbf_bak/dbf_%Y_%M_%D_%U.bak';
RMAN> list backup of datafile 1,2,3;

3.5 备份控制文件

  1. 自动备份:开启该参数后,当在RMAN中执行backup或copy命令时,RMAN都会对控制文件进行一次自动备份。可以通过format命令指定其存储路径。

RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/data/ctl_bak_%T_%F';

  2. 单独手动备份

RMAN> backup current controlfile format '/data/contrl_bak/ctl_bak_%T';

  3. 在执行其他备份的同时,备份控制文件

RMAN> backup tablespace tb1 include current controlfile;

3.6 备份归档重做日志

  1. 单独备份重做日志

RMAN> backup archivelog all format '/data/arch_bak/arch_%U.bak';

  2. 执行其他备份的同时,备份归档日志

backup database current controlfile **plus archivelog** format '/db/backup/data_arch%U.bak'

四、RMAN恢复

完全恢复和不完全恢复;

restore和recover:

  • restore 是还原,文件级的恢复。就是物理文件还原。

  • recover 是恢复,数据级的恢复。逻辑上恢复,比如应用归档日志、重做日志,全部同步,保持一致。

常用命令:

  1. restore 命令:用于还原已经备份的数据文件。
    (1)restore database 还原所有的数据文件。
    (2)restore tablespace 还原特定表空间的数据文件。
    (3)restore datafile 还原特定的数据文件。
    (4)restore controlfile 还原控制文件。
    (5)restore archivelog 还原归档日志文件。

  2. recover 命令:当数据库需要应用归档日志文件恢复数据文件时,使用recover命令。使用该命令数据库系统会自动应用归档的日志文件。
    (1)recover database 恢复所有的数据文件。
    (2)recover tablespace 恢复特定表空间的数据文件。
    (3)recover datafile 恢复特定的数据文件。

4.1 归档模式下的完全恢复

  1. 启动RMAN,连接到目标数据库

rman target sysdba/123456 catalog rman_user/123456;

  2. 对USER表空间进行备份

RMAN> backup tablespace USERS format '/data/tbs_bak/user_tbs.bak';

  3. 模拟介质故障,关闭目标数据库,并通过系统删除USER表空间的物理文件;

RMAN> shutdown immediate
shell> mv users01.dbf users01.dbf.bak

  4. 启动数据库到mount状态下

RMAN> startup mount

  5. 运行如下命令恢复USER表空间

RMAN> restore tablespace users;
RMAN> recover tablespace users;

  6. 恢复完成后打开数据库。

alter database open;

4.2 归档模式下的不完全恢复

分为两种:基于时间的不完全恢复、基于SCN号的不完全恢复。

在对数据库执行不完全恢复后,必须使用resetlogs命令打开数据库,这将导致以前的任何重做日志都变得无效。如果恢复不成功,那么将不能再次尝试恢复,因为重做日志都是无效的。这就需要在不完全恢复之前从备份中恢复控制文件、数据文件以及重做日志文件,以便再次尝试恢复过程。

4.2.1基于时间的不完全恢复

  1. 执行备份

backup database current controlfile plus archivelog format '/data/full_bak/full_%U.bak';

  2. 启动数据库到mount状态

startup mount;

  3. 执行基于时间的不完全恢复

run{
 sql'alter session set nls_date_language="AMERICAN"';
 sql'alter session set nls_date_format="yyyy-mm-dd hh24:mi:ss"';
 set until time '2021-11-16 10:00:18';
 allocate channel ch_1 type disk;
 allocate channel ch_2 type disk;
 restore database;
 recover database;
 sql'alter database open resetlogs';
 }
 

  4. 启动并检验

4.2.2基于SCN的不完全恢复

待查阅资料(详解SCN,如何获取SCN号)

附:RMAN备份FORMAT格式中%的含义 

%a:Oracle数据库的activation ID即RESETLOG_ID。
%c:备份片段的复制数(从1开始编号,最大不超过256)。
%d:Oracle数据库名称。
%D:当前时间中的日,格式为DD。
%e:归档序号。 %f:绝对文件编号。
%F:基于"DBID+时间"确定的唯一名称,格式的形式为c-IIIIIIIIII-YYYYMMDD-QQ,其中IIIIIIIIII 为该数据库的DBID,YYYYMMDD为日期,QQ是一个1~256的序列。
%h:归档日志线程号。
%I:Oracle数据库的DBID。
%M:当前时间中的月,格式为MM。
%N:表空间名称。
%n:数据库名称,并且会在右侧用x字符进行填充,使其保持长度为8。比如数据库名JSSBOOK,则生成的名称则是JSSBOOKx。
%p:备份集中备份片段的编号,从1开始。
%s:备份集号。
%t:备份集时间戳。
%T:当前时间的年月日格式(YYYYMMDD)。
%u:是一个由备份集编号和建立时间压缩后组成的8字符名称。利用%u可以为每个备份集生成一个唯一的名称。
%U:默认是%u_%p_%c的简写形式,利用它可以为每一个备份片段(即磁盘文件)生成一个唯一名称,这是最常用的命名方式,执行不同备份操作时,生成的规则也不同,如下所示: 生成备份片段时,%U=%u_%p_%c; 生成数据文件镜像复制时,%U=data-D-%d_id-%I_TS-%N_FNO-%f_%u; 生成归档文件镜像复制时,%U=arch-D_%d-id-%I_S-%e_T-%h_A-%a_%u; 生成控制文件镜像复制时,%U=cf-D_%d-id-%I_%u。
%Y:当前时间中的年,格式为YYYY。 注:如果在BACKUP命令中没有指定FORMAT选项,则RMAN默认使用%U为备份片段命名。