备份理论和基本语法
备份概念
执行备份或还原草的数据库称为目标。在一些环境下,有许多数据库,因此有许多RMAN目标。应一次连接每个数据库。目标的每个备份都有一些属性:
打开或关闭
完整或部分
完整或增量
到磁盘还是磁带上
副本或备份集
这些属性可以随意组合,但根据环境和配置,可能只能使用这些属性的一个子集。在所有情况下,备份由Oracle服务器进程完成,启动该进程是为了响应RMAN可执行程序用户进程中发出的命令。
1.RMAN体系结构
RMAN可执行程序是一个用户进程,与其他用户进程一样。它在本地使用进程间通信(IPC),或者远程使用TCP和数据库侦听器,登录到一个Oracle数据库上。连接后,用户就可以发出命令,执行备份和还原操作。这些操作由根据需要启动的其他Oracle服务器进程(称为通道)来完成。通道是一个服务器进程,与其他服务器进程一样,但其基本功能仅限于复制文件。
RMAN的一个主要功能是使用库。RMAN库由与备份相关的元数据组成。这包括已备份的内容、备份文件和位置、存在哪些归档日志文件、已有的永久配置设置,以及RMAN理解数据库和备份,以完全自动执行还原和恢复操作所需的所有细节。该库存在于一个或两个位置。库的一个副本总是存储在目标数据库的控制文件中。仅依赖它可能会带来连个问题。第一,信息仅存储有限的时间。具体而言,就是CONTROL_FILE_RECORD_KEEP_TIME实例参数指定的天数,默认为7天。如果仅适用基于控制文件的库,就可能希望调整它,让RMAN把信息保留更长的时间。命令如下:
SYS@ prod>sho parameter keep_time
NAME TYPE VALUE------------------------------------ ----------- ------------------------------control_file_record_keep_timeinteger7SYS@ prod>altersystemsetcontrol_file_record_keep_time=30;
System altered.
SYS@ prod>
RMAN还可以用Oracle数据库的形式给库使用第二个存储位置。这需要在数据中创建一个模式,称为RMAN目录。该目录应在数据库中创建,仅用于这个目的。该目录可以记录许多目标的元数据,用作所有备份信息的中心库。使用目录时,备份信息可以存储的时间段是没有限制的。使用目录还可以启用一些更高级的RMAN功能。
RMAN可以创建两类备份:映像副本和备份集。映像副本备份会生成一个输出文件,其中的每个字节都与输入文件相同。备份集是一种比较智能的结构。它可以把几个输入文件合并到一个输出文件中,不包含从来没有使用的输入文件块,可以压缩和加密,可以分解为多个块。这些块是构成备份集的物理文件。
2.在一个页面中备份
打开备份(也称为热备份或不一致备份)在数据库使用过程中进行。只有数据库在归档日志模式下,才能进行打开备份。这是因为可打开文件的任何备份都是不一致的。读取文件和写入副本要花相当长的时间,在这个过程中,文件可能已更新。因此,副本吧听不是文件的一个稳定版本。在归档日志模式下,这就不是什么问题,因为重做日志流会以变更矢量的形式记录应用于文件的所有变更,在备份的过程中,这些变更会应用于Oracle 块。如果需要从备份中还原文件,就可以应用这些变更,使用重做流中的信息,是不一致的备份可用。如果数据库没有处于归档日志模式,进行备份时执行的重做就不可用。
关闭备份(也称为冷备份或抑制备份)在数据库处于装载模式时进行。控制文件必须装载,RMAN才能访问其库。关闭备份是一致的;数据文件是稳定的,关闭备份时数据库处于非归档日志模式下时唯一可用的备份类型。
完整备份时备份所有数据文件和控制文件。局部备份是备份数据库的一个子集。完整备份是非归档日志模式下唯一可用的备份类型。这是由于要打开数据库,因此所有的数据文件必须有相同的系统变更号(SCN)。如果备份包含几个局部备份,每个局部备份就有不同的SCN。之后还原时,就需要重做数据,使所有的备份具有相同的SCN。这些重做数据不能在非归档日志模式下使用。
完整备份包含每个文件中每个使用过的块。增量备份只有自上一次备份以前改变的块。增量备份策略必须从一个完整备份开始,之后可以有随意多次增量备份,但还原总是需要先还原完整备份(称为0级备份),再应用增量备份,使文件保持最新。只有进行了新的0级备份,才能丢弃以前的备份。
RMAN基本语法
RMAN可执行程序在操作系统提示行上的命令:
rman target /rman target sys/oracle
rman target sys/oracle@orclz
所有3个命令都以具备SYSDBA权限的用户身份登录到目标数据库上。在第一个命令中,目标是一个运行在同一台机器上的本地数据库实例,该机器用ORACLE_SID环境变量标识,用户用其操作系统账户进行身份验证。第二个例子也连接一个本地数据库实例,但使用数据库密码文件来验证身份。第三个例子使用tnsnames服务名,通过网络连接一个远程数据库,它也使用密码文件来验证身份。
1.在非归档日志模式下备份
使用RMAN进行关闭的完整备份
[oracle@cuug ~]$ rman target/Recovery Manager: Release 11.2.0.1.0-Productionon鏄熸湡涓€ 4鏈?820:26:522019Copyright (c) 1982,2009, Oracleand/orits affiliates.All rights reserved.
connected totargetdatabase: PROD (DBID=292420020)
RMAN>shutdown immediate;
using target databasecontrolfileinsteadof recovery catalogdatabase closeddatabase dismounted
Oracle instance shut down
RMAN> startup mount
connected totargetdatabase(not started)
Oracle instance starteddatabase mounted
Total System Global Area 523108352 bytes
Fixed Size 1337632 bytes
Variable Size 394266336 bytesDatabaseBuffers121634816 bytes
Redo Buffers 5869568 bytes
RMAN>backupdatabase;
Starting backupat2019-04-0820:28:01allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=18device type=DISKchannel ORA_DISK_1: starting fulldatafilebackupsetchannel ORA_DISK_1: specifying datafile(s) inbackupsetinput datafile filenumber=00001name=/u01/oradata/prod/system01.dbf
input datafile filenumber=00002name=/u01/oradata/prod/sysaux01.dbf
input datafile filenumber=00003name=/u01/oradata/prod/undotbs01.dbf
input datafile filenumber=00005name=/u01/oradata/prod/example01.dbf
input datafile filenumber=00004name=/u01/oradata/prod/users01.dbf
channel ORA_DISK_1: starting piece 1at2019-04-0820:28:03channel ORA_DISK_1: finished piece 1at2019-04-0820:29:08piece handle=/u01/flash_recovery_area/PROD/backupset/2019_04_08/o1_mf_nnndf_TAG20190408T202802_gbphlm1z_.bkp tag=TAG20190408T202802 comment=NONE
channel ORA_DISK_1: backupsetcomplete, elapsed time:00:01:05channel ORA_DISK_1: starting fulldatafilebackupsetchannel ORA_DISK_1: specifying datafile(s) inbackupsetincluding currentcontrolfileinbackupsetincluding currentSPFILEinbackupsetchannel ORA_DISK_1: starting piece 1at2019-04-0820:29:09channel ORA_DISK_1: finished piece 1at2019-04-0820:29:10piece handle=/u01/flash_recovery_area/PROD/backupset/2019_04_08/o1_mf_ncsnf_TAG20190408T202802_gbphnor0_.bkp tag=TAG20190408T202802 comment=NONE
channel ORA_DISK_1: backupsetcomplete, elapsed time:00:00:01Finished backupat2019-04-0820:29:10RMAN>alterdatabaseopen;database opened
RMAN>exitRecovery Manager complete.[oracle@cuug ~]$
2.归档日志模式下的备份可能性
下面是一些简单的备份命令:
BACKUP DATAFILE 1,2;
BACKUP TABLESPACE USERS,EXAMPLE;
BACKUP CURRENT CONTROLFILE;
BACKUP DATABASE;
BACKUP ARCHIVELOG ALL;
通常,单行命令是不够的。要把几个命令链接起来,必须把它们组合到一个块中。块用RUN作为前缀,并括在{}中。一个打开的完成备份,包括归档日志文件的备份呵呵删除,示例:
RMAN>run {allocate channel d1 typedisk;2>allocate channel d2 typedisk;3>backupascompressed backupsetdatabaseformat'/home/oracle/db_%U.bset';4>backupascompressed backupset archivelogallformat'/home/oracle/arch_%U.bset'deleteall input;}
allocated channel: d1
channel d1: SID=35device type=DISKallocated channel: d2
channel d2: SID=1device type=DISKStarting backupat2019-04-0820:46:57channel d1: starting compressed fulldatafilebackupsetchannel d1: specifying datafile(s) inbackupsetinput datafile filenumber=00001name=/u01/oradata/prod/system01.dbf
input datafile filenumber=00005name=/u01/oradata/prod/example01.dbf
channel d1: starting piece 1at2019-04-0820:46:58channel d2: starting compressed fulldatafilebackupsetchannel d2: specifying datafile(s) inbackupsetinput datafile filenumber=00002name=/u01/oradata/prod/sysaux01.dbf
input datafile filenumber=00003name=/u01/oradata/prod/undotbs01.dbf
input datafile filenumber=00004name=/u01/oradata/prod/users01.dbf
channel d2: starting piece 1at2019-04-0820:46:58.
.
.
.
.
在run块中,前两个命令ALLOCATE CHANNEL,分配一个通道,会启动一个服务器进程。每个通道都需要名称(只是一个随意的字符串,本例是d1和d2),必须指定是使用磁带还是磁盘作为备份目标。启动多个通道,会启用备份的并行性。RMAN会把工作负载分布到通道上。第三行指定完整的数据库备份,使用FORMAT指定输出块的名称。第四行指定所有的归档日志文件都应备份和删除。FORMAT规范包含%U。这是一个变量,会扩展为一个名称,该名称包含8字符的任意字符串,以确保块运行多次时,总是生成不同的块名。备份的类型是COMPRESSED BACKUPSET。压缩通常不仅会减少备份块的大小,还会提高操作的速度。
默认的备份类型是备份集。另一个类型是映像副本。要撞见副本,可以使用如下命令:
BACKUPASCOPY DATAFILE'/u01/oradata/orcl/system1.dbf' FORMAT '/U02/backup/orcl/system01.dbf';BACKUPASCOPYDATABASE;
第一个命令把一个数据文件复制到指定的目标。第二个命令把整个数据库复制到默认的目标,即快速恢复区。
永久RMAN设置
1.设置和清理默认值
使用SHOW ALL命令查看默认值
RMAN>showall;
RMAN configuration parameters fordatabasewith db_unique_name PROD are:
CONFIGURE RETENTION POLICY TOREDUNDANCY1; #defaultCONFIGURE BACKUPOPTIMIZATIONOFF; #defaultCONFIGURE DEFAULTDEVICE TYPETODISK; #defaultCONFIGURE CONTROLFILE AUTOBACKUP OFF; #defaultCONFIGURE CONTROLFILE AUTOBACKUP FORMAT FORDEVICE TYPEDISKTO'%F'; #defaultCONFIGURE DEVICE TYPE DISKPARALLELISM1BACKUPTYPETOBACKUPSET; #defaultCONFIGURE DATAFILE BACKUPCOPIESFORDEVICE TYPEDISKTO1; #defaultCONFIGURE ARCHIVELOG BACKUPCOPIESFORDEVICE TYPEDISKTO1; #defaultCONFIGURE MAXSETSIZE TOUNLIMITED; #defaultCONFIGURE ENCRYPTION FORDATABASEOFF; #defaultCONFIGURE ENCRYPTION ALGORITHM 'AES128'; #defaultCONFIGURE COMPRESSION ALGORITHM 'BASIC'ASOFRELEASE'DEFAULT'OPTIMIZEFORLOADTRUE ; #defaultCONFIGURE ARCHIVELOG DELETION POLICY TONONE; #defaultCONFIGURE SNAPSHOT CONTROLFILE NAME TO'/u01/oracle/dbs/snapcf_prod.f'; #defaultRMAN>
RETENTION POLICY 指定RMAN应创建什么备份,合适可以删除它们。默认值是每个文件的一个副本。
OPTIMIZATION 确定,即使已有足够的备份,RMAN是否仍要根据请求备份文件。默认值是总是备份它们。
DEFAULT DEVICE TYPE TO DISK 表示除非明确指出,否则RMAN就仅启动磁盘通道,不写入磁带。
CONTROLFILE AUTOBACKUP OFF 禁止RMAN自动备份控制文件,作为其他备份操作的一部分。
AUTOBACKUP FORMAT 为控制文件的自动备份生成名称和位置。
DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET 表示,在默认情况下,备份到磁盘时,只启动一个通道,该备份是一个未压缩的备份集。
BACKUP COPIES 指定在备份数据文件和归档日志文件时,应生成备份集的多少副本。
MAXSETSIZE 可以限制每个备份集的大小。如果达到了这个数字,就关闭该备份集块,继续备份到一个新的备份集中。
ENCRYPTION 默认禁用备份集的加密。
COMPRESSION 如果请求压缩,就使用BASIC算法,它是免费的。
ARCHIVELOG DELETION POLICY 允许RMAN根据各种条件,自动删除不再需要的归档日志。
SNAPSHOT CONTROLFILE 为控制文件的临时副本指定名称和位置,这些临时副本创建为控制文件备份机制的一部分。
需求示例:总是可以把数据库还原到前两周的任意时刻;创建达到该目标所需的备份,备份写入磁盘,使用4个通道的并行程度;控制文件必须总是包含在任何备份中;备份是压缩过的备份集,存储在c:\db_backups目录中;备份集块根据库名、备份日期和唯一字符串来命名;归档日志在备份到磁盘上两次后删除。要配置这个需求,应运行如下命令:
configure retention policytorecovery windowof14 days;
configure backupoptimizationon;
configure controlfile autobackup on;
configure device type diskparallelism4backuptypeto compressed backupset;
configure channel device type diskformat'c:\db_backups\%d_%T_%u';
configure archivelog deletion policy tobackup2timestodisk;
在使用命令就能满足上述需求:
backupdatabase;backuparchivelogalldeleteinput;
永久配置设置是为每个目标数据库配置的,存储在RMAN库中,要返回默认值,可以连接目标,执行CLEAR命令:
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;
2.使用保留策略
使用恢复窗口或冗余,就可以自动保留和管理备份。使用恢复窗口,RMAN会分局需要保留许多备份,知道数据库返回恢复窗口的任意时间点位置。例如,在7天的恢复窗口中,RMAN会维护足够多的映像副本、增量备份和归档重做日志,确保数据库可以还原和恢复前7天内的任意时间点。如果使用快速恢复区,且新备份需要磁盘空间,则不需要支持这个恢复窗口的任何备份都标记为OBSOLETE,并由RMAN自动删除。
相反,冗余策略告诉RMAN保留特定数量的备份。超过冗余策略中的指定的数字的任何额外副本或备份都标记为OBSOLETE。与恢复窗口一样,如果需要磁盘空间,使用了快速恢复区,则过时的备份会自动删除。否则,可以使用DELETE OBSOLETE命令手工删除备份文件,更新目录。
如果保留策略设置为NONE,任何备份或副本就都不会过时,DBA必须手工删除目录和磁盘中不需要的备份。默认情况下,保留策略是一个副本(保留策略设置为1)。使用下面的RMAN命令,可以把保留策略设置为两个副本:
configure retention policy to redundancy 2;
下面的命令把保留策略设置为4天的恢复窗口:
configure retention policy to recovery window of 4 days;
Oracle最佳实践建议,使用恢复窗口,在发现错误之前执行时间点恢复。
当RMAN外部的备份系统把磁盘备份存储到磁带中,并删除了它们时,禁用保留策略是有用的。
configure retention policy to none;
3.格式指定符
为了生成名称,需要配置永久格式指定符,使用字面量(如目录名)和变量组合。变量如下:
%d 数据库名
%e 归档日志序列号
%f 绝对文件号
%F 组合数据库标识符(DBID)、日期、月份、年份和序列号,用短横线隔开
%c 双重备份中多个副本的副本号
%I DBID
%N 表空间名,占8个字符
%t 备份集时间戳
%p 备份集中的块号
%s 备份集号
%u 实际上,是8个随机字符,派生与备份集号和时间
%U 系统生成的唯一文件名(默认)。对于备份集,它等价于%u_%p_%c;对于数据文件影响副本,它是data-D-%d_id-%I_TS-%N_FNO-%f_%u;对于归档日志映像副本,它是arch-D-%d_id-%I_S-%e_T-%h_A-%a_%u;对于控制文件映像副本,它是cf-D_%d-id-%I_%u