保障数据完整的一个前提条件是制定完整的备份策略,在日常运维工作中难免会遇到数据误删除、人为破坏、硬件故障等造成生产库数据不完整的情况。备份重要意义往往会被忽略,有的读者可能会说我有完备的容灾方案,还需要备份做什么?那么问题来了,万一误删了数据一个月后才发现,这时候如果没有有效的数据备份,我们如何去找回呢?这时候一个安全有效的备份策略就显得格外的重要。
Recovery Manager(RMAN)是一个Oracle数据库客户端,可以在数据库上执行备份和恢复任务,并自动管理备份策略。它大大简化了备份、还原和恢复数据库文件的工作。
RMAN环境由在备份数据中发挥作用的实用程序和数据库组成。RMAN环境至少必须包括以下组件:
RMAN Client (RMAN客户端):
RMAN是Oracle数据库可执行文件,用于解析命令,引导服务器执行这些命令,并将其活动记录在目标数据库的控制文件中。RMAN可执行文件随数据库一起自动安装,通常与数据库的可执行文件位于同一目录中。例如,Linux上的RMAN客户端位于$ORACLE_HOME/bin。
Target Database(目标数据库):
RMAN通过TARGET关键字连接到的Oracle数据库。RMAN执行备份和恢复操作的数据库称为目标数据库。RMAN始终在数据库的控制文件中维护有关其在数据库上操作的元数据。RMAN元数据称为RMAN repository。
某些环境使用以下可选组件:
fast recovery area(快速恢复区):
数据库可以在其中存储和管理与备份和恢复相关的文件。可以使用DB_RECOVERY_FILE_DEST 和DB_RECOVERY_FILE_DEST_SIZE初始化参数设置快速恢复区的位置和大小。
Media Management Software(介质管理软件):
RMAN与磁带库进行交互所需的应用程序。介质管理器在备份和恢复期间控制这些设备,管理介质的加载,标记和卸载。介质管理设备有时称为SBT(系统备份到磁带)设备。
Recovery Catalog(恢复目录):
用于记录针对一个或多个目标数据库的RMAN活动。如果控制文件丢失,恢复目录将保留RMAN元数据,从而使丢失控制文件后可以轻易的还原和恢复。数据库可能会覆盖控制文件中的较旧记录,但是RMAN会在catalog中永久维护记录,除非用户删除了记录。
并不是所有的数据库故障都需要手动干预
以下问题通常需要DBA干预和数据恢复:介质故障,用户错误和应用程序错误。其他故障可能需要DBA干预而不会导致数据丢失。例如,由于数据文件已满,可能需要在实例失败后重新启动数据库或在语句失败后分配更多的磁盘空间。
在讲RMAN备份的时候首先得清楚RMAN各个环境参数的作用:
SHOW ALL;
RMAN configuration parameters for database with db_unique_name PROD1 are:
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 3 DAYS;
CONFIGURE BACKUP OPTIMIZATION ON;
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP ON; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE SBT_TAPE TO '%F'; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE 'SBT_TAPE' PARALLELISM 2 BACKUP TYPE TO COMPRESSED BACKUPSET;
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE SBT_TAPE TO 1; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE SBT_TAPE TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE CHANNEL DEVICE TYPE 'SBT_TAPE' PARMS 'ENV=(OB_DEVICE=tape1)';
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 '/disk1/oracle/dbs/snapcf_ev.f'; # default
这里着重介绍比较常用的参数:
👉 CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default
CONTROLFILE AUTOBACKUP 控制文件自动备份
解释:
你可以将RMAN配置为自动备份控制文件和服务器参数文件。每当添加备份记录时,都会发生自动备份。
如果数据库以归档模式运行,那么只要控制文件中的数据库结构元数据发生更改,就会执行自动备份。即使当前控制文件,恢复目录和服务器参数文件丢失数据库。RMAN也可以用自动备份文件恢复。
如下面的代码所示:
RMAN> configure controlfile autobackup on; #开启控制文件自动备份
RMAN> configure controlfile autobackup off; #关闭控制文件自动备份
注意 默认情况下,对于COMPATIBLE初始化参数设置为12.2或更高的CDB和独立数据库,控制文件自动备份是打开的。
扩展:
当数据库物理结构发生改变时是否会马上出发自动备份控制文件?
基于性能的考虑从Oracle 11g开始,数据库设置了自动控制文件备份延时参数,以下为查询代码:
SQL> select a.ksppinm name, b.ksppstvl value, a.ksppdesc description from x$ksppi a, x$ksppcv b where a.indx = b.indx and a.ksppinm like '%control%delay%';
NAME VALUE DESCRIPTION
------------------------------ ----- ----------------------------------------
_controlfile_autobackup_delay 300 time delay (in seconds) for performing c
ontrolfile autobackups
👉 CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO ‘%F’; # default
CONTROLFILE AUTOBACKUP FORMAT 控制文件自动备份的备份文件格式
解释:
默认情况下,所有配置的设备的自动备份文件的格式都是%F
如下面的代码所示:
使用以下命令,其中deviceSpecifier是任何有效的设备类型,并且’ string’必须包含替换变量%F(并且没有其他替换变量):
RMAN> configure controlfile autobackup format for device type disk to '/oracle/backup/%F';
例如,可以运行以下命令为控制文件自动备份指定非默认文件名。在文件名中,?代表ORACLE_HOME。
RMAN>
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '?/oradata/cf_%F';
注意 控制文件自动备份有效的格式是:%D,%I,%M,%Y,%F,%T,%d,和%n。如果使用其他格式,则可能无法还原自动备份的控制文件。
要清除设备的控制文件自动备份格式,代码如下:
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK CLEAR;
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE sbt CLEAR;
👉 CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
DEVICE TYPE DISK PARALLELISM 设备的并行度
解释:
通过设置并行实现多通道同时备份,提高效率,但是执行命令时使用的通道数应与访问的设备数相匹配,如果分配的通道数量大于已设置的并行度,RMAN仅会向与并行度匹配的通道写入数据,并且会忽略超出并行度的其他通道。
如下面的代码所示:
RMAN> configure device type disk parallelism 3;
old RMAN configuration parameters:
CONFIGURE DEVICE TYPE DISK PARALLELISM 2 BACKUP TYPE TO BACKUPSET;
new RMAN configuration parameters:
CONFIGURE DEVICE TYPE DISK PARALLELISM 3 BACKUP TYPE TO BACKUPSET;
new RMAN configuration parameters are successfully stored
RMAN> configure device type disk clear; #清空配置
注意 设置并行度一定要评估存储I/O性能,否则会可能给生产系统带来很严重的性能问题
👉 CONFIGURE SNAPSHOT CONTROLFILE NAME TO ‘/u01/app/oracle/product/11.2.0/db_home1/dbs/snapcf_prod.f’; # default
SNAPSHOT CONTROLFILE NAME 控制文件快照
解释:
控制文件快照的默认位置取决于平台,并且取决于每个目标数据库的Oracle主目录。例如,某些Linux平台上的默认文件名是$ORACLE_HOME/dbs/snapcf_@.f。
如下面的代码所示:
RMAN> configure snapshot controlfile name to '/oracle/snapcf.ctl'; #设置快照的位置
RMAN> configure snapshot controlfile name clear; #清空配置