备份理论和基本语法
通常用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 SCRIPT
或CREATE 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;
}
参考
- https://oracle-base.com/articles/12c/multitenant-rman-backup-recovery-cdb-and-pdb-12cr1#tablespace-and-datafile-backups