NBU备份恢复脚本

复制代码
#!/bin/bash

ORACLE_HOME=$(su - oracle -c 'echo $ORACLE_HOME')

rm -rf $ORACLE_HOME/dbs/arch*dbf

su - oracle -c "ln -s /usr/openv/netbackup/bin/libobk.so64 $ORACLE_HOME/lib/libobk.so"
su - oracle -c "ln -s /usr/openv/netbackup/bin/libobk.so64 $ORACLE_HOME/lib/libobk.so64"

sed -i "/ORACLE_SID/d"  /home/oracle/.bash_profile && echo "export ORACLE_SID=$ORACLE_SID" >> /home/oracle/.bash_profile

mkdir -p /u01/app/oracle/admin/$ORACLE_SID/adump
mkdir -p /u01/app/oracle/$ORACLE_SID

chown -R oracle:oinstall /u01/app/oracle/admin/
chown oracle:oinstall /u01/app/oracle/$ORACLE_SID

echo "" > /home/oracle/recover.log
chown oracle:oinstall /home/oracle/recover.log
echo "生成参数文件">> /home/oracle/recover.log
rm -rf $ORACLE_HOME/dbs/init$ORACLE_SID.ora
rm -rf $ORACLE_HOME/dbs/spfile$ORACLE_SID.ora

cat > $ORACLE_HOME/dbs/init$ORACLE_SID.ora << EOF
*.audit_file_dest='/u01/app/oracle/admin/$ORACLE_SID/adump'
*.audit_trail='NONE'
*.compatible='11.2.0.4.0'
*.control_files='/u01/app/oracle/$ORACLE_SID/control01.ctl'
*.db_block_size=8192
*.db_name='$ORACLE_SID'
*.memory_target=0
*.pga_aggregate_target=1g
*.sga_target=2g
*.remote_login_passwordfile='EXCLUSIVE'
*.undo_tablespace='UNDOTBS1'
EOF

chown oracle:oinstall $ORACLE_HOME/dbs/init$ORACLE_SID.ora
echo "关闭数据库">> /home/oracle/recover.log
ps -ef|grep ora_smon|grep -v 'grep'|awk '{print $2}'|xargs kill -9
sleep 8

echo "数据库mount">> /home/oracle/recover.log
su - oracle -c "source /home/oracle/.bash_profile; sqlplus / as sysdba << EOF
startup nomount
EOF" >> /home/oracle/recover.log


/usr/openv/netbackup/bin/bplist -C client_db -t 4 -R -l / | grep -a 'cntrl' > /tmp/cntrl
ctl_file=$(cat /tmp/cntrl |head -n 1|awk '{print $8}'|sed 's/\///')

echo "开始恢复,请等候!!!">> /home/oracle/recover.log
su - oracle -c "source /home/oracle/.bash_profile; rman target / log /home/oracle/recover.log append << EOF
run {
allocate channel t1 DEVICE TYPE 'SBT_TAPE';
SEND 'NB_ORA_SERV=nbumaster,NB_ORA_CLIENT=client_db';
restore controlfile from '$ctl_file';
release channel t1;
}

sql 'alter database mount';

run{
set until time \"to_date('2023-01-01 00:00:00','yyyy-mm-dd hh24:mi:ss')\";
allocate channel t2 DEVICE TYPE 'SBT_TAPE';
allocate channel t3 DEVICE TYPE 'SBT_TAPE';
SEND 'NB_ORA_SERV=nbumaster,NB_ORA_CLIENT=client_db';
restore database;
recover database;
release channel t2;
release channel t3;
}
EOF"

su - oracle -c "source /home/oracle/.bash_profile; sqlplus / as sysdba << EOF

alter database set standby to maximize performance;
alter database open resetlogs;

EOF" >> /home/oracle/recover.log

echo "恢复完成,数据库已打开!!!">> /home/oracle/recover.log

#curl
--connect-timeout 3 -H "Content-Type: application/json" -X POST --data "{\"mes\":\"$ORACLE_SID备份恢复已完成,请查看!\"}" http://xx.xx.12.96:80/interface/getkeepalivedinfo
复制代码

变量为:client_db和2023-01-01 00:00:00(恢复时间点),调整为实际的nbu客户端名及恢复时间点

SHELL脚本结合数据库平台实现WEB备份恢复

 

posted @   阿西吧li  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示