Oracle RMAN 自动恢复

在日常工作中,有时会需要进行Oracle数据库恢复,比如搭建测试环境、查找历史数据、恢复测试等.

可以通过计划任务或nohup等方式来执行恢复脚本从而提高整个操作的效率,特此记录.

这里使用的测试环境如下:

OS Platform Red Hat Enterprise Linux Server release 5.4 (Tikanga)- 64bit
Database Oracle Database 11g Enterprise Edition Release 11.2.0.1.0- 64bit

1. 在需要恢复数据库的机子(本文中为testsvr01)上安装Oracle软件

2. 将Oracle数据库的RMAN备份文件及相应的归档日志传输到目标机子(testsvr01),

并确保oracle用户有权限访问,可以通过 chown-R oracle:oinstall /backup_dir命令

改变备份文件的属主

3. 在$ORACLE_HOME/dbs目录下编辑参数文件pfile以便于启动Oracle实例, 本文的pfile为initmydb.ora

可以在源库中通过create pfile 命令来创建pfile, 然后传到目标机子,修改相应的参数值

在pfile中, 注意以下几个参数的值


*.control_files=‘/data1/oradata/mydb/control01.ctl‘,‘/data1/oradata/mydb/control02.ctl‘,‘/data1/oradata/mydb/control03.ctl‘

*.log_archive_dest_1=‘LOCATION=/data3/rman_bak/mydb/Arc‘

*.log_archive_format=‘ARC%s_%t_%r.dbf‘

*.db_name=‘mydb‘

*.undo_tablespace=‘UNDOTBS1‘

*.undo_management=auto

*.job_queue_processes=0

4. 确保pfile中使用到的目录已经存在, 并且属主为oracle

5. 在/home/oracle目录下创建auto_recovery.sh脚本, 并赋予可执行权限

auto_recovery.sh 内容示例:


[[email protected] testsvr01 oracle]# cat auto_recovery.sh

#!/bin/bash

source /home/oracle/.bash_profile

SHELL_NAME=$(basename $0)

if [ $# -ne 1 ]; then

echo -e "\n Usage:  ${SHELL_NAME} ORACLE_SID \n"

exit

fi

ORACLE_SID=$1

SCRIPT_PATH=/home/oracle

RMAN_SQL=${SCRIPT_PATH}/${ORACLE_SID}_rman.sql

RMAN_LOG=${SCRIPT_PATH}/${ORACLE_SID}_rman.log

SQLPLUS_SQL=${SCRIPT_PATH}/${ORACLE_SID}_sqlplus.sql

SQLPLUS_LOG=${SCRIPT_PATH}/${ORACLE_SID}_sqlplus.log

CONTROL_SQL=${SCRIPT_PATH}/${ORACLE_SID}_control.sql

if [ ! -s ${RMAN_SQL} ]; then

echo "${RMAN_SQL}  doesn‘t exist!"

exit

elif [ ! -s ${SQLPLUS_SQL} ]; then

echo "${SQLPLUS_SQL}  doesn‘t exist!"

exit

elif [ ! -s ${CONTROL_SQL} ]; then

echo "${CONTROL_SQL}  doesn‘t exist!"

exit

else

ls -lrth  ${SCRIPT_PATH}/${ORACLE_SID}*.sql

fi

su - oracle <<EOF

source /home/oracle/.bash_profile

export ORACLE_SID=$1

export ORACLE_HOME=/u01/app/oracle/11.2.0/db_1

export PATH=$PATH:$ORACLE_HOME/bin

echo -e "RMAN Part Begin... \n"

echo `date +‘%Y%m%d %H:%M:%S‘`

rman target / log=‘${RMAN_LOG}‘ cmdfile=${RMAN_SQL}

echo `date +‘%Y%m%d %H:%M:%S‘`

echo -e "RMAN Parat End. \n"

echo -e "SQLPLUS Part Begin... \n"

echo `date +‘%Y%m%d %H:%M:%S‘`

sqlplus -s / as sysdba @${SQLPLUS_SQL} $ORACLE_SID >  ${SQLPLUS_LOG}

echo `date +‘%Y%m%d %H:%M:%S‘`

echo -e "SQLPLUS Part End. \n"

EOF

6. 在/home/oracle目录下编辑RMAN脚本${ORACLE_SID}_rman.sql,本文为mydb_rman.sql

mydb_rman.sql内容示例:


run{

startup nomount;

restore controlfile from ‘/data3/rman_bak/mydb/datafile/ MYDB_20170823_46007_1_CONTROL‘;

alter database mount;

crosscheck backup;

delete noprompt expired backup;

catalog start with ‘/data3/rman_bak/mydb/‘ noprompt;

allocate channel c1 device type disk;

allocate channel c2 device type disk;

set newname for datafile 1   to  ‘/data1/oradata/mydb/datafile/system.dbf‘;

set newname for datafile 2   to  ‘/data1/oradata/mydb/datafile/sysaux.dbf‘;

set newname for datafile 3   to  ‘/data1/oradata/mydb/datafile/undotbs1.dbf‘;

set newname for datafile 4   to  ‘/data1/oradata/mydb/datafile/users.dbf‘;

restore datafile 1;

restore datafile 2;

restore datafile 3;

restore datafile 4;

switch datafile all;

release channel c1;

release channel c2;

shutdown immediate;

}

7. 在/home/oracle目录下编辑${ORACLE_SID}_sqlplus.sql脚本, 本文为mydb_sqlplus.sql

mydb_sqlplus.sql内容示例:


[[email protected] testsvr01 oracle]# cat mydb_sqlplus.sql

startup nomount;

@/home/oracle/&1._control.sql

set autorecovery on;

recover database using backup controlfile until cancel;

set autorecovery off;

alter database open resetlogs;

alter tablespace TEMP add tempfile ‘/data1/oradata/mydb/datafile/temp01.dbf‘  size 1G autoextend off;

shutdown immediate;

startup;

alter session set nls_date_format=‘yyyy-mm-dd hh24:mi:ss‘;

select instance_name,status,startup_time from v$instance;

select name,open_mode,log_mode,sysdate from v$database;

shutdown immediate;

exit;

8. 在/home/oracle目录下编辑用于创建控制文件的脚本${ORACLE_SID}_control.sql,本文为mydb_control.sql

mydb_control.sql内容示例:


[[email protected] oracle]# cat mydb_control.sql

CREATE CONTROLFILE REUSE DATABASE "MYDB" RESETLOGS  noARCHIVELOG

MAXLOGFILES 20

MAXLOGMEMBERS 5

MAXDATAFILES 1000

MAXINSTANCES 8

MAXLOGHISTORY 4927

LOGFILE

GROUP 1 (

‘/data1/oradata/mydb/onlinelog/REDO1.log‘

) SIZE 400M BLOCKSIZE 512,

GROUP 2 (

‘/data1/oradata/mydb/onlinelog/REDO2.log‘

) SIZE 400M BLOCKSIZE 512,

GROUP 3 (

‘/data1/oradata/mydb/onlinelog/REDO3.log‘

) SIZE 400M BLOCKSIZE 512

-- STANDBY LOGFILE

DATAFILE

‘/data1/oradata/mydb/datafile/system.dbf‘,

‘/data1/oradata/mydb/datafile/sysaux.dbf‘,

‘/data1/oradata/mydb/datafile/users.dbf‘,

‘/data1/oradata/mydb/datafile/undotbs1.dbf‘

CHARACTER SET WE8MSWIN1252

;

9. 通过crontab或nohup在后台执行auto_recovery.sh脚本

nohup /home/oracle/auto_recovery.sh mydb &

注:

本文只是恢复了部分数据文件, 所以需要重建控制文件, 如果是全库恢复,可以不用重建控制文件,将本文脚本进行适当的修改即可.

要点梳理

一、在recover时, 如何自动应用归档日志

根据Oracle官方文档的介绍, 使用sqlplus实现自动recover有两种方法:

1. 使用set autorecovery on命令, 即本文中使用的方法

2. 在recover命令中使用automatic选项


STARTUP MOUNT

RECOVER AUTOMATIC DATABASE

ALTER DATABASE OPEN;

二、归档日志的路径

一般来讲, recover时所需要应用的归档日志默认存在于LOG_ARCHIVE_DEST_nLOG_ARCHIVE_FORMAT这两个初始化参数所定义的路径及文件名.如果相应的归档日志存在,Oracle可以自动应用它们.

如果目标库与源库中的路径不一样, 可以通过以下方法来修改LOG_ARCHIVE_DEST_n及LOG_ARCHIVE_FORMAT这两个参数的值

1. 修改pfile中对应参数的值

2. 使用alter system 命令修改


alter system set LOG_ARCHIVE_DEST_1 = ‘LOCATION =  /oracle/oradata/trgt/arch/‘;

alter system set LOG_ARCHIVE_FORMAT =’ arcr_%t_%s.arc’;

如果不想修改以上两个参数的值, 也可以通过以下方法来指定recover所需要用到的归档日志的路径

1. 设定LOGSOURCE参数


set logsource ‘/tmp’

RECOVER AUTOMATIC TABLESPACE users

2. 在recover命令中使用FROM选项


RECOVER AUTOMATIC TABLESPACE users FROM "/tmp"

--End.--

时间: 2024-10-06 15:14:59

Oracle RMAN 自动恢复的相关文章

关于Oracle RMAN 自动恢复

在日常工作中,有时会需要进行Oracle数据库恢复,比如搭建测试环境.查找历史数据.恢复测试等.可以通过计划任务或nohup等方式来执行恢复脚本从而提高整个操作的效率,特此记录. 这里使用的测试环境如下: OS Platform Red Hat Enterprise Linux Server release 5.4 (Tikanga)- 64bit Database Oracle Database 11g Enterprise Edition Release 11.2.0.1.0- 64bit

Oracle RMAN备份恢复1-基础篇_超越OCP精通Oracle视频教程培训17

oracle视频教程目标 Oracle视频教程,风哥本套oracle教程培训学习oracle数据库RMAN备份恢复基础,如rman作用与体系架构,nocatalog和catalog介绍与catalog配置,详解rman的使用,详解rman常用的命令list,report, backup,configure,set,crosscheck,validate,change,delete,restore,recover,switch,blockrecover,convert等使用. 适用人群 IT相关从

Oracle RMAN备份恢复2-案例篇_超越OCP精通Oracle视频教程培训18

oracle视频教程目标 Oracle视频教程,风哥本套oracle教程培训学习oracle数据库如何设计一个TB级数据库的RMAN备份策略,RMAN备份与恢复案例-丢失所有文件,丢失单个数据文件,丢失整个数据和system表空间,丢失控制文件和参数文件,存储损坏数据丢失,丢失REDO重做日志文件,基于时间点,scn,cancel,备份控制文件的不完成恢复案例. 适用人群 IT相关从业人员.Oracle数据库技术人员.想加工资的.想升职的都可以. 视频在线学习地址: http://edu.51c

Oracle RMAN备份恢复3-高级篇_超越OCP精通Oracle视频课程培训19

oracle视频教程目标 Oracle视频教程,风哥本套oracle教程培训学习oracle数据库关于RMAN内存缓冲与块跟踪,DBMS_BACKUP_RESTORE,使用RMAN BlockRecover恢复坏块,RMAN Recovery Advisor 案例,RMAN备份压缩技术,RMAN增量备份恢复,RMAN备份加密,RMAN克隆数据库,生产环境RMAN异机恢复的几种经典场景案例 . 适用人群 IT相关从业人员.Oracle数据库技术人员.想加工资的.想升职的都可以. 视频在线学习地址:

Oracle RMAN备份恢复指导书

目 录 1 目的与范围... 1 2 术语和定义... 1 3 角色和职责... 2 4 使用RMAN备份数据库... 2 4.1.1 检查数据库模式... 2 4.1.2 连接到target数据库... 3 4.1.3 查看备份信息... 3 4.1.4 备份数据库... 5 4.1.5 备份数据文件... 6 4.1.6 备份表空间... 6 4.1.7 备份控制文件... 6 4.1.8 备份归档日志文件... 7 4.1.9 备份闪回区... 8 4.1.10 增量备份... 8 4.2

第22章 oracle RMAN备份恢复

2015-10-24 目录 参考资料 [1] 林树泽.Oracle 11g R2 DBA操作指南[M].北京:清华大学出版社,2013 [2] Oracle备份与恢复介绍(物理备份与逻辑备份) [3] Oracle备份与恢复案例 [4] ORACLE 备份与恢复 [5] Oracle数据库的备份方法 [6] oracle之rman入门指南 [7] ORACLE RMAN备份及还原 [8] rman备份恢复实例(经典) [9] RMAN 备份详解 [10] RMAN 还原与恢复 [11] RMAN

Oracle rman 各种恢复

--恢复整个数据库run {shutdown immediate;startup mount;restore database;recover database;alter database open;} --恢复表空间usersrun {sql 'alter tablespace users offline';restore tablespace users;recover tablespace users;sql 'alter tablespace data online';} --恢复数据

2个rman自动恢复的脚本

### scripts 1--the scirpt is used for restore db from vcs to a point to time recovery--and the target datafile and logfile is different from source ###### config env export start_date="10/31/2017 06:00:00"export end_date="11/01/2017 00:00:0

Oracle数据库备份恢复高级培训视频课程(案例、实战、深入、全面)

套餐介绍: 介绍:风哥Oracle数据库备份恢复培训(案例.实战.深入.全面),DBA初级到骨灰级的脱变. 内容:风哥Oracle数据库备份恢复及存储容灾基础,控制文件与参数文件详解,存储结构深入分析,Oracle底层技术,数据块解析,BBED深入解析,重做日志Redo深入解析,Undo回滚段深入解析,用户管理模式的备份恢复,RMAN备份恢复,Flashback闪回恢复管理,LogMiner日志挖掘技术,SQL_Loader,Oracle逻辑备份恢复迁移之exp/imp和expdp/impdp.