首页 > 数据库 >NBU备份系统中oracle数据库自动恢复脚本

NBU备份系统中oracle数据库自动恢复脚本

时间:2023-04-18 17:03:13浏览次数:48  
标签:tmp log DBID 备份 NBU echo RECOVERLOG oracle 数据库

#!/bin/bash
#oracle 数据库恢复源客户端主机名
export client=dmzdb71
cd /usr/openv/netbackup/bin/
CONTROL=`./bplist -C ${client} -t 4 -R  / |awk -F: 'NR==1 { print $(NF) }' `;
export CONTROL;
#恢复库Oracle环境变量
export ORACLE_SID=moni
export ORACLE_HOME=/u01/app/oracle/product/11gR2/db
source ~/.bash_profile
DBID=2579332618
#数据库文件恢复目标路径
datafile="/oradata/test/moni/"
#查询到的redo重定向语句文件
rename=/tmp/renameredo.sql
#脚本时间
date=`date +%Y%m%d_%T`
RECOVERLOG=/home/oracle/${date}_restore.log
touch ${RECOVERLOG}
#执行脚本开始时间
starttime=`date +%Y%m%d_%T`
echo "恢复脚本开始运行:`date +%Y%m%d_%T`";
echo "Oracle自动恢复开始:$starttime" >> $RECOVERLOG
#将数据库启动到nomount状态
sqlplus / as sysdba >> $RECOVERLOG <<EOF
shutdown immediate;
startup nomount force;
exit;
EOF

#进入到Oracle RMAN中,开始恢复指定Oracle数据库
rman target / >> $RECOVERLOG << EOF
set dbid ${DBID};
run {
allocate channel c1 type 'sbt_tape' parms='ENV=(NB_ORA_CLIENT=${client})';
restore controlfile from '${CONTROL}';  
release channel c1;
}

##恢复数据文件
alter database mount;
crosscheck backupset;
run {
allocate channel c1 type 'sbt_tape' parms='ENV=(NB_ORA_CLIENT=${client})';
allocate channel c2 type 'sbt_tape' parms='ENV=(NB_ORA_CLIENT=${client})';
set newname for database to '${datafile}%b';
restore database;
switch datafile all;
recover database;
release channel c1;
release channel c2;
}
exit;
EOF
#判定源库恢复路径与目标端恢复路径是否一致
sqlplus / as sysdba >>$RECOVERLOG <<EOF
spool /tmp/redolist.log
set linesize 200 echo off heading off feedback off verify off
define y='${datafile}';
select 'alter database rename file '''||member||''' to '''||'&y'||substr(member, INSTR (member, '/', -1) +1 , length(member))||''';' from v\$logfile
where substr(member, 1,instr(member,'/',-1))!='&y';
spool off;
EOF

cat /tmp/redolist.log |  awk '/^alter database rename file/' > $rename  

#使用上面查到并过滤的redo rename语句重定向redo 日志文件
echo "exit;" >> $rename
sqlplus / as sysdba @${rename} >> $RECOVERLOG
sqlplus / as sysdba >> $RECOVERLOG <<EOF
recover database using backup controlfile until cancel;
AUTO
recover database using backup controlfile until cancel;
CANCEL
alter database open resetlogs;
select status from v\$instance;
exit;
EOF

#数据库自动恢复结束时间
endtime=`date +%Y%m%d_%T`
echo "恢复脚本运行结束时间为:`date +%Y%m%d_%T`";
#echo "恢复脚本运行结束时间为:`date +%Y%m%d_%T`"; >> /tmp/checkdatabase.log
echo "Oracle自动恢复结束:$endtime" >> $RECOVERLOG
##检查ORACLE数据库恢复完成后的状态
echo "检查ORACLE数据库恢复完成后的状态";
   (sqlplus / as sysdba << EOF
select status from v\$instance;
EOF
) | grep OPEN > /dev/null 2>&1

if [ $? -eq 0 ]
then
echo "当前时间为:`date +%Y%m%d_%T`" >> /tmp/checkdatabase.log
echo "当前数据库实例为${ORACLE_SID},DBID=${DBID},的数据库恢复成功,且数据库当前状态为OPEN"
echo "当前数据库实例为${ORACLE_SID},DBID=${DBID},的数据库恢复成功,且数据库当前状态为OPEN" >> /tmp/checkdatabase.log
else
echo "当前时间为:`date +%Y%m%d_%T`" >> /tmp/checkdatabase.log
echo "当前数据库实例为${ORACLE_SID},DBID=${DBID},的数据库恢复失败,详情请查看${RECOVERLOG}日志文件"
echo "当前数据库实例为${ORACLE_SID},DBID=${DBID},的数据库恢复失败,详情请查看${RECOVERLOG}日志文件" >> /tmp/checkdatabase.log
fi
echo "Oracle数据库恢复记录详情请查看 /tmp/checkdatabase.log 日志"
#cat /tmp/checkdatabase.log

标签:tmp,log,DBID,备份,NBU,echo,RECOVERLOG,oracle,数据库
From: https://www.cnblogs.com/Gatsbysun/p/17330248.html

相关文章

  • Oracle mos文档关于视图v$open_cursor中说法矛盾
     Oraclemos文档关于视图v$open_cursor中矛盾说法 HowtoMonitorandtuneOpenandCachedCursors(文档ID1430255.1)中指出:v$open_cursorshowscachedcursors,notcurrentlyopencursors,bysession.Ifyouarewonderinghowmanycursorsasessionhasopen......
  • Grafana监控OracleDB的完整过程
    Grafana监控OracleDB的完整过程背景两年前曾经写过一个进行Oracle监控的简单blog但是周天晚上尝试进行处理时发现很不完整了.很多数据获取不到.晚上又熬夜了好久进行处理.感觉还是需要总结一下,不然就忘记了获取镜像还是使用docker的方式来暴露Oracle的服务使用的......
  • Oracle审计篇 —— 审计数据表空间迁移及定期数据清理设置
    以下内容测试版本为oracle19c,其他版本可能会略有不同。最好是在创建数据库之后就进行设置,审计数据越多迁移会越麻烦,还可能影响业务。 编号需求项需求细节内容说明准备工作1检查是否打开审计showparameterauditaudit_trail为NONE则未开启2检查审计表现在所在表空间SELECTtable_......
  • ORACLE修改ORACLE_SID总结
    在某些特殊情况下,需要修改当前Oracle数据库实例中的ORACLE_SID。下面简单的总结一下如何修改$ORACLE_SID的步骤。默认情况下,INSTANCE_NAME参数和ORACLE_SID的值是相同的,但是它们也可以不同。另外,如果参数文件(pfile或spfile)中没有指定instance_name的值,那么它的值跟ORACLE_SID的值......
  • sqlserver 如何查看备份还原进度及历史备份信息
    有时需要给业务方备份还原数据库,如果库比较大,可能时不时会被问“怎么样啦?”,“还剩多少哇?”,如果看不到监控备份还原的进度就很悲催,答不上来...SQLServer主要有三种方法备份还原进度:利用SSMS备份还原,查看进度条(还原的不准)利用SQL的stats关键字指定每完成百分之几显示利用动态性能视......
  • Oracle审计篇——细粒度审计
    Oracle的标准审计默认级别是DB,这个级别不会记下具体sql语句是什么,如果需要记下需要开到DB,extended,但是改这个参数需要重启数据库生效,影响业务。SQL>showparameteraudit_trailNAMETYPEVALUE-------------------------------------......
  • 如何查看Oracle加密代码
    例如我们想看看dbms_pdb.cleanup_task这个函数的内容是什么,直接看会发现只能看到声明,代码是加密的可以把加密后的代码粘出来解密https://www.codecrete.net/UnwrapIt/解密后找到cleanup_task对应部分查了下PRAGMAINTERFACE(C,KPDBCLEANUPTASK);意思是调用C语言的内部代码,更深一层......
  • oracle 为sql寻找更好的执行计划并绑定
    这种方法只适合sql本身有更好的执行计划,不能绑定自己构造的执行计划(比如加hint),并且每次只能针对一个sql_id,如果慢sql未使用绑定变量导致有很多类似sql最好从索引、sql改写等方面优化。首先找到慢sql的sql_id,查看其各执行计划平均执行时间--可用v$active_session_history,dba_hist_a......
  • Oracle授予普通用户kill session权限
    开发A在测试环境操作时有时会遇到阻塞问题,需要找DBA帮忙查看阻塞会话及killsession,后来觉得太麻烦想要个kill会话的权限,查了下Oracle授予普通用户killsession权限的方法。1.授予altersystem权限官方文档查到,killsession需要ALTERSYSTEM权限,但是这个权限非常大,不能直接给GRANT......
  • kettle工具如何使用service_name连接oracle
    开发反馈使用kettle工具连pdb连不上,报错如下: Causedby:org.pentaho.di.core.exception.KettleDatabaseException:Errorconnectingtodatabase:(usingclassoracle.jdbc.driver.OracleDriver)Listenerrefusedtheconnectionwiththefollowingerror:ORA-12505,TNS:l......