目录
脚本思路:判断数据库状态为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