备份有困难?Oracle DBA详述RMAN备份

备份概念linux


 

执行备份或还原的数据库称为目标。在一些环境下,有许多数据库,所以有许多RMAN目标。应一次链接每一个数据库。目标的每一个备份都有一些属性:nginx

  • 打开或关闭算法

  • 完整或部分sql

  • 完整或增量typescript

  • 到磁盘仍是磁带上数据库

  • 副本或备份集服务器

 

这些属性能够随意组合,但根据环境和配置,可能只能使用这些属性的一个子集。在全部状况下,备份由Oracle服务器进程完成,启动该进程是为了响应RMAN可执行程序用户进程中发出的命令。网络

 

1. RMAN体系结构oracle

 

RMAN可执行程序是一个用户进程,与其余用户进程同样。它在本地使用进程间通讯(IPC),或者远程使用TCP和数据库侦听器,登陆到一个Oracle数据库上。链接后,用户就能够发出命令,执行备份和还原操做。这些操做由根据须要启动的其余Oracle服务器进程(称为通道)来完成。通道是一个服务器进程,与其余服务器进程同样,但其基本功能仅限于复制文件。ui

 

RMAN的一个主要功能是使用库。RMAN库由与备份相关的元数据组成。这包括已备份的内容、备份文件和位置、存在哪些归档日志文件、已有的永久配置设置,以及RMAN理解数据库和备份,以彻底自动执行还原和恢复操做所需的全部细节。该库存在于一个或两个位置。库的一个副本老是存储在目标数据库的控制文件中。仅依赖它可能会带来连个问题。第一,信息仅存储有限的时间。具体而言,就是CONTROL_FILE_RECORD_KEEP_TIME实例参数指定的天数,默认为7天。若是仅适用基于控制文件的库,就可能但愿调整它,让RMAN把信息保留更长的时间。命令以下:

 

SYS@ prod >sho parameter keep_timeNAME TYPE VALUE-- ---------------------------------- ----------- ------------------------------control_file_record_keep_time integer 7 SYS@ prod > alter system set control_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/oraclerman target sys/oracle@orclz

 

全部3个命令都以具有SYSDBA权限的用户身份登陆到目标数据库上。在第一个命令中,目标是一个运行在同一台机器上的本地数据库实例,该机器用ORACLE_SID环境变量标识,用户用其操做系统帐户进行身份验证。第二个例子也链接一个本地数据库实例,但使用数据库密码文件来验证身份。第三个例子使用tnsnames服务名,经过网络链接一个远程数据库,它也使用密码文件来验证身份。

 

1. 在非归档日志模式下备份

 

使用RMAN进行关闭的完整备份

[oracle@linuxidc ~]$ rman target /
Recovery Manager: Release 11.2.0.1.0 - Production on 鏄熸湡涓€ 4鏈?8 20:26:52 2019
Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
connected to target database: PROD (DBID=292420020)
RMAN> shutdown immediate;
using target database control file instead of recovery catalogdatabase closeddatabase dismountedOracle instance shut down
RMAN> startup mount
connected to target database (not started)Oracle instance starteddatabase mounted
Total System Global Area 523108352 bytes
Fixed Size 1337632 bytesVariable Size 394266336 bytesDatabase Buffers 121634816 bytesRedo Buffers 5869568 bytes
RMAN> backup database;
Starting backup at 2019-04-08 20:28:01allocated channel: ORA_DISK_1channel ORA_DISK_1: SID=18 device type=DISKchannel ORA_DISK_1: starting full datafile backup setchannel ORA_DISK_1: specifying datafile(s) in backup setinput datafile file number=00001 name=/u01/oradata/prod/system01.dbfinput datafile file number=00002 name=/u01/oradata/prod/sysaux01.dbfinput datafile file number=00003 name=/u01/oradata/prod/undotbs01.dbfinput datafile file number=00005 name=/u01/oradata/prod/example01.dbfinput datafile file number=00004 name=/u01/oradata/prod/users01.dbfchannel ORA_DISK_1: starting piece 1 at 2019-04-08 20:28:03channel ORA_DISK_1: finished piece 1 at 2019-04-08 20:29:08piece handle=/u01/flash_recovery_area/PROD/backupset/2019_04_08/o1_mf_nnndf_TAG20190408T202802_gbphlm1z_.bkp tag=TAG20190408T202802 comment=NONEchannel ORA_DISK_1: backup set complete, elapsed time: 00:01:05channel ORA_DISK_1: starting full datafile backup setchannel ORA_DISK_1: specifying datafile(s) in backup setincluding current control file in backup setincluding current SPFILE in backup setchannel ORA_DISK_1: starting piece 1 at 2019-04-08 20:29:09channel ORA_DISK_1: finished piece 1 at 2019-04-08 20:29:10piece handle=/u01/flash_recovery_area/PROD/backupset/2019_04_08/o1_mf_ncsnf_TAG20190408T202802_gbphnor0_.bkp tag=TAG20190408T202802 comment=NONEchannel ORA_DISK_1: backup set complete, elapsed time: 00:00:01Finished backup at 2019-04-08 20:29:10
RMAN> alter database open;
database opened
RMAN> exit
Recovery Manager complete.[oracle@linuxidc ~]$

 

2. 归档日志模式下的备份可能性

 

下面是一些简单的备份命令:

BACKUP DATAFILE 1,2;BACKUP TABLESPACE USERS,EXAMPLE;BACKUP CURRENT CONTROLFILE;BACKUP DATABASE;BACKUP ARCHIVELOG ALL;

 

一般,单行命令是不够的。要把几个命令连接起来,必须把它们组合到一个块中。块用RUN做为前缀,并括在{}中。一个打开的完成备份,包括归档日志文件的备份呵呵删除,示例:

 

 

RMAN> run {allocate channel d1 type disk;2> allocate channel d2 type disk;3> backup as compressed backupset database format '/home/oracle/db_%U.bset';4> backup as compressed backupset archivelog all format '/home/oracle/arch_%U.bset' delete all input;}
allocated channel: d1channel d1: SID=35 device type=DISK
allocated channel: d2channel d2: SID=1 device type=DISK
Starting backup at 2019-04-08 20:46:57channel d1: starting compressed full datafile backup setchannel d1: specifying datafile(s) in backup setinput datafile file number=00001 name=/u01/oradata/prod/system01.dbfinput datafile file number=00005 name=/u01/oradata/prod/example01.dbfchannel d1: starting piece 1 at 2019-04-08 20:46:58channel d2: starting compressed full datafile backup setchannel d2: specifying datafile(s) in backup setinput datafile file number=00002 name=/u01/oradata/prod/sysaux01.dbfinput datafile file number=00003 name=/u01/oradata/prod/undotbs01.dbfinput datafile file number=00004 name=/u01/oradata/prod/users01.dbfchannel d2: starting piece 1 at 2019-04-08 20:46:58

 

 

在run块中,前两个命令ALLOCATE CHANNEL,分配一个通道,会启动一个服务器进程。每一个通道都须要名称(只是一个随意的字符串,本例是d1和d2),必须指定是使用磁带仍是磁盘做为备份目标。启动多个通道,会启用备份的并行性。RMAN会把工做负载分布到通道上。第三行指定完整的数据库备份,使用FORMAT指定输出块的名称。第四行指定全部的归档日志文件都应备份和删除。FORMAT规范包含%U。这是一个变量,会扩展为一个名称,该名称包含8字符的任意字符串,以确保块运行屡次时,老是生成不一样的块名。备份的类型是COMPRESSED BACKUPSET。压缩一般不只会减小备份块的大小,还会提升操做的速度。

 

默认的备份类型是备份集。另外一个类型是映像副本。要撞见副本,可使用以下命令:

 

BACKUP AS COPY DATAFILE '/u01/oradata/orcl/system1.dbf' FORMAT '/U02/backup/orcl/system01.dbf';BACKUP AS COPY DATABASE;

 

第一个命令把一个数据文件复制到指定的目标。第二个命令把整个数据库复制到默认的目标,即快速恢复区。

 

永久RMAN设置


 

1. 设置和清理默认值

 

使用SHOW ALL命令查看默认值

RMAN> show all;
RMAN configuration parameters for database with db_unique_name PROD are:CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # defaultCONFIGURE BACKUP OPTIMIZATION OFF; # defaultCONFIGURE DEFAULT DEVICE TYPE TO DISK; # defaultCONFIGURE CONTROLFILE AUTOBACKUP OFF; # defaultCONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # defaultCONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # defaultCONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # defaultCONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # defaultCONFIGURE MAXSETSIZE TO UNLIMITED; # defaultCONFIGURE ENCRYPTION FOR DATABASE OFF; # defaultCONFIGURE ENCRYPTION ALGORITHM 'AES128'; # defaultCONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # defaultCONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # defaultCONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/oracle/dbs/snapcf_prod.f'; # default
RMAN>

 

  • 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 policy to recovery window of 14days;configurebackup optimization on;configure controlfile autobackupon;configure device typedisk parallelism 4 backup type tocompressed backupset;configure channel device typedisk format ' c:\db_backups\%d_%T_%u ';configure archivelog deletion policyto backup 2 times to disk ;

 

在使用命令就能知足上述需求:

 

backup database;backup archivelog all delete input;

 

永久配置设置是为每一个目标数据库配置的,存储在RMAN库中,要返回默认值,能够链接目标,执行CLEAR命令:

 

configure retention policy clear;configurebackupoptimization clear;configure controlfile autobackup clear;configure device typediskclear;configure channel device typediskclear;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;对于归档日志映像副本,它是

 

出处:https://www.linuxidc.com/Linux/2019-04/158197.htm