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:00"
export restore_date="10/31/2017 23:00:00"
export CLIENT_NAME="vatsmanage.db.crb"
export ORACLE_SID=vats
export ORACLE_HOME=/oracle/product/database/11.2.0
export old_log_path="/db/vats/oradata/vats/"
export new_log_path="/db/oradata/vats/"

##no need change config
export PATH=$PATH:$ORACLE_HOME/bin
export controlfile=`/usr/openv/netbackup/bin/bplist -C $CLIENT_NAME -S pnbumaster -l -t 4 -s $start_date -e $end_date -R / | grep -a "cntrl" |awk ‘{print $8}‘| head -1`

export oracle_user=oracle1

##revert datafile * to new location in target in /tmp/datafile_$ORACLE_SID.sql

su oracle1 -c "sqlplus / as sysdba "<<db
set escape on
spool /tmp/datafile_$ORACLE_SID.sql
set linesize 999 linesize 999 head off feedback off
select ‘set newname for datafile ‘||FILE#||‘ to ‘||‘‘‘‘||name||‘‘‘;‘ from v$datafile;
spool off
db

##su oracle1 -c "sqlplus / as sysdba "<<db1
##@/tmp/datafile_$ORACLE_SID.sql
##db1

###### begin to restore controlfile

su oracle1 -c "sqlplus / as sysdba "<<eof0
shutdown immediate;
startup nomount;
eof0

su oracle1 -c "rman target / catalog rman11g/[email protected]" <<eof1
run {
allocate channel c1 type ‘sbt_tape‘;
send ‘NB_ORA_SERV=pnbumaster,NB_ORA_CLIENT=$CLIENT_NAME‘;
restore controlfile from ‘$controlfile‘;
release channel c1;
}
eof1

su oracle1 -c "sqlplus / as sysdba "<<eof2
select status from v\$instance;
alter database mount;
eof2

####produce restore and recover command
echo "run { " > /tmp/restore_`date ‘+%y%m%d‘`_$ORACLE_SID.sql
echo "allocate channel c1 type ‘sbt_tape‘;" >> /tmp/restore_`date ‘+%y%m%d‘`_$ORACLE_SID.sql
echo "allocate channel c2 type ‘sbt_tape‘;" >> /tmp/restore_`date ‘+%y%m%d‘`_$ORACLE_SID.sql
echo "allocate channel c3 type ‘sbt_tape‘;" >> /tmp/restore_`date ‘+%y%m%d‘`_$ORACLE_SID.sql
eche ‘sbt_tape‘;" >> /tmp/restore_`date ‘+%y%m%d‘`_$ORACLE_SID.sql
echo "send ‘NB_ORA_SERV=pnbumaster,NB_ORA_CLIENT=$CLIENT_NAME‘;">> /tmp/restore_`date ‘+%y%m%d‘`_$ORACLE_SID.sql
cat /tmp/datafile_$ORACLE_SID.sql >> /tmp/restore_`date ‘+%y%m%d‘`_$ORACLE_SID.sql
echo "set until time \"to_date(‘$restore_date‘,‘mm yy hh24:mi:ss‘)\";">> /tmp/restore_`date ‘+%y%m%d‘`_$ORACLE_SID.sql
echo "restore database;" >> /tmp/restore_`date ‘+%y%m%d‘`_$ORACLE_SID.sql
echo "switch datafile all;" >> /tmp/restore_`date ‘+%y%m%d‘`_$ORACLE_SID.sql
echo "recover database;">> /tmp/restore_`date ‘+%y%m%d‘`_$ORACLE_SID.sql
echo "release channel c1;" >> /tmp/restore_`date ‘+%y%m%d‘`_$ORACLE_SID.sql
echo "release channel c2;" >> /tmp/restore_`date ‘+%y%m%d‘`_$ORACLE_SID.sql
echo "release channel c3;" >> /tmp/restore_`date ‘+%y%m%d‘`_$ORACLE_SID.sql
echo "release channel c4;" >> /tmp/restore_`date ‘+%y%m%d‘`_$ORACLE_SID.sql
echo "}" >> /tmp/restore_`date ‘+%y%m%d‘`_$ORACLE_SID.sql

chmod 777 /tmp/restore_`date ‘+%y%m%d‘`_$ORACLE_SID.sql

su oracle1 -c "rman target / catalog rman11g/[email protected] cmdfile=/tmp/restore_`date ‘+%y%m%d‘`_$ORACLE_SID.sql"

##### mount db and change logfile to new location in target

su oracle1 -c "sqlplus / as sysdba "<<eof5

set linesize 999 linesize 999 head off feedback off
spool /tmp/logfile_$ORACLE_SID.sql
select ‘alter database rename file ‘||‘‘‘‘||member||‘‘‘‘||‘ to ‘||chr(39)||replace(member,‘$old_log_path‘,‘$new_log_path‘)||‘‘‘;‘ from v\$logfile;
spool off
eof5

su oracle1 -c "sqlplus / as sysdba "<<eof6
@/tmp/logfile_$ORACLE_SID.sql
eof6

####open resetlogs ,if meet ora-00392 ,it means it is for to-time reovery,need clear the log .
su oracle1 -c "sqlplus / as sysdba "<<eof7
alter database open resetlogs;
eof7

### scripts 2
export ORALCE_SID=vats
export ORACLE_HOME=/db/app/product/database/11g

export source_db_home=/oracle/product/database/11.2.0 s
export target_db_home=/db/app/product/database/11g s

export source_db_file_loc=/db/oradata/vats
export target_db_file_loc=/db/oradata/vats

export source_archive_log=/db/oradata/vats/archivelog
export target_archive_log=/db/oradata/vats/archivelog

export source_ip=25.10.0.197
export target_ip=10.241.96.37

export target_passwd="123456"
export oracle_user=oracle
export PORT=15025

### it will prompt passwd
##

scp [email protected]$source_ip:$source_db_home/*$ORALCE_SID* $target_db_home

### it will prompt passwd
###scp [email protected]$source_ip:$source_db_file_loc/*.* $target_db_file_loc

#### use expect to send the datafile use scp
#expect -c "
# spawn scp [email protected]$source_ip:$source_db_file_loc/*.* $target_db_file_loc
# expect {
# \"*assword\" {set timeout 300; send \"$target_passwd\r\"; exp_continue;}
# \"yes/no\" {send \"yes\r\";}
# }
#expect eof"

###use expect to send the datafile use sftp becuase sftp 可以容忍更多的网络延时
#expect -c "
# spawn

sftp [email protected]$source_ip:$source_db_file_loc/suntx02.dbf $target_db_file_loc
# expect {
# \"*assword\" {set timeout 300; send \"$target_passwd\r\"; exp_continue;}
# \"yes/no\" {send \"yes\r\";}
# }
#expect eof"

####如果 send \"quit\r\"; 加入最后,那么sftp 会在遇到网络中断,异常退出
cd $target_db_file_loc
expect -c "
spawn sftp [email protected]$source_ip:$source_db_file_loc
expect {
\"*assword\" {set timeout -1; send \"$target_passwd\r\"; exp_continue;}
\"sftp\" {send \"get *.dbf\r\

";}
}
expect eof"
exit

su $oracle_user -c "sqlplus / as sysdba "<<eof2
select status from v\$instance;
alter database mount;
alter database open read only;
shutdown immediate;
startup;
archive log list;
alter system set local_listener=‘(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=$target_ip)(PORT=$PORT)))‘ scope=both;
shutdown immediate;
startup;
eof2

su $oracle_user -c "echo "SQLNET.EXPIRE_TIME=10" >> $ORACLE_HOME/network/admin/sqlnet.ora"

su $oracle_user -c "echo "$ORACLE_SID =" >> $ORACLE_HOME/network/admin/listener.ora"
su $oracle_user -c "echo "(DESCRIPTION_LIST =" >> $ORACLE_HOME/network/admin/listener.ora"
su $oracle_user -c "echo "(DESCRIPTION =">> $ORACLE_HOME/network/admin/listener.ora"
su $oracle_user -c "echo "(ADDRESS_LIST =">> $ORACLE_HOME/network/admin/listener.ora"
su $oracle_user -c "echo "(ADDRESS = (PROTOCOL = TCP)(HOST = $target_ip)(PORT = $PORT))" >> $ORACLE_HOME/network/admin/listener.ora "
su $oracle_user -c "echo ")" >> $ORACLE_H

EXPIRE_TIME=10" >> cd $ORACLE_HOME/network/admin/sqlnet.ora "

--
--scp root

#!/usr/bin/expect
#spawn scp [email protected]$source_ip:$source_db_home/*$db_name* $target_db_home
#set timeout 20
#expect "$target_passwd"
#exec sleep 2
#send "password\r"
#interact

OME/network/admin/listener.ora "
su $oracle_user -c "echo ")" >> $ORACLE_HOME/network/admin/listener.ora "
su $oracle_user -c "echo ")" >> $ORACLE_HOME/network/admin/listener.ora "

su $oracle_user -c "lsnrctl start $ORACLE_SID"
su $oracle_user -c "lsnrctl status $ORACLE_SID"

su $oracle_user -c "sqlplus / as sysdba "<<eof3
select status from v\$instance;
alter system register;
eof3

su $oracle_user -c "lsnrctl status $ORACLE_SID"

###su $oracle_user -c "echo "SQLNET.

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

2个rman自动恢复的脚本的相关文章

SCOM 2012 R2_自动恢复服务脚本

最近做了几个SCOM的项目,也碰少不少情况,以后会陆续将一些项目的部署实施发布出来.今天就简单介绍如何在SCOM服务器监控Windows服务的同时,当SCOM检测到Agent客户端的服务Down掉的时候,Agent会自动恢复服务,而减少故障的滞后性,实现IT管理的自动化的过程. 1. 在SCOM控制面板,点击"创作-管理包对象-监视器": 2. 右击监视器,选择"新建监视器-单元监视器": 3. 在监视器类型,点击"windows服务-基本服务监控器&qu

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 自动恢复

在日常工作中,有时会需要进行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 DB 使用RMAN执行恢复

? 在丢失关键或非关键数据文件后执行完全恢复 ? 使用增量更新的备份进行恢复 ? 切换到映像副本进行快速恢复 ? 将数据库还原到新主机上 ? 使用备份控制文件进行恢复 使用RMAN RESTORE和RECOVER命令 ? RESTORE命令:从备份中还原数据库文件 ? RECOVER命令:通过应用增量备份和重做日志文件中记录的更改来恢复已还原文件 RMAN> SQL 'ALTER TABLESPACE inv_tbs OFFLINE IMMEDIATE'; RMAN> RESTORE TABL

创建RMAN备份 恢复目录数据库

这是前段时间给客户做的RMAN备份策略,今天有时间整理出来,希望对大家有些帮助,如有不对的地方欢迎大家给予指点,谢谢!   创建成恢复目录数据库 如果不是在本地配置RMAN 恢复目录, 在一台WINDOW2000电脑上安装ORACLE数据库,最好保证数据库版本与目标数据库的版本想同. 建立RMAN 数据库用户及表空间: RECOVER CATALOG 表空间(cattbs):1G系统表空间:       100MUNDO表空间:     100M临时表空间(TEMP):        100M 

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

使用rman异地恢复数据库试验(RAC恢复到单实例数据库)

前言 rman在实际应用中用到的不多,很多时候一个项目开始设置好备份策略,后续基本上都用不到了,除非数据库出现异常,可以说,rman是一个不常用但是却非常重要的技能,但是又非常容易忘记.为了不在关键时刻掉链子,做了一个rman异地恢复数据库的试验. 试验环境介绍 操作系统 数据库版本 RAC? 源系统 CentOS 6.3 x64 11.2.0.4 2节点 目标系统 RedHat 6.4 x64 11.2.0.4 单节点 Rman备份: 0级数据库全备 操作步骤 将rman备份文件从源库上面拷贝

应用maven自动部署的脚本

@(编程) 最近写了一个自动部署的脚本,可以一键部署到测试服务器或者生产服务器上,包括一个函数脚本和一个调用脚本,比较简单,记录如下. 特点如下: 部署前自动备份 可以部署tomcat项目和java项目 支持参数,可以部署测试环境和生产环境 function.sh #!/bin/bash ##author:zch ##date:20171116 host=192.168.163.50 if [ "$1"x = "online"x ]; then host=111.1

Oracle 11g RAC to RAC ADG搭建(一)采用rman备份恢复方式

(一)基础环境   主库 备库 操作系统 RedHat6.7 RedHat6.7 服务器名称 primarydb1primarydb2 standbydb1standbydb2 IP地址规划 192.168.10.31    primarydb1192.168.10.32    primarydb2192.168.10.33    primarydb1-vip192.168.10.34    primarydb2-vip192.168.10.30    primarydb-scan 10.10.