来自http://tunps.com/oracle-service-control-batch-script
@echo offrem author tunpishuang(http://tunps.com)title Oracle服务控制goto menu:viewtasklist /fi "imagename eq oracle.exe" | find /i "oracle.exe" >nullclsif errorlevel 1 (echo 【oracle没有运行】) else (echo 【oracle正在运行】)goto menu:startnet start OracleOraDb10g_home1TNSListenernet start OracleOraDb10g_home1iSQL*Plusnet start OracleServiceORCL net start OracleDBConsoleORCLrem net start OracleJobSchedulerORCLecho 【已成功开启】goto menu:killnet stop OracleDBConsoleORCLrem net stop OracleJobSchedulerORCLnet stop OracleOraDb10g_home1iSQL*Plusnet stop OracleOraDb10g_home1TNSListenernet stop OracleServiceORCLecho 【已成功关闭】goto menu:manualsc config OracleDBConsoleORCL start= demandsc config OracleOraDb10g_home1iSQL*Plus start= demandsc config OracleOraDb10g_home1TNSListener start= demandsc config OracleServiceORCL start= demandecho 【已设定成功】goto menu:quitexit /b:menuecho v - 查看oracle服务状态echo s - 开启oracle服务echo k - 关闭oracle服务echo m - 设定oracle服务为手动echo q - 退出set /p inputStr=请选择:if "%inputStr%"=="v" goto viewif "%inputStr%"=="s" goto startif "%inputStr%"=="k" goto killif "%inputStr%"=="q" goto quitif "%inputStr%"=="m" goto manual |
- 首先是通过tasklist来判定进程状态,返回的errorlevel就能知道oracle进程是否运行。
- 需要将所有服务设定为手动,这样服务才不会随系统启动而启动,也就是不会让系统开机的时候一直卡在“欢迎”界面。
- oracle这几个服务各司其职,并且互相具有依赖性,所以启动的时候要找准启动顺序 TNSListener->Service->DBConsole,那个JobScheduler服务一般不需要,关闭服务的时候就不需要顺序了,系统自动解决依赖性。详见此文
- 这个脚本控制的服务名称根据不同的环境是有变化了,我这个oracle版本是10g,sid名是ORCL,HOME_NAME是home1,所以使用前需要更改,也许有时间我会找找方法能得到这些变量值,然后改进,改成通用的,那就牛逼了。