ORACLE备份恢复 之 RMAN

RMAN(Recovery Manager)backupset方式的优点

1、归档模式下,可以在数据库open状态下进行备份,保证了7*24的业务

2、不使用的空块不会备份,减少了I/O消耗

3、备份期间会默认检查数据库是否损坏

4、可以进行增量备份

5、可以实现各种级别的备份,比如数据库、表空间、数据文件

6、能够恢复到故障点,或者离故障点最近的时间点,保证数据的最少丢失

RMAN备份的保存策略

过期的备份文件oracle不会自动从磁盘上删除,仅仅是标记过期,过期的文件可以使用RMAN> delete obsolete直接从磁盘上删除。

基于时间的备份保留策略

说的简单些,就是你希望数据库最早能恢复到几天前,如果有增量备份,则备份文件的保留时间=retention period + level 0 backup interval

比如,每隔一个月即30天执行一次0级备份,每隔1天执行一次1级备份,如果设置备份保留策略为3天,不是说3天以前的所有备份文件都过期了,而是说我们可以恢复到3天前。

理解:每个月的1号执行0级备份,今天是3号,要恢复到三天前,那就是要恢复到上个月的30号,上个月的30号的数据是基于上个月1号的0级备份+上个月每天的1级备份,那么上个月1号的0级备份文件的保留天数就是3+30=33

备份集复制

RMAN> CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 2;

--配置rman备份时生成两份备份文件

RMAN> backup copies 2  datafile 4 FORMAT '/home/oracle/bak1/%U','/home/oracle/bak2/%U';

--生成两份备份文件,一份存放于/home/oracle/bak1目录,一份存放于/home/oracle/bak2目录

配置rman默认的备份路径

RMAN> configure channel device type disk format '/home/oracle/bak/%U';

如果没有配置,则默认存放在db_recovery_file_dest参数路径下,如果没有配置db_recovery_file_dest参数,则默认存放在$ORACLE_HOME/dbs目录

Format字符串替代变量的官方文档路径https://docs.oracle.com/cd/E11882_01/backup.112/e10643/rcmsubcl010.htm#RCMRF195

%U是最常用的,为每个备份片生成一个唯一名称

RMAN 备份类型

镜像复制

RMAN>backup as copy datafile 4;--备份文件和实际文件大小一样,属于完全的拷贝

备份集

RMAN>backup as backupset datafile 4;--备份文件远远小于实际文件大小,空块不会备份。

备份集备份片

官方文档路径https://docs.oracle.com/cd/E11882_01/backup.112/e10642/glossary.htm#BRADV526

一般情况下,一个备份集由一个备份片组成,设置备份文件冗余度或出现备份片有大小限制时,才会有一个备份集对应多个备份片

备份片

backup piece

The physical file format used to store an RMAN backup set. Each logical backup set contains one or more physical backup pieces.

用于存储RMAN备份集的物理文件格式。每个逻辑备份集包含一个或多个物理备份件。

简单说,备份片,就是备份后生成的一个个物理文件,一个备份片里面可能包含一个或多个datafile。

备份集是个逻辑概念

backup set

A backup of one or more data files, control files, server parameter files, and archived redo log files. Each backup set consists of one or more binary files. Each binary file is called a backup piece. Backup pieces are written in a proprietary format that can only be created or restored by RMAN.

一个或多个数据文件、控制文件、服务器参数文件和归档重做日志文件的备份。每个备份集由一个或多个二进制文件组成。每个二进制文件称为备份片。备份片是以专有格式编写的,只能由RMAN创建或恢复。

默认情况下,备份集和备份片是一一对应的

RMAN> backup database format '/home/oracle/1data%U';

select * from v$backup_set

select * from v$backup_piece

设置备份集大小时,备份集和备份片是一对多的

RMAN> CONFIGURE MAXSETSIZE clear;

RMAN> run

2> {allocate channel c1 device type disk maxpiecesize 1000M;

3> backup database format '/home/oracle/2data%U';

4> }

select * from v$backup_set

select * from v$backup_piece

增量备份

级别0-4,默认是差异增量备份。

就算没有0级备份,直接在执行1级或2级备份,会自动先进行0级备份。

RMAN> backup incremental level 2 database format '/home/oracle/bak/%U';

Starting backup at 24-MAY-18

using target database control file instead of recovery catalog

allocated channel: ORA_DISK_1

channel ORA_DISK_1: SID=32 device type=DISK

no parent backup or copy of datafile 1 found

no parent backup or copy of datafile 2 found

no parent backup or copy of datafile 5 found

no parent backup or copy of datafile 3 found

no parent backup or copy of datafile 4 found

channel ORA_DISK_1: starting incremental level 0 datafile backup set

channel ORA_DISK_1: specifying datafile(s) in backup set

input datafile file number=00001 name=/u01/app/oracle/oradata/orcl/system01.dbf

input datafile file number=00002 name=/u01/app/oracle/oradata/orcl/sysaux01.dbf

input datafile file number=00005 name=/u01/app/oracle/oradata/orcl/example01.dbf

input datafile file number=00003 name=/u01/app/oracle/oradata/orcl/undotbs01.dbf

input datafile file number=00004 name=/u01/app/oracle/oradata/orcl/users01.dbf

channel ORA_DISK_1: starting piece 1 at 24-MAY-18

channel ORA_DISK_1: finished piece 1 at 24-MAY-18

piece handle=/home/oracle/bak/1at3lltr_1_1 tag=TAG20180524T024722 comment=NONE

channel ORA_DISK_1: backup set complete, elapsed time: 00:01:24

channel ORA_DISK_1: starting incremental level 2 datafile backup set

channel ORA_DISK_1: specifying datafile(s) in backup set

input datafile file number=00006 name=/u01/app/oracle/oradata/orcl/users02.dbf

input datafile file number=00007 name=/u01/app/oracle/oradata/orcl/users03.dbf

input datafile file number=00008 name=/u01/app/oracle/oradata/orcl/cataspace.dbf

channel ORA_DISK_1: starting piece 1 at 24-MAY-18

channel ORA_DISK_1: finished piece 1 at 24-MAY-18

piece handle=/home/oracle/bak/1bt3lm0g_1_1 tag=TAG20180524T024722 comment=NONE

channel ORA_DISK_1: backup set complete, elapsed time: 00:00:03

Finished backup at 24-MAY-18

Starting Control File and SPFILE Autobackup at 24-MAY-18

piece handle=/home/oracle/bak/c-1498036209-20180524-00 comment=NONE

Finished Control File and SPFILE Autobackup at 24-MAY-18

只要对1号数据文件即SYSTEM 表空间的数据文件做备份时,就算控制文件的自动备份没有打开,RMAN也会自动对控制文件做备份。

所以备份数据库时,也一定会自动备份控制文件,因为数据库包含1号数据文件。

RMAN> catalog backuppiece ''

如果重建控制文件,里面的备份信息都丢失了的话,就算没有使用catalog数据库,可以使用catalog命令把备份文件注册到控制文件中。

查看备份进度的SQL语句

SELECT SID, SERIAL#, opname,ROUND(SOFAR/TOTALWORK*100)||'%' "%_COMPLETE",

TRUNC(elapsed_seconds/60) || ':' || MOD(elapsed_seconds,60) elapsed,

TRUNC(time_remaining/60) || ':' || MOD(time_remaining,60) remaining,

CONTEXT,target,SOFAR, TOTALWORK

FROM V$SESSION_LONGOPS

WHERE OPNAME LIKE 'RMAN%'

AND OPNAME NOT LIKE '%aggregate%'

AND TOTALWORK != 0

AND SOFAR <> TOTALWORK;

restore:还原,把数据文件从备份集中还原出来

recover:恢复,使用归档日志或在线日志恢复

--restore默认从控制文件中最新的一个备份包中恢复,如果最新的不存在,就找第二新的,如果第二新的不存在,就找第三新的,依次类推,如果一个都没有就报错

--restore有until time,则是使用until time范围内最新的备份包,比如3个备份包,分别是1:00,2:00,3:00,如果UNTIL TIME "TO_DATE('2:30:00','hh24:mi:ss')",那就是使用2:30范围内的最新包,那就是2:00的那个备份包

非归档模式可以使用rman备份,但是只能在mount方式进行,没什么实际意义

[oracle@ocp ~]$ rman target /

Recovery Manager: Release 11.2.0.3.0 - Production on Tue May 15 01:54:08 2018

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

connected to target database: ORCL (DBID=1498036209)

RMAN> backup datafile 6;

ORA-19602: cannot backup or copy active file in NOARCHIVELOG mode

[oracle@ocp ~]$ rman target /

Recovery Manager: Release 11.2.0.3.0 - Production on Tue May 15 01:55:31 2018

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

connected to target database: ORCL (DBID=1498036209, not open)

RMAN> backup datafile 6;

Finished backup at DD-MAY-YY

最全面最简洁的备份脚本和恢复方法:

RMAN>CONFIGURE CONTROLFILE AUTOBACKUP ON;

RMAN>CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/home/oracle/bak/%F';

RMAN>backup database format '/home/oracle/bak/datafile%U' plus archivelog format '/home/oracle/bak/arch%U' delete all input;

以上脚本备份步骤如下

1、归档,再备份归档日志,删除已备份的归档日志

2、备份数据库文件

3、归档,再备份归档日志,删除已备份的归档日志

4、备份控制文件和参数文件

delete all input --删除所有路径下的归档日志

delete input  --删除一个路径下的归档日志

假设所有文件都丢失了,恢复步骤如下

1、恢复spfile文件

rman target /

RMAN> startup nomount;

RMAN> restore spfile from 'XX';

2、启动数据库到nomount状态

sqlplus / as sysdba

SQL> shutdown abort;

SQL> startup nomount;

3、恢复控制文件

rman target /

RMAN> restore controlfile from '/home/oracle/bak/c-2876937480-20180819-00';

4、启动数据库到mount状态

sqlplus / as sysdba

SQL> alter database mount;

5、restore数据库、recover不完全恢复数据库

RMAN> restore database;

RMAN> recover database;--此过程除了使用已备份的归档日志外,还会使用备份完成之后生成的未备份的归档日志

RMAN> recover database until sequence XX;--XX使用上一步recover database中提示需要的sequence

6、启动数据库到open状态,使用resetlogs

sqlplus / as sysdba

SQL> alter database open resetlogs;

rman的advisor工具

Rman>List failure;--显示异常的文件数量

Rman>Advise failure;--显示需要恢复的文件详细信息

Rman>Repair failure preview;--显示需要恢复操作的脚本,并把脚本存放到某个路径下,(当没有产生报告时敲一下Validate database,再重新来一遍List failure\ Advise failure)

Rman>Repair failure;--进行恢复操作

备份一个文件,再关机,再删除这个文件,再启动到mount,执行上面的顺序操作就可以恢复

VALIDATE 命令支持对单个备份集和数据块进行验证。在物理损坏中,数据库根本无法识别块。在逻辑损坏中,块的内容在逻辑上不一致。默认情况下,VALIDATE 命令只检查物理损坏。也可以指定CHECK LOGICAL 检查逻辑损坏。

块损坏可分为块间损坏和块内损坏。

在块内损坏中,块本身发生损坏,可以是物理损坏也可以是逻辑损坏。

在块间损坏中,块与块之间发生的损坏只能是逻辑损坏。

VALIDATE 命令只检查块内损坏。

https://docs.oracle.com/cd/E11882_01/backup.112/e10642/glossary.htm#BRADV526

interblock corruption 块间损坏

A type of block corruption in which the corruption occurs between blocks rather than within the block itself. This type of corruption can only be logical corruption.

intrablock corruption 块内损坏

A type of block corruption in which the corruption occurs within the block itself. this type of corruption can be either a physical corruption or logical corruption.

RMAN> VALIDATE DATABASE;--检查物理坏块,只做检查动作

RMAN> VALIDATE CHECK LOGICAL DATABASE;--检查逻辑坏块,只做检查动作

RMAN> BACKUP VALIDATE DATABASE;--检查物理坏块,只检查不备份

RMAN> BACKUP VALIDATE CHECK LOGICAL DATABASE;--检查逻辑坏块,只检查不备份

RMAN> BACKUP DATABASE;--没有VILIDATE,表示做备份的动作,备份的同时检查物理坏块,RMAN备份时默认检查物理坏块

RMAN> BACKUP CHECK LOGICAL DATABASE;--没有VILIDATE,表示做备份的动作,备份的同时检查逻辑坏块

catalog的官方文档路径https://docs.oracle.com/cd/E11882_01/backup.112/e10642/rcmcatdb.htm#BRADV8015

Nocatalog就是用control file控制文件记录备份信息

如果使用nocatalog方式

备份文件的保留时间=retention period + level 0 backup interval

控制文件记录保留时间

control_file_record_keep_time=备份文件的保留时间+1

比如,每隔一个月即30天执行一次0级备份,每隔1天执行一次1级备份,如果设置备份保留策略为3天,就是说我们可以恢复到3天前。

控制文件中记录保留天数就是3+30+1=34

CATALOG创建和使用步骤

1.创建表空间

SQL> create tablespace cataspace datafile '/u01/app/oracle/oradata/ocp/cataspace.dbf' size 10M autoextend on;

2.创建用户

SQL> create user catauser identified by oracle default tablespace cataspace;

3.用户授权,必须要有recovery_catalog_owner

SQL> grant connect,resource,recovery_catalog_owner to catauser;

4.RMAN登录CATALOG,并创建CATALOG

[oracle@ocp ~]$ rman catalog catauser/oracle

RMAN> create catalog;

5.RMAN登录数据库和CATALOG,并注册数据库到CATALOG,并使用。

[oracle@ocp ~]$ rman target / catalog catauser/oracle

RMAN> register database;

RMAN> backup datafile 7;

转载于:https://www.jianshu.com/p/f2ab6f2fd63b

猜你喜欢

转载自blog.csdn.net/weixin_34268579/article/details/91241532