OCA/OCP Oracle 数据库12c考试指南读书笔记:第23章:Back Up with RMAN

备份理论和基本语法

通常用RMAN,决定备份什么和怎么做。不用RMAN的称为用户管理的备份。

备份概念

备份和恢复的对象称为target。target的属性包括:
打开/关闭;整个/部分;全备/增备;到磁盘/磁带;copy/backupset
这些属性可以组合。

RMAN 架构

RMAN是用户进程,可以以IPC方式登录本地数据库或TCP/IP方式登录远程数据库,然后发送的命令可以被服务器进程(称为channel)执行。
RMAN的一个主要特征是repository,存放有关备份的元数据。repository可存于多个地方,其中有一份存在target数据库的控制文件,默认保留期限只有7天,由参数CONTROLFILE_RECORD_KEEP_TIME控制,你可以将其延长:

SQL> show parameter keep_time;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_time        integer     7
SQL> alter system set control_file_record_keep_time=30;

System altered.

这些元数据也可以存放在数据库的schema中,称为catalog。使用catalog可永久存储备份信息,并可使用一些高级特性。
RMAN备份可存于磁盘或磁带,前者无需配置,后者需要使用磁带厂商提供的驱动,RMAN作为统一接口隐藏了这些细节。
RMAN可创建两种类型的备份,image和backupset。前者是逐字节拷贝,后者可分割,可压缩,可加密,未使用的块不会拷贝。

备份简介

数据库处于open状态时的备份称为热备份或不一致备份,必须开启归档模式。因为在备份时,备份过的数据可能在源数据库中被更改,恢复时必须借助redo log来形成一致的数据。数据库处于mount状态时的备份称为冷备份或一致备份,是唯一可在非归档模式下可以进行的备份。
完整备份包括所有的数据文件和control file,部分备份只备份数据库的子集。完整备份是在非归档模式下唯一可进行的备份,因为部分备份的恢复仍需要redo log的配合。
全备包括每一个文件已使用的数据块,增量备份只包含自上次备份后改变的数据。增备可以多级,但恢复时首先需要一个全备(0级备份),然后再恢复增备。

RMAN 基本语法

-- 操作系统登录
$ rman target /

Recovery Manager: Release 19.0.0.0.0 - Production on Fri Nov 29 21:53:14 2019
Version 19.3.0.0.0

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

connected to target database: ORCLCDB (DBID=2795391422)

-- 登录到CDB
$ rman target sys/Welcome1@orclcdb

Recovery Manager: Release 19.0.0.0.0 - Production on Fri Nov 29 21:52:03 2019
Version 19.3.0.0.0

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

connected to target database: ORCLCDB (DBID=2795391422)

RMAN> exit


Recovery Manager complete.
-- 登录到PDB
$ rman target sys/Welcome1@orclpdb1

Recovery Manager: Release 19.0.0.0.0 - Production on Fri Nov 29 21:52:12 2019
Version 19.3.0.0.0

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

connected to target database: ORCLCDB:ORCLPDB1 (DBID=1957523670)

非归档模式下的备份

只能在mount模式下进行。

$ rman target sys/Welcome1@orclpdb1

Recovery Manager: Release 19.0.0.0.0 - Production on Fri Nov 29 22:04:01 2019
Version 19.3.0.0.0

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

connected to target database: ORCLCDB:ORCLPDB1 (DBID=1957523670)

RMAN> shutdown immediate

using target database control file instead of recovery catalog
database closed

RMAN> startup mount

RMAN> backup database;

Starting backup at 29-NOV-19
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=61 device type=DISK
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00010 name=/opt/oracle/oradata/ORCLCDB/ORCLPDB1/sysaux01.dbf
input datafile file number=00009 name=/opt/oracle/oradata/ORCLCDB/ORCLPDB1/system01.dbf
input datafile file number=00012 name=/opt/oracle/oradata/ORCLCDB/ORCLPDB1/users01.dbf
input datafile file number=00011 name=/opt/oracle/oradata/ORCLCDB/ORCLPDB1/undotbs01.dbf
channel ORA_DISK_1: starting piece 1 at 29-NOV-19
channel ORA_DISK_1: finished piece 1 at 29-NOV-19
piece handle=/u02/fra/ORCLCDB/974B2FC950D006CEE0530100007FB806/backupset/2019_11_29/o1_mf_nnndf_TAG20191129T220526_gy29f6vz_.bkp tag=TAG20191129T220526 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:07
Finished backup at 29-NOV-19

RMAN> alter database open;

Statement processed

RMAN> exit
Recovery Manager complete.

归档模式下的备份

可备份数据文件,表空间,整个数据库,控制文件和归档日志。归档日志可定义为在备份后删除。默认的备份目标是磁盘,例如FRA。
通常一个命令是不够的,此时需要组织成block(包含在{ }中),然后用RUN运行。
例如:

$ rman target sys/Welcome1@orclpdb1

Recovery Manager: Release 19.0.0.0.0 - Production on Fri Nov 29 22:49:53 2019
Version 19.3.0.0.0

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

connected to target database: ORCLCDB:ORCLPDB1 (DBID=1957523670)

RMAN> run {
allocate channel d1 device type disk;
allocate channel d2 device type disk;
backup as compressed backupset database format '/u02/fra/tmp/db_%U.bset';
backup as compressed backupset archivelog all format '/u02/fra/tmp/arch_%U.bset' delete all input;
}2> 3> 4> 5> 6>

using target database control file instead of recovery catalog
allocated channel: d1
channel d1: SID=289 device type=DISK

allocated channel: d2
channel d2: SID=62 device type=DISK

Starting backup at 29-NOV-19
channel d1: starting compressed full datafile backup set
channel d1: specifying datafile(s) in backup set
input datafile file number=00010 name=/opt/oracle/oradata/ORCLCDB/ORCLPDB1/sysaux01.dbf
input datafile file number=00012 name=/opt/oracle/oradata/ORCLCDB/ORCLPDB1/users01.dbf
channel d1: starting piece 1 at 29-NOV-19
channel d2: starting compressed full datafile backup set
channel d2: specifying datafile(s) in backup set
input datafile file number=00009 name=/opt/oracle/oradata/ORCLCDB/ORCLPDB1/system01.dbf
input datafile file number=00011 name=/opt/oracle/oradata/ORCLCDB/ORCLPDB1/undotbs01.dbf
channel d2: starting piece 1 at 29-NOV-19
channel d1: finished piece 1 at 29-NOV-19
piece handle=/u02/fra/tmp/db_03ui4bgq_1_1.bset tag=TAG20191129T225001 comment=NONE
channel d1: backup set complete, elapsed time: 00:00:25
channel d2: finished piece 1 at 29-NOV-19
piece handle=/u02/fra/tmp/db_04ui4bgq_1_1.bset tag=TAG20191129T225001 comment=NONE
channel d2: backup set complete, elapsed time: 00:00:25
Finished backup at 29-NOV-19

Starting backup at 29-NOV-19
skipping archived logs when connected to a PDB
backup cancelled because there are no files to backup
Finished backup at 29-NOV-19
released channel: d1
released channel: d2

查看备份,后两个是启动两个通道备份(并行备份)生成的文件,第一个文件是之前使用一个通道备份的:

$ ls -l /u02/fra/tmp
total 228420
-rw-r-----. 1 oracle oinstall 116899840 Nov 29 22:43 db_02ui4b46_1_1.bset
-rw-r-----. 1 oracle oinstall  52977664 Nov 29 22:50 db_03ui4bgq_1_1.bset
-rw-r-----. 1 oracle oinstall  64012288 Nov 29 22:50 db_04ui4bgq_1_1.bset

默认的备份格式是backupset,如果要使用image copy,则使用命令:backup as copy ...
如果命令被包含在block中,并且建立多个通道,就可以实现并行。不过并行是备份命令内部的,而不能跨备份命令。例如,对于backup database,数据文件的备份可以分配到多个通道。而只有数据库备份完后,才会执行下一个备份归档的命令。如果在一个通道内备份多个文件,这些文件会交织在一起并形成backupset,但这个不算并行。
备份到磁带需要配置Media Management Layer (MML),这是硬件厂商提供的动态链接库。

持久化RMAN设置

可以修改默认配置,这样执行的命令可以更简短。

修改和恢复默认值

显示默认值:

$ rman target sys/Welcome1@orclpdb1

Recovery Manager: Release 19.0.0.0.0 - Production on Fri Nov 29 23:07:50 2019
Version 19.3.0.0.0

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

connected to target database: ORCLCDB:ORCLPDB1 (DBID=1957523670)

RMAN> show all;

using target database control file instead of recovery catalog
RMAN configuration parameters for database with db_unique_name ORCLCDB are:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP ON; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default
CONFIGURE RMAN OUTPUT TO KEEP FOR 7 DAYS; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/opt/oracle/product/19c/dbhome_1/dbs/snapcf_ORCLCDB.f'; # default

假设备份策略为:备份保留期为2周,此外的备份全不需要。备份到磁盘,并行通道为4。使用压缩,备份格式为backupset。总是备份controlfile,归档备份两次后删除,备份文件根据数据库命名。
则备份设置如下(不能在PDB中设置):

configure retention policy to recovery window of 14 days;
configure backup optimization on;
configure controlfile autobackup on;
configure device type disk parallelism 4 backup  type to compressed backupset;
configure channel device type disk format '/u02/fra/tmp/%d_%T_%u';
configure archivelog deletion policy to backed up 2 times to disk;

修改后的配置如下:

RMAN> show all;

RMAN configuration parameters for database with db_unique_name ORCLCDB are:
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 14 DAYS;
CONFIGURE BACKUP OPTIMIZATION ON;
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 4 BACKUP TYPE TO COMPRESSED BACKUPSET;
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT   '/u02/fra/tmp/%d_%T_%u';
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default
CONFIGURE RMAN OUTPUT TO KEEP FOR 7 DAYS; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO BACKED UP 2 TIMES TO DISK;
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/opt/oracle/product/19c/dbhome_1/dbs/snapcf_ORCLCDB.f'; # default

此时备份命令可精简为:

backup database;
backup archivelog all delete input;

恢复默认配置使用以下命令:

configure retention policy clear;
configure backup optimization clear;
configure controlfile autobackup clear;
configure device type disk clear;
configure channel device type disk clear;
configure archivelog deletion policy clear;
使用保留策略

备份可以自动保留,使用恢复窗口或冗余。使用前者,RMAN将保留必要的备份,归档以恢复到窗口中任一时间点,其它文件将标记为OBSOLETE,并在必要时删除。后者将保留指定的备份份数,其余的文件将标记为OBSOLETE。OBSOLETE文件可使用DELETE OBSOLETE手工删除。
如果保留策略为NONE,任何文件都不会标记为OBSOLETE,DBA必须手工删除这些文件。

configure retention policy to redundancy 2;
configure retention policy to recovery window of 4 days;

Oracle推荐使用恢复窗口。某些情况下,如使用RMAN之外的工具管理备份,这是需要禁止掉保留策略:

configure retention policy to none;

RMAN备份详情的保留期限由参数CONTROL_FILE_RECORD_KEEP_TIME决定:

SQL> show parameter CONTROL_FILE_RECORD_KEEP_TIME

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_time        integer     30

格式定义

通常情况下,backuppiece文件的命名应是自动的,这样脚本可反复运行。
例如d%表示数据库名,I%表示数据库DBID等,详见帮助。
练习:

$ rman target /

Recovery Manager: Release 19.0.0.0.0 - Production on Tue Dec 3 21:06:37 2019
Version 19.3.0.0.0

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

connected to target database: ORCLCDB (DBID=2795391422)

RMAN> show all;

using target database control file instead of recovery catalog
RMAN configuration parameters for database with db_unique_name ORCLCDB are:
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 4 DAYS;
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP ON; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default
CONFIGURE RMAN OUTPUT TO KEEP FOR 7 DAYS; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/opt/oracle/product/19c/dbhome_1/dbs/snapcf_ORCLCDB.f'; # default

RMAN> configure retention policy to recovery window of 14 days;

old RMAN configuration parameters:
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 4 DAYS;
new RMAN configuration parameters:
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 14 DAYS;
new RMAN configuration parameters are successfully stored

RMAN> configure backup optimization on;

new RMAN configuration parameters:
CONFIGURE BACKUP OPTIMIZATION ON;
new RMAN configuration parameters are successfully stored

RMAN> configure controlfile autobackup on;

new RMAN configuration parameters:
CONFIGURE CONTROLFILE AUTOBACKUP ON;
new RMAN configuration parameters are successfully stored

RMAN> configure device type disk parallelism 4 backup  type to compressed backupset;

new RMAN configuration parameters:
CONFIGURE DEVICE TYPE DISK PARALLELISM 4 BACKUP TYPE TO COMPRESSED BACKUPSET;
new RMAN configuration parameters are successfully stored

RMAN> configure channel device type disk format '/u02/fra/backups/%d_%T_%u';

old RMAN configuration parameters:
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT   '/u02/fra/backups';
new RMAN configuration parameters:
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT   '/u02/fra/backups/%d_%T_%u';
new RMAN configuration parameters are successfully stored
released channel: ORA_DISK_1
released channel: ORA_DISK_2
released channel: ORA_DISK_3
released channel: ORA_DISK_4

RMAN> configure archivelog deletion policy to backed up 2 times to disk;

new RMAN configuration parameters:
CONFIGURE ARCHIVELOG DELETION POLICY TO BACKED UP 2 TIMES TO DISK;
new RMAN configuration parameters are successfully stored

RMAN> show all;

RMAN configuration parameters for database with db_unique_name ORCLCDB are:
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 14 DAYS;
CONFIGURE BACKUP OPTIMIZATION ON;
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 4 BACKUP TYPE TO COMPRESSED BACKUPSET;
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT   '/u02/fra/backups';
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default
CONFIGURE RMAN OUTPUT TO KEEP FOR 7 DAYS; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO BACKED UP 2 TIMES TO DISK;
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/opt/oracle/product/19c/dbhome_1/dbs/snapcf_ORCLCDB.f'; # default

备份输出如下:

RMAN> backup database;

Starting backup at 03-DEC-19
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=47 device type=DISK
allocated channel: ORA_DISK_2
channel ORA_DISK_2: SID=278 device type=DISK
allocated channel: ORA_DISK_3
channel ORA_DISK_3: SID=38 device type=DISK
allocated channel: ORA_DISK_4
channel ORA_DISK_4: SID=270 device type=DISK
channel ORA_DISK_1: starting compressed full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00001 name=/opt/oracle/oradata/ORCLCDB/system01.dbf
channel ORA_DISK_1: starting piece 1 at 03-DEC-19
channel ORA_DISK_2: starting compressed full datafile backup set
channel ORA_DISK_2: specifying datafile(s) in backup set
input datafile file number=00003 name=/opt/oracle/oradata/ORCLCDB/sysaux01.dbf
channel ORA_DISK_2: starting piece 1 at 03-DEC-19
channel ORA_DISK_3: starting compressed full datafile backup set
channel ORA_DISK_3: specifying datafile(s) in backup set
input datafile file number=00010 name=/opt/oracle/oradata/ORCLCDB/ORCLPDB1/sysaux01.dbf
channel ORA_DISK_3: starting piece 1 at 03-DEC-19
channel ORA_DISK_4: starting compressed full datafile backup set
channel ORA_DISK_4: specifying datafile(s) in backup set
input datafile file number=00004 name=/opt/oracle/oradata/ORCLCDB/undotbs01.dbf
channel ORA_DISK_4: starting piece 1 at 03-DEC-19
channel ORA_DISK_4: finished piece 1 at 03-DEC-19
piece handle=/u02/fra/backups/ORCLCDB_20191203_0huihbtt tag=TAG20191203T211643 comment=NONE
channel ORA_DISK_4: backup set complete, elapsed time: 00:00:01
channel ORA_DISK_4: starting compressed full datafile backup set
channel ORA_DISK_4: specifying datafile(s) in backup set
input datafile file number=00006 name=/opt/oracle/oradata/ORCLCDB/pdbseed/sysaux01.dbf
channel ORA_DISK_4: starting piece 1 at 03-DEC-19
channel ORA_DISK_3: finished piece 1 at 03-DEC-19
piece handle=/u02/fra/backups/ORCLCDB_20191203_0guihbts tag=TAG20191203T211643 comment=NONE
channel ORA_DISK_3: backup set complete, elapsed time: 00:00:36
channel ORA_DISK_3: starting compressed full datafile backup set
channel ORA_DISK_3: specifying datafile(s) in backup set
input datafile file number=00009 name=/opt/oracle/oradata/ORCLCDB/ORCLPDB1/system01.dbf
channel ORA_DISK_3: starting piece 1 at 03-DEC-19
channel ORA_DISK_4: finished piece 1 at 03-DEC-19
piece handle=/u02/fra/backups/ORCLCDB_20191203_0iuihbtu tag=TAG20191203T211643 comment=NONE
channel ORA_DISK_4: backup set complete, elapsed time: 00:00:36
channel ORA_DISK_4: starting compressed full datafile backup set
channel ORA_DISK_4: specifying datafile(s) in backup set
input datafile file number=00005 name=/opt/oracle/oradata/ORCLCDB/pdbseed/system01.dbf
channel ORA_DISK_4: starting piece 1 at 03-DEC-19
channel ORA_DISK_2: finished piece 1 at 03-DEC-19
piece handle=/u02/fra/backups/ORCLCDB_20191203_0fuihbts tag=TAG20191203T211643 comment=NONE
channel ORA_DISK_2: backup set complete, elapsed time: 00:00:45
channel ORA_DISK_2: starting compressed full datafile backup set
channel ORA_DISK_2: specifying datafile(s) in backup set
input datafile file number=00012 name=/opt/oracle/oradata/ORCLCDB/ORCLPDB1/users01.dbf
channel ORA_DISK_2: starting piece 1 at 03-DEC-19
channel ORA_DISK_2: finished piece 1 at 03-DEC-19
piece handle=/u02/fra/backups/ORCLCDB_20191203_0luihbva tag=TAG20191203T211643 comment=NONE
channel ORA_DISK_2: backup set complete, elapsed time: 00:00:15
channel ORA_DISK_2: starting compressed full datafile backup set
channel ORA_DISK_2: specifying datafile(s) in backup set
input datafile file number=00008 name=/opt/oracle/oradata/ORCLCDB/pdbseed/undotbs01.dbf
channel ORA_DISK_2: starting piece 1 at 03-DEC-19
channel ORA_DISK_2: finished piece 1 at 03-DEC-19
piece handle=/u02/fra/backups/ORCLCDB_20191203_0muihbvq tag=TAG20191203T211643 comment=NONE
channel ORA_DISK_2: backup set complete, elapsed time: 00:00:15
channel ORA_DISK_2: starting compressed full datafile backup set
channel ORA_DISK_2: specifying datafile(s) in backup set
input datafile file number=00011 name=/opt/oracle/oradata/ORCLCDB/ORCLPDB1/undotbs01.dbf
channel ORA_DISK_2: starting piece 1 at 03-DEC-19
channel ORA_DISK_3: finished piece 1 at 03-DEC-19
piece handle=/u02/fra/backups/ORCLCDB_20191203_0juihbv2 tag=TAG20191203T211643 comment=NONE
channel ORA_DISK_3: backup set complete, elapsed time: 00:00:39
channel ORA_DISK_3: starting compressed full datafile backup set
channel ORA_DISK_3: specifying datafile(s) in backup set
input datafile file number=00007 name=/opt/oracle/oradata/ORCLCDB/users01.dbf
channel ORA_DISK_3: starting piece 1 at 03-DEC-19
channel ORA_DISK_4: finished piece 1 at 03-DEC-19
piece handle=/u02/fra/backups/ORCLCDB_20191203_0kuihbv2 tag=TAG20191203T211643 comment=NONE
channel ORA_DISK_4: backup set complete, elapsed time: 00:00:39
channel ORA_DISK_2: finished piece 1 at 03-DEC-19
piece handle=/u02/fra/backups/ORCLCDB_20191203_0nuihc09 tag=TAG20191203T211643 comment=NONE
channel ORA_DISK_2: backup set complete, elapsed time: 00:00:00
channel ORA_DISK_3: finished piece 1 at 03-DEC-19
piece handle=/u02/fra/backups/ORCLCDB_20191203_0ouihc09 tag=TAG20191203T211643 comment=NONE
channel ORA_DISK_3: backup set complete, elapsed time: 00:00:01
channel ORA_DISK_1: finished piece 1 at 03-DEC-19
piece handle=/u02/fra/backups/ORCLCDB_20191203_0euihbts tag=TAG20191203T211643 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:01:42
Finished backup at 03-DEC-19

Starting Control File and SPFILE Autobackup at 03-DEC-19
piece handle=/u02/fra/ORCLCDB/autobackup/2019_12_03/o1_mf_s_1026076707_gydr54hj_.bkp comment=NONE
Finished Control File and SPFILE Autobackup at 03-DEC-19

RMAN> backup archivelog all delete input;

Starting backup at 03-DEC-19
current log archived
using channel ORA_DISK_1
using channel ORA_DISK_2
using channel ORA_DISK_3
using channel ORA_DISK_4
channel ORA_DISK_1: starting compressed archived log backup set
channel ORA_DISK_1: specifying archived log(s) in backup set
input archived log thread=1 sequence=22 RECID=3 STAMP=1025690964
input archived log thread=1 sequence=23 RECID=4 STAMP=1026075513
channel ORA_DISK_1: starting piece 1 at 03-DEC-19
channel ORA_DISK_2: starting compressed archived log backup set
channel ORA_DISK_2: specifying archived log(s) in backup set
input archived log thread=1 sequence=24 RECID=5 STAMP=1026076745
channel ORA_DISK_2: starting piece 1 at 03-DEC-19
channel ORA_DISK_3: starting compressed archived log backup set
channel ORA_DISK_3: specifying archived log(s) in backup set
input archived log thread=1 sequence=20 RECID=1 STAMP=1025556777
input archived log thread=1 sequence=21 RECID=2 STAMP=1025643934
channel ORA_DISK_3: starting piece 1 at 03-DEC-19
channel ORA_DISK_2: finished piece 1 at 03-DEC-19
piece handle=/u02/fra/backups/ORCLCDB_20191203_0ruihc2a tag=TAG20191203T211905 comment=NONE
channel ORA_DISK_2: backup set complete, elapsed time: 00:00:01
channel ORA_DISK_2: deleting archived log(s)
RMAN-08138: warning: archived log not deleted - must create more backups
archived log file name=/u02/fra/ORCLCDB/archivelog/2019_12_03/o1_mf_1_24_gydr6937_.arc thread=1 sequence=24
channel ORA_DISK_3: finished piece 1 at 03-DEC-19
piece handle=/u02/fra/backups/ORCLCDB_20191203_0suihc2a tag=TAG20191203T211905 comment=NONE
channel ORA_DISK_3: backup set complete, elapsed time: 00:00:01
channel ORA_DISK_2: deleting archived log(s)
RMAN-08138: warning: archived log not deleted - must create more backups
archived log file name=/u02/fra/ORCLCDB/archivelog/2019_11_28/o1_mf_1_20_gxzjs99r_.arc thread=1 sequence=20
RMAN-08138: warning: archived log not deleted - must create more backups
archived log file name=/u02/fra/ORCLCDB/archivelog/2019_11_29/o1_mf_1_21_gy25wyw4_.arc thread=1 sequence=21
channel ORA_DISK_1: finished piece 1 at 03-DEC-19
piece handle=/u02/fra/backups/ORCLCDB_20191203_0quihc2a tag=TAG20191203T211905 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:25
channel ORA_DISK_1: deleting archived log(s)
RMAN-08138: warning: archived log not deleted - must create more backups
archived log file name=/u02/fra/ORCLCDB/archivelog/2019_11_30/o1_mf_1_22_gy3mtmqb_.arc thread=1 sequence=22
RMAN-08138: warning: archived log not deleted - must create more backups
archived log file name=/u02/fra/ORCLCDB/archivelog/2019_12_03/o1_mf_1_23_gydpzqgn_.arc thread=1 sequence=23
Finished backup at 03-DEC-19

Starting Control File and SPFILE Autobackup at 03-DEC-19
piece handle=/u02/fra/ORCLCDB/autobackup/2019_12_03/o1_mf_s_1026076772_gydr74f3_.bkp comment=NONE
Finished Control File and SPFILE Autobackup at 03-DEC-19

也可以在运行命令时指定新的参数:

run {
allocate channel d1 type disk;
backup as copy datafile 1;
backup as backupset datafile 1;
backup as compressed backupset datafile 1;
}

输出如下:

released channel: ORA_DISK_1
released channel: ORA_DISK_2
released channel: ORA_DISK_3
released channel: ORA_DISK_4
allocated channel: d1
channel d1: SID=47 device type=DISK

Starting backup at 03-DEC-19
channel d1: starting datafile copy
input datafile file number=00001 name=/opt/oracle/oradata/ORCLCDB/system01.dbf
output file name=/u02/fra/ORCLCDB/datafile/o1_mf_system_gydrcpfx_.dbf tag=TAG20191203T212157 RECID=4 STAMP=1026076940
channel d1: datafile copy complete, elapsed time: 00:00:25
Finished backup at 03-DEC-19

Starting backup at 03-DEC-19
channel d1: starting full datafile backup set
channel d1: specifying datafile(s) in backup set
input datafile file number=00001 name=/opt/oracle/oradata/ORCLCDB/system01.dbf
channel d1: starting piece 1 at 03-DEC-19
channel d1: finished piece 1 at 03-DEC-19
piece handle=/u02/fra/ORCLCDB/backupset/2019_12_03/o1_mf_nnndf_TAG20191203T212223_gydrdj14_.bkp tag=TAG20191203T212223 comment=NONE
channel d1: backup set complete, elapsed time: 00:00:35
Finished backup at 03-DEC-19

Starting backup at 03-DEC-19
channel d1: starting compressed full datafile backup set
channel d1: specifying datafile(s) in backup set
input datafile file number=00001 name=/opt/oracle/oradata/ORCLCDB/system01.dbf
channel d1: starting piece 1 at 03-DEC-19
channel d1: finished piece 1 at 03-DEC-19
piece handle=/u02/fra/ORCLCDB/backupset/2019_12_03/o1_mf_nnndf_TAG20191203T212259_gydrfmv6_.bkp tag=TAG20191203T212259 comment=NONE
channel d1: backup set complete, elapsed time: 00:01:05
Finished backup at 03-DEC-19

Starting Control File and SPFILE Autobackup at 03-DEC-19
piece handle=/u02/fra/ORCLCDB/autobackup/2019_12_03/o1_mf_s_1026077045_gydrhofh_.bkp comment=NONE
Finished Control File and SPFILE Autobackup at 03-DEC-19
released channel: d1

一些RMAN 高级特性

Recovery Catalog

为使用RMAN的高级特性,如stored scripts,需要设置recovery catalog。
或者需要管理多个数据库,或恢复信息保留时间需要长于CONTROLFILE_RECORD_KEEP_TIME时,也需要设置recovery catalog。
由于可以将多个数据库的元数据存于一个catalog,因此通过catalog中的RC_视图就可以所有数据库的信息,否则需要分别连每一个数据库然后查询V$视图。
最后,只有通过catalog才能只需以下命令:

BACKUP … KEEP UNTIL TIME
BACKUP … KEEP FOREVER
REPORT SCHEMA … AT
配置Recovery Catalog数据库

首先创建一个catalog数据库rcat,类型为non-cdb:

dbca -silent -createDatabase \
 -templateName General_Purpose.dbc \
 -gdbname rcat -sid rcat -responseFile NO_VALUE \
 -characterSet AL32UTF8 \
 -sysPassword Welcome1 \
 -systemPassword Welcome1 \
 -createAsContainerDatabase false \
  -databaseType MULTIPURPOSE \
 -automaticMemoryManagement false \
 -totalMemory 768 \
 -storageType FS \
 -datafileDestination "/opt/oracle/oradata" \
 -redoLogFileSize 50 \
 -emConfiguration NONE \
 -ignorePreReqs

连接到数据库,创建一表空间:

create tablespace rman datafile '/opt/oracle/oradata/rcat/rman.dbf' size 100m autoextend on next 50m;
创建Recovery Catalog属主
create user rcat_owner identified by Welcome1;
 grant recovery_catalog_owner to rcat_owner;

预定义角色recovery_catalog_owner 包括一系列权限,如create table/view,alter session等。
过程为首先用dbca创建一个Non-CDB数据库rcat。

dbca -silent -createDatabase \
 -templateName General_Purpose.dbc \
 -gdbname rcat -sid rcat -responseFile NO_VALUE \
 -characterSet AL32UTF8 \
 -sysPassword Welcome1 \
 -systemPassword Welcome1 \
 -createAsContainerDatabase false \
  -databaseType MULTIPURPOSE \
 -automaticMemoryManagement false \
 -totalMemory 768 \
 -storageType FS \
 -datafileDestination "/opt/oracle/oradata" \
 -redoLogFileSize 50 \
 -emConfiguration NONE \
 -ignorePreReqs

然后:

 create tablespace rman datafile '/opt/oracle/oradata/RCAT/rman.dbf'  size 150m autoextend on next 50m;
 create user rcat_owner identified by Welcome1 default tablespace rman quota unlimited on rman;
 grant recovery_catalog_owner to rcat_owner;
创建Recovery Catalog
$ rman catalog rcat_owner/Welcome1@rcat

Recovery Manager: Release 19.0.0.0.0 - Production on Sat Dec 7 10:45:47 2019
Version 19.3.0.0.0

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

connected to recovery catalog database

RMAN> create catalog;

recovery catalog created

同步Recovery Catalog

接下来就是将数据库注册到Recovery Catalog,只需注册一次,会将备份信息和目标数据库的结构保存。
注意,同步时,必须使用目标数据库的环境变量,本例目标数据库为ORCLCDB:

$ . oraenv
ORACLE_SID = [ORCL] ? ORCLCDB
The Oracle base remains unchanged with value /opt/oracle

$ rman target / catalog rcat_owner/Welcome1@rcat

Recovery Manager: Release 19.0.0.0.0 - Production on Sat Dec 7 10:49:38 2019
Version 19.3.0.0.0

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

connected to target database: ORCLCDB (DBID=2795391422)
connected to recovery catalog database

RMAN> register database;

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

再次注册会失败:

RMAN> register database;

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03009: failure of register command on default channel at 12/07/2019 10:51:22
RMAN-20002: target database already registered in recovery catalog

有时,可能需要手工同步,例如最近的归档日志不会记录在recover catalog中,例如数据库物理结构发生变化会记录在controlfile,也不会自动同步过来。
同步命令为:

$ rman target / catalog rcat_owner/Welcome1@rcat

Recovery Manager: Release 19.0.0.0.0 - Production on Sat Dec 7 10:56:06 2019
Version 19.3.0.0.0

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

connected to target database: ORCLCDB (DBID=2795391422)
connected to recovery catalog database

RMAN> resync catalog;

starting full resync of recovery catalog
full resync complete

创建和使用RMAN 存储脚本

存储脚本存在recovery catalog中,好处是可以反复调用或为多个目标数据库共享使用。
命令为CREATE SCRIPTCREATE GLOBAL SCRIPT,后者可为多个目标数据库使用。

RMAN> create global script global_backup_db {backup database plus archivelog;}

created global script global_backup_db

也可以从文件导入:

$ cat /tmp/local_bak.rman
{backup database plus archivelog;}

RMAN> create script local_backup_db from file '/tmp/local_bak.rman';

运行示例:

RMAN>  run {execute script global_backup_db;}

运行时,也可以用&符合替换部分参数。
查看脚本:

RMAN> list script names;

List of Stored Scripts in Recovery Catalog


    Scripts of Target Database ORCLCDB

       Script Name
       Description
       -----------------------------------------------------------------------
       local_backup_db


    Global Scripts


       Script Name
       Description
       -----------------------------------------------------------------------
       global_backup_db

RMAN> list global script names;

List of Stored Scripts in Recovery Catalog


    Global Scripts


       Script Name
       Description
       -----------------------------------------------------------------------
       global_backup_db

查看脚本内容:

RMAN> print global script global_backup_db;

printing stored global script: global_backup_db
{backup database plus archivelog;}

RMAN> print global script global_backup_db to file '/tmp/save_script.rman';

global script global_backup_db written to file /tmp/save_script.rman

替换和删除:


RMAN> replace global script backup_ts {backup tablespace system, &1;}

Enter value for 1: users

replaced global script backup_ts

RMAN> delete global script backup_ts;

deleted global script: backup_ts

增量备份

增量备份包括0级和1级,0级拷贝指定数据文件的所有数据块,但不含未使用的。物理上等同于全部,但全备不能用于增量恢复。全备是独立的。
1级备份分为两类,differential 和cumulative,前者备份自上次0或1级增备后的变化,后者备份自上次0级增备后的变化。
语法为:

increment_level [0|1]
0级增备

主要考虑多久做一次。

RMAN> backup incremental level 0 tablespace users;

Starting backup at 07-DEC-19
using channel ORA_DISK_1
using channel ORA_DISK_2
using channel ORA_DISK_3
using channel ORA_DISK_4
channel ORA_DISK_1: starting compressed incremental level 0 datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00007 name=/opt/oracle/oradata/ORCLCDB/users01.dbf
channel ORA_DISK_1: starting piece 1 at 07-DEC-19
channel ORA_DISK_1: finished piece 1 at 07-DEC-19
piece handle=/u02/fra/backups/ORCLCDB_20191207_1guiqqd3 tag=TAG20191207T111858 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 07-DEC-19

Starting Control File and SPFILE Autobackup at 07-DEC-19
piece handle=/u02/fra/ORCLCDB/autobackup/2019_12_07/o1_mf_s_1026386342_gyp6k6fv_.bkp comment=NONE
Finished Control File and SPFILE Autobackup at 07-DEC-19

differential 增备

默认的增备类型。

RMAN> backup incremental level 1 tablespace users;

Starting backup at 07-DEC-19
using channel ORA_DISK_1
using channel ORA_DISK_2
using channel ORA_DISK_3
using channel ORA_DISK_4
channel ORA_DISK_1: starting compressed incremental level 1 datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00007 name=/opt/oracle/oradata/ORCLCDB/users01.dbf
channel ORA_DISK_1: starting piece 1 at 07-DEC-19
channel ORA_DISK_1: finished piece 1 at 07-DEC-19
piece handle=/u02/fra/backups/ORCLCDB_20191207_1iuiqqfr tag=TAG20191207T112027 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 07-DEC-19

Starting Control File and SPFILE Autobackup at 07-DEC-19
piece handle=/u02/fra/ORCLCDB/autobackup/2019_12_07/o1_mf_s_1026386430_gyp6my7f_.bkp comment=NONE
Finished Control File and SPFILE Autobackup at 07-DEC-19

cumulative 增备

相对于 differential 增备,消耗更多空间和时间,但恢复快。

RMAN> backup incremental level 1 cumulative tablespace users;

Starting backup at 07-DEC-19
using channel ORA_DISK_1
using channel ORA_DISK_2
using channel ORA_DISK_3
using channel ORA_DISK_4
channel ORA_DISK_1: starting compressed incremental level 1 datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00007 name=/opt/oracle/oradata/ORCLCDB/users01.dbf
channel ORA_DISK_1: starting piece 1 at 07-DEC-19
channel ORA_DISK_1: finished piece 1 at 07-DEC-19
piece handle=/u02/fra/backups/ORCLCDB_20191207_1kuiqqho tag=TAG20191207T112127 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 07-DEC-19

Starting Control File and SPFILE Autobackup at 07-DEC-19
piece handle=/u02/fra/ORCLCDB/autobackup/2019_12_07/o1_mf_s_1026386490_gyp6ot7v_.bkp comment=NONE
Finished Control File and SPFILE Autobackup at 07-DEC-19

其它能力

创建Duplexed Backupsets

duplex可创建最多4份拷贝。

RMAN> configure datafile backup copies for device type sbt to 3;

new RMAN configuration parameters:
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE 'SBT_TAPE' TO 3;
new RMAN configuration parameters are successfully stored
starting full resync of recovery catalog
full resync complete

duplex不能用于FRA,只适用于backupset而非image copy。

创建Backupset的备份
backup device type sbt backupset all;
 backup device type sbt backupset completed before 'sysdate-14' delete input;
备份只读表空间

只读表空间对于数仓较重要,如果按时间分区,一些分区可以移动到只读表空间。
备份只读表空间一般是自动的,也可在备份时手工指定SKIP READONLY选项。

创建归档备份

RMAN备份不仅满足保留策略要求,而且使得可以恢复上一个备份到当前的任何时间点。
但有时为满足合规要求,需要保留某一时间点的数据库备份,这可能在保留期意外,同时这个时间点备份需要指定保留期。这可通过归档备份实现。
归档备份还可用于数据库迁移。
限制是不能使用FRA。

backup as compressed backupset 
 database format '/u01/opt/oradata/rman/archback/%U'
 tag save1yr
 keep until  time 'ssydate+365';
backup as compressed backupset 
 database format '/u01/opt/oradata/rman/archback/%U'
 tag saveforever
 keep forever

属性也可以后期改变:

change backup taa 'saveforever' nokeep;
change copy of database nokeep;
创建Multisection备份

需要指定section大小。

backup tablespace users section size 100m;

不要使用太高的并发,以免冲突。

压缩备份

4档,压缩比和CPU使用由低到高为LOW,MEDIUM,BASIC(默认)和HIGH。

configure compression algorithm 'BASIC';
确保Repository为最新(一致的)

有时,可能在操作系统中手工删除备份,或者磁带库有自己的保留策略,这时repository就会变得不准确(一致)。因此需要检查以保持一致:

run {
 crosscheck backupset;
 crosscheck archivelog all;
 delete expired backupset;
 delete expired archivelog all;
 }

参考

  1. https://oracle-base.com/articles/12c/multitenant-rman-backup-recovery-cdb-and-pdb-12cr1#tablespace-and-datafile-backups
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值