Oracle备份恢复方法
根据恢复时间目标(RTO)使用各种Oracle工具技术:
数天或数小时:如果整个数据库因为自然灾害或者磁盘失败而丢失,RMAN和可选的Oracle安全备份,可以在数天或数小时内恢复数据库。
数小时或数分钟:各种闪回技术,无论用户启动还是DBA启动,都可以恢复数据库对象,与此同时,数据库通常仍可用于其他用户。
数分钟或数秒:如果数据库必须持续可用,停工期不超过几分钟,Oracle解决方案如Data Guard 或 Real Application Cluster(RAC)就可以转而使用备份数据库或另一个正在运行的实例。
恢复分析:Oracle数据恢复顾问。
配置快速恢复区
快速恢复区是一个磁盘目标,用作与恢复相关的文件的默认位置。可以使用两个实例参数对其进行控制:
- db_recovery_file_dest:指定位置,可以多个数据库共享一个公共目标。
- db_recovery_file_dest_size:限制数据库将要在目标中占用的最大空间量,但不能说明目标中实际可用空间的大小
快速恢复区的配置和使用在两个视图中显示:
- v$recovery_file_dest
- v$recovery_area_usage
写入快速恢复区的文件可以包括:
- 恢复管理器备份
- 归档重做日志文件
- 数据库闪回日志
RMAN可以管理快速恢复区中的空间:它可以根据已配置的关于保留文件副本和备份的策略,删除不在需要的文件。
使用RMAN进行备份
RMAN参数讲解:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
指定RMAN应创建什么备份,何时可以删除。默认值是每个文件一个副本
CONFIGURE BACKUP OPTIMIZATION OFF; # default
即使已有足够的备份,RMAN是否仍要根据请求备份文件。默认总是备份他们。
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
除非明确指出,否则RMAN就仅启动磁盘通道,不写入磁带
CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default
禁止RMAN自动备份控制文件,作为其他备份操作的一部分
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
如果请求压缩,就使用BASIC算法,它是免费的。
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
允许RMAN根据各种条件,自动删除不再需要的归档日志。
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/usr/oracle/product/11.2.0/db_1/dbs/snapcf_orcl1.f'; # default
为控制文件的临时副本指定名称和位置,这些临时副本创建为控制文件备份机制的一部分。
永久配置设置是为每个目标数据库配置的,存储在RMAN库中,具体而言是目标数据库的控制文件和恢复目录。要把他们设回默认值可以使用如下命令:
configure retention policy clear;
使用RMAN恢复
恢复有完整恢复和不完整恢复两种,首先考虑的因该是不完整恢复,在任何情况下都不应当丢失数据——除非当前联机日志文件组的所有副本都不见了才考虑不完整恢复。
完整恢复有4步:
1.使受损或缺失的文件脱机
2.还原文件
3.恢复文件
4.使文件联机
不完整恢复也有4步:
1.装载数据库
2.还原所有数据文件
3.把数据文件恢复到某一点
4.用RESETKOGS打开数据库
完整恢复在数据库打开时完成,不完整恢复需要在装载模式下进行。完整恢复还原细粒度是受损文件,不完整恢复是整个数据库。
从数据库失败中恢复一般有两步:从备份位置还原一个或多个数据库文件(还原阶段);应用归档和联机重做日志文件,把整个数据库或单个数据文件恢复到指定的SCN(通常是最新的SCN,或者最后一次提交的事务)(恢复阶段)。
RESTORE命令是任何恢复过程中的第一步。执行RESTORE命令时,RMAN从磁盘中检索一个或多个数据文件和恢复操作需要的归档重做日志文件。
执行RECOVER命令时,RMAN把归档和联机重做日志文件中的变更应用于还原数据文件。过程如下
SQL> shutdown immediate; SQL> startup mount; rman target / catalog rman/rman@rcat RMAN> restore database; RMAN> recover database; RMAN> sql 'alter database open';
完整恢复不重要的文件
如果丢失的不是SESTEM或UNDO表空间的一部分,该数据文件就不重要。步骤如下
1.ALTER TABLESPACE 使受损或缺失的表空间脱机
2.RMAN RESTORE 从备份位置中加载表空间的数据文件。
3.RMAN RECOVER 把归档和联机重做日志文件应用于还原的数据文件
4.表空间联机
可以恢复到最后一次提交事务。若表空间文件众多,可以只脱机数据文件。
完整恢复重要的数据文件
与上几乎相同,在mount模式下进行并且恢复级别必须是文件级别,因为ALTER TABLESPACE不可用
使用RMAN进行不完整恢复
可能数据库在过去的24小时内做了很多错误的修改又不能闪回。
为当前时间或SCN创建还原点:create restore point |name|;
为特定的SCN创建还原点:create restore point |name|;
希望使用Oracle的闪回技术,将数据库闪回到过去的某个时刻,还原点也是有用的。
Oracle把还原点至少保存到初始化参数 control_file_record_keep_time 指定的时间,如果想保存更长时间后面加 PRESERVE关键字。删除还原点使用drop
进行服务器管理的不完整恢复
1.确定还原的目标点
2.如果使用基于时间的不完整恢复,就在操作系统提示行上设置NLS变量
- NLS_LANG
- NLS_DATE_FORMAT
3.启动到MOUNT
4.通过RMAN运行块,使用SET UNTIL、RESTORE、RECOVER
5.可能要在READ ONLY模式下打开数据库,验证还原点就是需要的还原点。
6.使用RESETLOGS打开数据库
重要的是指定正确的NLS变量,RMAN才能正确解释所提供的日期字符串。如下:
export NLS_LANG = xxx
格式: NLS_LANG=language_territory.charset(语言_地域.字符集),每个成分控制了NLS子集的特性。
Language: 指定服务器消息的语言, 影响提示信息是中文还是英文
Territory: 指定服务器的日期和数字格式,
Charset: 指定字符集。
export NLS_DATE_FORMAT=XXX
NLS_DATE_FORMAT参数指定时间格式,属于Oracle数据库中的逻辑参数,当客户端查询数据库时,返回的数据格式被修改成NLS_DATE_FORMAT指定的格式,从而让人看到更加易懂的日期格式。它只是用来帮助客户端显示日期,而不会影响存储的值的格式。
正确的设置可以方便用户查看日期字段的值,防止日期格式混乱。我们可以使用ALTER SESSION或ALTER SYSTEM指令来设置NLS_DATE_FORMAT,例如:
ALTER SESSION SET NLS_DATE_FORMAT = ‘YYYY-MM-DD HH24:MI:SS’;
此外,还可以使用TO_CHAR()函数将其他格式的日期转换成指定格式,例如:
TO_CHAR(日期,’YYYY-MM-DD HH24:MI:SS’)
使用增量更新备份进行恢复
在备份恢复策略中使用映像副本,会显著减少还原事件。影响副本采用Oracle内部的数据文件格式,不需要从压缩的或未压缩的RMAN备份集中重新创建。
恢复spfile、控制文件和联机重做日志文件
首先要从自动备份中还原spfile,在spfile丢失时没有运行实例,就先设置数据库的DBID(在连接RMAN时可以




