最近因为系统维护人员对oracle 系统不是很熟悉,特别是对standby 数据库是否正常启动不是很清楚。现在特别制作了相关的启动standby数据库的脚本,如果启动过程中有错误将会提示。如果在删除日志的时候发现因为standby数据没有正常启动导致日志无法应用,不幸日志又删除了,这样standby必须重做。为了对这些不是很负责任的人提供一些保险。现在特制定了如下脚本:
1.删除归档日志脚本:
a.del_arc.bat 内容:
rem 本程序由radkitty数据库工程师完善 rem 本程序是基于为了预防因为检查的疏漏而导致归档日志的被删除,导致日志无法正确的在备用库上应用的目的编写的 rem 本程序存放的路径说明:d:/del_arc 文件夹下,oracle归档日志数据存放在:d:/ocl9_arc,请根据实际进行修改。 rem 本程序的文件组成:del_arc.bat,delete.log,find.exe,del_arc.sql,默认是保存3天的数据; rem 如果要修改保留日志的天数:请修改del_arc.sql中的trunc(sysdate)-3和本脚本的:delefile 标签中的/d -3数字 rem #################################################################################################### rem # 本程序的工作原理: # rem #1.先执行del_arc.sql的语句,将生成delete.log; # rem #2.程序查找相关字段,如果找到则说明应用日志没有问题,将执行删除文件的语句; # rem #3.如果找不到相应的关键字,则说明备用库有部分日志没有应用,并及时显示错误提示; # rem #4.如果该脚本运行在备用库中,将会永远执行删除归档日志的操作。 # rem # 脚本编写日期:11:58 2008-06-12 # rem #################################################################################################### @echo off color 1f Title=---oracle standby 归档日志删除程序V1.0--- cls sqlplus @d:/del_arc/del_arc.sql type d:/del_arc/delete.log|c:/windows/system32/find "Be successful Apply." if "%ERRORLEVEL%"=="0" goto delefile cls color 1f echo. echo ######################################################### echo # 错 误 # echo # # echo # 有未应用的归档日志,请检查备用库 # echo # 是否正常启动,确认成功应用后,可以重新运行本程序。 # echo # # echo ######################################################### echo 按任意键退出…… pause >nul goto exit :delefile forfiles /p D:/ocl9_arc /m *.DBF /d -3 /c "cmd /c del @file" goto exit :exit exit
b.调用的del_arc.sql 代码:
/ as sysdba set echo off set feedback off set heading off spool d:/del_arc/delete.log select decode(count(*),0,'Be successful Apply.','Including No Applied data.') from v$archived_log where DEST_ID=(select DEST_ID from V$ARCHIVE_DEST where TARGET='PRIMARY' and STATUS='VALID' and schedule='ACTIVE') and SEQUENCE#=(select LOG_SEQUENCE from V$ARCHIVE_DEST where TARGET='STANDBY' and schedule='ACTIVE') and trunc(COMPLETION_TIME)<=trunc(sysdate)-3; spool off exit
2.standby备用数据库自动启动脚本
a.启动standbyUP.bat内容:
rem ########################################################################### rem # oracle standby 启动脚本 # rem #编写目的:为了帮助用户了解启动时是否有异常错误,以方便及时予以纠正错误。 # rem #本程序由radkitty DBA完善 # rem #本程序默认的路径存放在d:/standbyup目录下,并且在默认情况下会延迟30秒执行 # rem #对于不同的数据库连接请修改start_standby.sql中的数据库连接名。 # rem #如果备用库正常启动将不会有任何提示,直接退出。 # rem # 脚本编写日期:11:58 2008-06-12 # rem ########################################################################### @echo off color 1f Title=---oracle standby 启动程序v1.0--- echo. echo. echo. 如果不选择默认30秒后,将自动启动数据库的standby模式。 choice /c YN /T 30 /D y /M "如果执行standby脚本请按Y;不启动standby脚本,请按N直接退出:" if errorlevel 2 goto exit sqlplus /nolog @d:/standbyup/start_standby.sql type d:/standbyup/standbyup.log|c:/windows/system32/find "ORA-" if "%ERRORLEVEL%"=="0" goto errors goto exit :errors cls color 1f echo. echo ######################################################### echo # 错 误 # echo # # echo # 在启动oracle standby 备用库的时候发现了错误, # echo # 请检查d:/standbyup/standbyup.log日志,确认oracle服务 # echo # 已经正常启动后,请重新执行该程序,如果无法解决请及时 # echo # 和大区DBA或总部DBA联系处理,谢谢! # echo # # echo ######################################################### echo. 按任意键退出…… pause >nul goto exit :exit exit
b.调用的start_standby.sql内容:
set echo off set feedback off set heading off conn / as sysdba Shutdown immediate; spool d:/standbyup/standbyup.log startup nomount; alter database mount standby database; alter database recover managed standby database disconnect from session; spool off; exit
现在你不用担心了吧,是人都可以看懂的提示。希望对各位有用。