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

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
(0)

相关推荐

  • linux下oracle设置开机自启动实现方法

    在CentOS 6.3下安装完Oracle 10g R2,重开机之后,你会发现Oracle没有自行启动,这是正常的,因为在Linux下安装Oracle的确不会自行启动,必须要自行设定相关参数,首先先介绍一般而言如何启动oracle. 一.在Linux下启动Oracle 登录到CentOS,切换到oracle用户权限 # su – oracle 接着输入: $ sqlplus "/as sysdba" 原本的画面会变为SQL> 接着请输入SQL> startup 就可以正常的

  • 详解Linux系统中Oracle数据库程序的启动和关闭方式

    在单机环境下,要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下 su - oracle Oracle数据库有以下几种启动方式: 1. startup nomount 非安装启动,这种方式启动下可执行:重建控制文件.重建数据库 读取init.ora文件,启动instance,即启动SGA和后台进程,这种启动只需要init.ora文件. 2. startup mount dbname 安装启动,这种方式启动下可执行: 数据库日志归档. 数据库介质恢复. 使数据文件联机或脱机, 重新

  • Oracle数据库的启动与关闭方法

    一.启动数据$sqlplus "sys/pass as sysdba"sql>startup 二.启动监听器 数据库启动后,如果未启动监听进程,则客户端无法与数据库连接.监听进程的启动方法为:$lsnrctl start在widnows中,可以从服务列表中启动监听器.监听里程配置文件为listener.ora,位于目录/home/app/oracle/product/10.1.0/db1/network/admin/.此配置文件分为两部分,一部分为监听程序本身的配置,包括协议,地

  • Linux下的Oracle启动脚本及其开机自启动

    说明:以下操作环境在CentOS 6.4 + Oracle 11gR2(Oracle安装在ORACLE_BASE=/opt/oracle中,其ORACLE_HOME=/opt/oracle/11g) 用OUI安装并配置Oracle数据库后,Oracle就开启了(包括:数据库实例.监听器.EM).在重启操作系统之后,Oracle默认是没有启动的.使用如下命令查看Oracle相关服务是否已启动: ps aux | grep ora_ #若无ora_**_**相关的进程,则oracle数据库实例未启动

  • DBA_Oracle Startup / Shutdown启动和关闭过程详解(概念)(对数据库进行各种维护操作)

    一.摘要 Oracle数据库的完整启动过程是分步骤完成的,包含以下3个步骤: 启动实例-->加载数据库-->打开数据库 因为Oracle数据库启动过程中不同的阶段可以对数据库进行不同的维护操作,对应我们不同的需求,所以就需不同的模式启动数据库. 1. Oracle启动需要经历四个状态:SHUTDOWN .NOMOUNT .MOUNT .OPEN 2. Oracle关闭的四种方式:Normal, Immediate, Transactional, Abort 3. 启动和关闭过程详解   二.数

  • ORACLE11g随RHEL5系统自动启动与关闭的设置方法

    写好脚本,注册好服务之后,经测试,ORACLE可以随RHEL启动而启动,但不能随系统关闭而关闭.在网上找答案,发现几乎所有的设置过程帖子都是从同一篇原样照抄过来的,根本就行不通.天下文章一大抄.求助他人,没有得到一个好的解决方案.无奈,自己静下心来慢慢研究分析,总算找到了问题的关键原因所在. 现在就把我的整个成功设置的过程贴出来,供大家参考,以期大家能少走弯路:另外还是要给其他人一个建议:切莫生硬照搬,断章取义,否则其害大焉!! 首先,要在RHEL中设置允许ORACLE系统自动启动,因为默认情况

  • Oracle 启动例程 STARTUP参数说明

    1.不装入数据库而启动事例 可以不装入数据库而启动事例,一般是在数据库才创建时才可以这样做: STARTUP NOMOUNT 2.启动事例并装入数据库 用户可以启动事例而并装入数据库但不打开数据库,允许用户执行特定的维护操作.例如: l 重命名数据文件: l 添加.撤消或重命名重做日志文件: l 启动和禁止重做日志归档: l 执行全部的数据库恢复. STARTUP MOUNT 3.启动事例装入并打开数据库 正常情况是一个事例被启动,数据库装入并打开.这种模式允许任何有效用户连接到数据库并执行典型

  • 计算机名称修改后Oracle不能正常启动问题分析及解决

    前一阵子,在下给老妹装好oracle后,发现老妹的计算机名称好长,不容易记,于是一时手痒,将其计算机名称更改了一下,没想到就这一步操作,可苦坏了俺老人家了,一场悲剧即将开始! 当更改计算机名称,重启电脑后,发现oracle不能启动了.当时俺就想呀,差哪呀,安装完成后,oracle还是可以启动的呢,怎么现在就不行了呢.经过俺老人家仔细的回忆,才发现罪魁祸首就是俺随手更改的计算机名称.因为oracle启动的监听,代理等都是与计算机名称绑定在一起的. 俺马上使出俺唯一的杀手戬--google,经过网上

  • oracle 服务启动,关闭脚本(windows系统下)

    一.概念简介 脚本:script是使用一种特定的描述性语言,依据一定的格式编写的可执行文件,又称作宏或批处理文件. 二.背景 近来在Windows下安装了oracle数据库,由于此数据库很占系统资源,而安装后此数据库的很多服务都是默认开机启动的,这样系统运行速度就大大受到影响.如何按我们的意愿让这些服务在我们需要用到的时候开启,而我们不用的时候关闭呢.这里我只介绍三种方式. 三.正文 1.利用资源管理器关闭相关进程如oracle.exe,这种方式需要我们非常了解oracle的进程控制程序. 2.

  • Oracle监听器服务不能启动的解决方法

    Oracle监听器服务不启动的时候可采取以下措施予以解决: 一.连接主机字符串,提示没有监听器 SVRMGR> connect internal/oracle@orcl: ORA-12541: TNS:no listener SVRMGR> 二.运行监听器,提示地址的协议专用组件指定不正确 在开始菜单运行中键入lsnrctl LSNRCTL for 32-bit Windows: Version 9.0.1.1.1 - Production on 08-6月 -2006 14:31:53 Co

随机推荐