DBA 日常巡檢、維護窗口、測試環境重啟頻繁需啟停 Oracle 服務。本文提供可互動選單的批次檔範本,涵蓋資料庫實例、DB Console、監聽器、iSQL*Plus 等核心服務,支援自訂服務名稱與錯誤碼回報。
@echo off
chcp 65001 >nul
title Oracle 服務啟停管理工具
color 0A
:MENU
cls
echo ==========================================
echo Oracle 服務管理選單
echo ==========================================
echo 1. 啟動所有 Oracle 服務 (START)
echo 2. 停止所有 Oracle 服務 (STOP)
echo 3. 重啟所有 Oracle 服務 (RESTART)
echo 4. 顯示服務狀態
echo 0. 結束離開
echo ==========================================
set /p choice=請輸入選項 [0-4]:
if "%choice%"=="1" goto START_SVC
if "%choice%"=="2" goto STOP_SVC
if "%choice%"=="3" goto RESTART_SVC
if "%choice%"=="4" goto SHOW_STATUS
if "%choice%"=="0" goto EXIT
echo 無效選項,請重新輸入.
timeout /t 2 >nul
goto MENU
:START_SVC
echo.
echo [INFO] 正在啟動 Oracle 服務,請稍候...
echo.
net start OracleServiceORCL
if errorlevel 1 echo [WARN] OracleServiceORCL 啟動失敗 (可能已執行中)
net start OracleDBConsoleorcl
if errorlevel 1 echo [WARN] OracleDBConsoleorcl 啟動失敗
net start OracleOraDb11g_home1TNSListener
if errorlevel 1 echo [WARN] Listener 啟動失敗
net start OracleOraDb11g_home1iSQL*Plus
if errorlevel 1 echo [WARN] iSQL*Plus 啟動失敗
echo.
echo [OK] 啟動序列完成.
pause
goto MENU
:STOP_SVC
echo.
echo [INFO] 正在停止 Oracle 服務,請稍候...
echo.
net stop OracleOraDb11g_home1iSQL*Plus
net stop OracleOraDb11g_home1TNSListener
net stop OracleDBConsoleorcl
net stop OracleServiceORCL
echo.
echo [OK] 停止序列完成 (建議順序: 應用 -> 監聽 -> DB Console -> 實例).
pause
goto MENU
:RESTART_SVC
call :STOP_SVC
timeout /t 10 >nul
call :START_SVC
goto MENU
:SHOW_STATUS
echo.
echo [STATUS] 核心 Oracle 服務狀態:
sc query OracleServiceORCL
sc query OracleDBConsoleorcl
sc query OracleOraDb11g_home1TNSListener
sc query OracleOraDb11g_home1iSQL*Plus
echo.
pause
goto MENU
:EXIT
echo 再見!
timeout /t 1 >nul
exit /b
services.msc 實際名稱為準)| 功能 | 典型服務名稱 | 備註 |
|---|---|---|
| 資料庫實例 | OracleService | 核心服務,最先啟動、最後停止 |
| Enterprise Manager DB Console | OracleDBConsole | 11g/12c 獨立進程,13c+ 整合至 EM Cloud Control |
| 監聽器 | OracleOraDb | 名稱含 Oracle Home 識別碼 |
| iSQL*Plus / HTTP Server | OracleOraDb | 11g 以前版本,12c+ 棄用 |
| Job Scheduler / 外部程序 | OracleJobScheduler | 外部作業排程需求時啟用 |
@echo off
REM 用法: oracle_svc_ctrl.cmd [START|STOP|RESTART|STATUS] [SID] [ORACLE_HOME_NAME]
REM 例: oracle_svc_ctrl.cmd RESTART ORCL OraDb11g_home1
set ACTION=%1
set SID=%2
set OH_NAME=%3
if "%SID%"=="" set SID=ORCL
if "%OH_NAME%"=="" set OH_NAME=OraDb11g_home1
set DB_SVC=OracleService%SID%
set EM_SVC=OracleDBConsole%SID%
set LSN_SVC=Oracle%OH_NAME%TNSListener
set ISQL_SVC=Oracle%OH_NAME%iSQL*Plus
if /I "%ACTION%"=="START" (
net start %DB_SVC%
net start %EM_SVC%
net start %LSN_SVC%
net start %ISQL_SVC%
) else if /I "%ACTION%"=="STOP" (
net stop %ISQL_SVC%
net stop %LSN_SVC%
net stop %EM_SVC%
net stop %DB_SVC%
) else if /I "%ACTION%"=="RESTART" (
call %0 STOP %SID% %OH_NAME%
timeout /t 15
call %0 START %SID% %OH_NAME%
) else if /I "%ACTION%"=="STATUS" (
sc query %DB_SVC%
sc query %EM_SVC%
sc query %LSN_SVC%
sc query %ISQL_SVC%
) else (
echo 用法: %0 [START|STOP|RESTART|STATUS] [SID] [ORACLE_HOME_NAME]
exit /b 1
)
exit /b 0
net start/stop 會拒絕存取。errorlevel 非 0 表示失敗,生產環境腳本應寫入日誌並發送告警。