windows-oracle判断数据库是否为open状态进行rman备份

文章描述了一个Oracle数据库脚本,该脚本根据数据库状态(open)自动执行备份操作,包括全量备份、增量备份和控制文件/SPFILE备份,避免在非开放状态下进行备份。
摘要由CSDN通过智能技术生成

目录

4个文件内容

ifopen.txt内容:

ifopen_sql.txt内容:

rmanbck_2.bat内容:

rmanscipt2.txt内容:

rmanback_2.bat脚本解释:


脚本思路:判断数据库状态为open进行备份,否则不备份也不进行任何操作

4个文件内容

ifopen.txt内容:

空文档,后面解释

ifopen_sql.txt内容:

connect / as sysdba
set pagesize 0 feedback off verify off heading off echo off
select status from v$instance;
exit;

rmanbck_2.bat内容:

@echo off

sqlplus -s /nolog  @C:\oracle\ifopen_sql.txt >  C:\oracle\ifopen.txt


for /f "delims=" %%i in (C:\oracle\ifopen.txt) do (
    if /i "%%i"=="open" (
        goto break_loop
    )
     else(
       goto break_loop2 
          )
)

:break_loop
set nottime=%date:~0,4%-%date:~5,2%-%date:~8,2%-%time:~0,2%_%time:~3,2%_%time:~6,2%
del /q /s "C:\rmanbak\rman_lv0_2\*"
rman target / cmdfile=C:\oracle\rmanscipt2.txt log=C:\rmanbak\baklog\%nottime%_rman.log append
exit

:break_loop2
echo nonononono
exit

rmanscipt2.txt内容:

run {
allocate channel d1 type disk;
crosscheck backup;                         
delete noprompt expired backup;            
backup as compressed backupset incremental level 0 database format 'C:\rmanbak\rman_lv0_2\Lv0_%d_%T_%U.bak';  
sql 'alter system archive log current';    
crosscheck archivelog all;                 
delete noprompt expired archivelog all;    
backup archivelog all not backed up 1 times format 'C:\rmanbak\rman_lv0_2\Arc_%d_%T_%U.bak';  
delete noprompt archivelog all completed before 'sysdate-10'; 
backup current controlfile format 'C:\rmanbak\rman_lv0_2\Lv0_%d_%T_%U_control.bak';                      
backup spfile format 'C:\rmanbak\rman_lv0_2\Lv0_%d_%T_%U_primary_spfile.bak';   
crosscheck backup;  
release channel d1;
}

rmanback_2.bat脚本解释:

登录数据库,把  ifopen_sql.txt  文件上的sql查询语句(数据库状态查询语句)返回结果输出到  文件 ifopen.txt

sqlplus -s /nolog  @C:\oracle\ifopen_sql.txt >  ifopen.txt

利用 ifopen.txt 刚刚获取的结果做判断

for /f "delims=" %%i in (C:\oracle\ifopen.txt) do (    # 获取ifopen.txt文件上的值
    if /i "%%i"=="open" (       # 如果值为OPEN
        goto break_loop         # 跳转break_loop标签
    )
     else(
       goto break_loop2         # 如果值不为OPEN,跳转 break_loop2标签
          )
)

:break_loop                     # 备份脚本
set nottime=%date:~0,4%-%date:~5,2%-%date:~8,2%-%time:~0,2%_%time:~3,2%_%time:~6,2%
del /q /s "C:\rmanbak\rman_lv0_2\*"
rman target / cmdfile=C:\oracle\rmanscipt2.txt log=C:\rmanbak\baklog\%nottime%_rman.log append      # rmanscipt2.txt文件为rman脚本
exit


:break_loop2                    # 退出
echo nonononono
exit

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值