Windows下编写批处理脚本来启动和重置Oracle数据库

所属分类: 数据库 / oracle 阅读数: 2030
收藏 0 赞 0 分享

cmd启动Oracle数据库
新建一个bat文件,复制内容进去,双击即可启动.

@echo off 
net start OracleXETNSListener 2>nul 
net start OracleServiceXE 2>nul 
@oradim -startup -sid XE -starttype inst > nul 2>&1 

Oracle重置数据库命令
新建bat文件,复制以下内容,然后执行。

@echo off 
REM 
REM The script assumes that user can connect using "/ as sysdba" 
REM 
REM ================= 
REM Restore procedure 
REM ================= 
REM 
REM If Installed Oracle home is also lost and oracle binaries were 
REM re-installed or the Oracle is installed to new oracle home location 
REM compared to backup time, then user will be prompted to enter Flash 
REM Recovery Area location. 
REM 
REM For database in NoArchiveLog mode, database is restored to last offline 
REM backup time/scn; 
REM For database in Archive log mode, database is restored from last backup 
REM and a complete recovery is attempted. If complete recovery fails, 
REM user can open the database with resetlogs option provided the files 
REM are not recovery fuzzy. 
REM 
REM The restore log is saved in ?/DATABASE/OXE_RESTORE.LOG 
REM 
 
setlocal 
 
set /p inp="This operation will shut down and restore the database. Are you sure [Y/N]?" 
:checkinp 
if /i "%inp%" == "Y" goto :confirmedyes 
if /i "%inp%" == "n" exit 
:Askagain 
set /p inp= 
goto :checkinp 
 
:confirmedyes 
 
echo Restore in progress... 
 
echo db_name=xe >%temp%\rman_dummy.ora 
echo sga_target=270M >>%temp%\rman_dummy.ora 
 
 
net start oracleserviceXe 
 
REM Startup database in nomount mode using RMAN... 
@( 
echo set echo on^; 
echo startup nomount pfile=%temp%\rman_dummy.ora force^; 
) > %temp%\restore_rman0.dat 
rman target / @%temp%\restore_rman0.dat 
if not %errorlevel% == 0 set Errorstr= RMAN Error - could not startup dummy instance & goto :restorefailederr 
 
@( 
echo connect / as sysdba^; 
echo set head off 
echo set echo off 
echo set linesize 515 
echo variable var varchar2^(512^)^; 
echo execute :var := sys.dbms_backup_restore.normalizefilename^(^'SPFILE2INIT^'^)^; 
echo spool %temp%\spfile2init.log 
echo select sys.dbms_backup_restore.normalizefilename^(^'SPFILE2INIT.ORA^'^) spfile2init from dual^; 
echo exit^; 
) > %temp%\spfile2init.sql 
sqlplus /nolog @%temp%\spfile2init.sql >nul 
FOR /F %%i in (%temp%\spfile2init.log) do set SPFILE2INIT=%%i 
 
@( 
echo connect / as sysdba; 
 echo set head off 
 echo set echo off 
 echo set linesize 515 
 echo variable var varchar2^(512^)^; 
 echo execute :var := sys.dbms_backup_restore.normalizefilename^(^'FRA_LOC^'^)^; 
 echo spool %temp%\restore_rmanlog.log 
 echo select sys.dbms_backup_restore.normalizefilename^(^'OXE_RESTORE.LOG^'^) RESTORE_RMANLOG from dual^; 
 echo exit^; 
) > %temp%\restore_rmanlog.sql 
sqlplus /nolog @%temp%\restore_rmanlog.sql >nul 
FOR /F %%i in (%temp%\restore_rmanlog.log) do set RESTORE_RMANLOG=%%i 
 
if not exist ^"%SPFILE2INIT%^" goto get_rcvarea_loc 
@( 
 echo set echo on^; 
 echo shutdown immediate^; 
 echo startup nomount pfile=^"%SPFILE2INIT%^"^; 
 echo restore ^(spfile from autobackup^) ^(controlfile from autobackup^)^; 
 echo startup mount force^; 
 echo configure controlfile autobackup off^; 
 echo restore database^; 
) > %temp%\restore_rman1.dat 
rman target / @%temp%\restore_rman1.dat trace "%RESTORE_RMANLOG%" 
if not %errorlevel% == 0 set Errorstr= RMAN Error - See log for error & goto :restorefailederr 
goto restored_files 
 
:get_rcvarea_loc 
set /p rcvarea_loc="Enter the flash recovery area location:" 
@( 
 echo set echo on^; 
 echo restore ^(spfile from autobackup db_recovery_file_dest=^'%rcvarea_loc%^'^)^; 
 echo startup nomount force^; 
 echo restore ^(controlfile from autobackup^)^; 
 echo alter database mount^; 
 echo configure controlfile autobackup off^; 
 echo restore database^; 
) > %temp%\restore_rman1.dat 
rman target / @%temp%\restore_rman1.dat trace "%RESTORE_RMANLOG%" 
if not %errorlevel% == 0 set Errorstr= RMAN Error - See log for error & goto :restorefailederr 
goto restored_files 
 
:restored_files 
@( 
 echo connect / as sysdba^; 
 echo declare cursor n1 is select name from v$tempfile^; 
 echo begin 
 echo for a in n1 
 echo loop 
 echo begin 
 echo sys.dbms_backup_restore.deletefile^(a.name^)^; 
 echo exception 
 echo when others then 
 echo null^; 
 echo end^; 
 echo end loop^; 
 echo end^; 
 echo / 
 echo exit^; 
 echo / 
) > %temp%\deltfile.sql 
sqlplus /nolog @%temp%\deltfile.sql >nul 
@( 
 echo connect / as sysdba^; 
 echo set head off 
 echo set echo off 
 echo spool %temp%\logmode.log 
 echo select log_mode from v$database^; 
 echo exit^; 
) > %temp%\logmode.sql 
sqlplus /nolog @%temp%\logmode.sql >nul 
FOR /F %%i in (%temp%\logmode.log) do set LOGMODE=%%i 
 
if "%LOGMODE%" == "NOARCHIVELOG" goto process_noarchivelog 
if "%LOGMODE%" == "ARCHIVELOG" goto process_archivelog 
set Errorstr= Unknown log mode : %LOGMODE% 
goto :restorefailederr 
 
:process_noarchivelog 
@( 
 echo set echo on^; 
 echo alter database open resetlogs; 
) > %temp%\restore_rman2.dat 
rman target / @%temp%\restore_rman2.dat trace "%RESTORE_RMANLOG%" append 
if not %errorlevel% == 0 set Errorstr= RMAN Error - See log for details & goto :restorefailederr 
goto :restoresucess 
 
:process_archivelog 
@( 
 echo set echo on^; 
 echo recover database^; 
 echo alter database open resetlogs; 
) > %temp%\restore_rman2.dat 
rman target / @%temp%\restore_rman2.dat trace "%RESTORE_RMANLOG%" append 
if not %errorlevel% == 0 set Errorstr= RMAN Error - See log for details & goto :restorefailederr 
goto :restoresucess 
 
:restoresucess 
echo Restore of the database succeeded. 
echo Log file is at %RESTORE_RMANLOG%. 
pause Press any key to exit 
exit 
goto :EOF 
 
:restorefailederr 
echo ==================== ERROR ============================= 
echo Restore of the database failed. 
echo %Errorstr%. 
echo Log file is at %RESTORE_RMANLOG%. 
echo ==================== ERROR ============================= 
pause Press any key to exit 
exit 
goto :EOF 

更多精彩内容其他人还在看

oracle存储过程中return和exit区别概述及测试

至于return和exit在oracle存储过程中的应用,有些新手朋友们还是比较容易混淆的,本文将针对这两个关键字进行详细对比下,感兴趣的你可以参考下,希望可以帮助到你
收藏 0 赞 0 分享

oracle查看当前日期是第几个星期的方法

oracle查看当前日期是第几个星期方法的代码段,需要的朋友可以参考一下
收藏 0 赞 0 分享

oracle删除已存在的表的实例

查询系统表,判断表是否存在,存在则直接删除
收藏 0 赞 0 分享

oracle中文乱码解决的办法

oracle中文乱码解决的办法,需要的朋友可以参考一下
收藏 0 赞 0 分享

Oracle中在pl/sql developer修改表的2种方法

Oracle中在pl/sql developer修改表的2种方法,需要的朋友可以参考一下
收藏 0 赞 0 分享

oracle 创建表空间步骤代码

oracle 创建表空间步骤代码,需要的朋友可以参考一下
收藏 0 赞 0 分享

Oracle 查看表空间的大小及使用情况sql语句

表空间使用情况包括:查看表空间的名称及大小/查看表空间物理文件的名称及大小/查看回滚段名称及大小等等感兴趣的你可以参考下本文
收藏 0 赞 0 分享

Oracle Form中COMMIT的概述及使用技巧

针对form上面的数据变动提交到后台数据库,同时数据库提交数据,接下来将详细介绍下Form中COMMIT的使用,感兴趣的你可以参考下本文
收藏 0 赞 0 分享

Oracle跨数据库查询并插入实现原理及代码

需要从一个数据库中的表GIS_WEICHAI_DATA_1S中的数据导入到另个一数据库的表GIS_WEICHAI_DATA_1S中,接下来为你讲解跨数据库查询并插入需要的朋友可以参考下
收藏 0 赞 0 分享

Oracle 存储过程发送邮件实例学习

接下来将介绍下如何使用存储过程发送邮件这一案例实现,感兴趣的你可以参考下本文或许对你有所帮助
收藏 0 赞 0 分享
查看更多