首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle Windows 服務啟停批次檔:一鍵管理資料庫、監聽器、EM Console

     編輯:Oracle 資料庫基礎

DBA 日常巡檢、維護窗口、測試環境重啟頻繁需啟停 Oracle 服務。本文提供可互動選單的批次檔範本,涵蓋資料庫實例、DB Console、監聽器、iSQL*Plus 等核心服務,支援自訂服務名稱與錯誤碼回報。

互動式批次檔完整程式碼 (start_stop_oracle.cmd)

@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 (如 OracleServiceORCL)核心服務,最先啟動、最後停止
Enterprise Manager DB ConsoleOracleDBConsole (如 OracleDBConsoleorcl)11g/12c 獨立進程,13c+ 整合至 EM Cloud Control
監聽器OracleOraDb_homeTNSListener名稱含 Oracle Home 識別碼
iSQL*Plus / HTTP ServerOracleOraDb_homeiSQL*Plus11g 以前版本,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 會拒絕存取。
  • 停止順序:應用層 (iSQL*Plus) → 監聽器 → DB Console → 資料庫實例。避免連線中斷導致交易殘留。
  • 等待間隔:重啟間建議等待 15-30 秒,確保進程完全退出、共享記憶體釋放。
  • 錯誤碼捕捉:errorlevel 非 0 表示失敗,生產環境腳本應寫入日誌並發送告警。
  • 12c/19c/21c 變化:DB Console 被 EM Express (內建於資料庫) 或 Cloud Control 取代,iSQL*Plus 已移除,服務清單請依實際安裝調整。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved