標準作業程序範本(Standard Operating Procedure, SOP)

參照標準:ISO 9001:2015(Quality Management)/ ISO/IEC 20000-1:2018 / ITIL 4
文件用途:標準化維運操作流程,確保操作一致性、降低人為錯誤、加速新人上手
適用階段:維運監控階段(Operations Phase)— Operational Excellence


📋 章節目錄

  1. 文件資訊
  2. 目的與範圍
  3. 角色與職責
  4. 前置條件
  5. 操作步驟
  6. 驗證與確認
  7. 異常處理
  8. 安全注意事項
  9. 相關文件
  10. 變更歷史

1. 文件資訊

📝 範本

項目內容
文件編號SOP-{類別代碼}-{序號}
文件名稱{操作名稱} 標準作業程序
版本v{主版本}.{次版本}
狀態草稿 / 審核中 / 核定 / 作廢
建立日期{YYYY-MM-DD}
生效日期{YYYY-MM-DD}
下次審核日期{YYYY-MM-DD}(至少每年)
撰寫者{姓名/角色}
審核者{姓名/角色}
核准者{姓名/角色}
適用系統{系統/服務名稱}
機密等級一般 / 限閱 / 機密

📖 使用說明

  • SOP 編號慣例:SOP-{類別}-{流水號}
    • 類別代碼範例:DEP(部署)、INC(事件處理)、BAK(備份)、MON(監控)
  • 每份 SOP 需定期審核(ISO 9001 要求),避免過時
  • 狀態管理:草稿 → 審核中 → 核定(可執行)→ 作廢(新版取代)
  • 機密等級決定誰可以存取此 SOP

💡 範例

項目內容
文件編號SOP-BAK-001
文件名稱HRMS 資料庫每日備份標準作業程序
版本v2.0
生效日期2026-05-01
下次審核日期2027-05-01
適用系統HRMS PostgreSQL 16 (Azure Database)

2. 目的與範圍

📝 範本

2.1 目的

{說明此 SOP 為何存在、解決什麼問題}

2.2 範圍

項目內容
適用對象{哪些人需要遵循此 SOP}
適用情境{什麼時候需要執行此 SOP}
不適用情境{明確排除的場景}

2.3 定義與縮寫

術語定義
{術語}{解釋}

📖 使用說明

  • 目的說明「為什麼要做」,範圍說明「什麼情況下做」
  • 明確列出不適用情境,避免錯誤套用
  • 定義縮寫確保所有讀者理解一致

💡 範例

2.1 目的

確保 HRMS 資料庫每日執行完整備份,保護員工個資與薪資資料安全,符合個人資料保護法要求的資料保存與災難恢復能力。

2.2 範圍

項目內容
適用對象DBA 團隊、值班 SRE
適用情境每日排程備份(02:00 UTC+8)、部署前手動備份
不適用情境災難恢復(參見 SOP-DR-001)、資料遷移(參見 SOP-MIG-001)

3. 角色與職責

📝 範本

角色職責人員/群組
{角色}{具體職責}{人員或群組名稱}

📖 使用說明

  • RACI 原則:明確「誰執行、誰負責、誰諮詢、誰知會」
  • 角色不綁定個人,確保人員異動時 SOP 仍可執行
  • 列出替代人員(backup),確保假日/離職時的持續性

💡 範例

角色職責人員/群組
執行者執行備份操作或確認自動備份成功DBA 團隊(主:陳 DBA、備:林 DBA)
監控者確認備份告警、處理失敗通知值班 SRE
審核者每月確認備份完整性(隨機還原測試)DBA 組長
核准者SOP 變更核准IT 維運主管

4. 前置條件

📝 範本

4.1 環境/工具需求

項目需求確認
{項目}{具體需求}

4.2 權限需求

系統/工具所需權限申請方式
{系統}{權限}{方式}

4.3 前置步驟

  • {前置步驟 1}
  • {前置步驟 2}

📖 使用說明

  • 前置條件確保執行者在開始操作前具備所有必要資源
  • 權限需求明確化,避免執行中途發現權限不足
  • 前置步驟是在「操作步驟」開始前需完成的準備工作

💡 範例

4.1 環境/工具需求

項目需求確認
備份工具pg_dump 16.x (與 DB 版本一致)
儲存空間Azure Blob Storage hrms-backup container
網路連線可存取 DB 主機 (pg-hrms-prod.postgres.database.azure.com:5432)
監控工具Grafana Dashboard: HRMS-Backup-Status

4.2 權限需求

系統/工具所需權限申請方式
PostgreSQLpg_read_all_data roleDBA 組長核准
Azure BlobStorage Blob Data ContributorIT Service Desk 工單
Kuberneteshrms namespace exec 權限RBAC 申請表

5. 操作步驟

📝 範本

Step {N}: {步驟標題}

項目內容
目的{此步驟達成什麼}
執行者{角色}
預計時間{時間}

操作:

{具體命令或操作描述}

預期結果:

{描述成功的輸出/狀態}

注意事項:

  • {注意 1}
  • {注意 2}

📖 使用說明

  • 每個步驟需包含:目的、操作(精確命令/截圖)、預期結果
  • 步驟粒度原則:一個步驟 = 一個可驗證的動作
  • 命令需完整可複製(含參數),不能有模糊描述(如「適當調整」)
  • 標示預計時間,幫助執行者判斷是否正常

💡 範例

Step 1: 確認資料庫狀態

項目內容
目的確認 DB 正常運作,可安全執行備份
執行者DBA
預計時間1 分鐘

操作:

# 檢查 DB 連線數與鎖定狀態
psql -h pg-hrms-prod.postgres.database.azure.com -U hrms_backup -d hrms -c "
SELECT count(*) as active_connections FROM pg_stat_activity WHERE state = 'active';
SELECT count(*) as locks FROM pg_locks WHERE NOT granted;
"

預期結果:

  • active_connections < 80(正常負載)
  • locks = 0(無阻塞鎖定)

注意事項:

  • 若 active_connections > 80 或 locks > 0,暫緩備份並通知 DBA 組長
  • 備份期間避開薪資計算排程(02:00 備份,薪資排程為 04:00)

Step 2: 執行全量備份

項目內容
目的產生資料庫完整備份檔案
執行者DBA / CronJob
預計時間10-15 分鐘(10,000 員工資料量)

操作:

# 執行 pg_dump (custom format, 壓縮)
BACKUP_FILE="hrms_full_$(date +%Y%m%d_%H%M%S).dump"

pg_dump -h pg-hrms-prod.postgres.database.azure.com \
  -U hrms_backup -d hrms \
  -Fc -Z 9 \
  --no-owner --no-acl \
  -f /tmp/backup/${BACKUP_FILE}

echo "Backup size: $(du -h /tmp/backup/${BACKUP_FILE})"

預期結果:

  • 備份檔案產生於 /tmp/backup/
  • 檔案大小約 500MB ~ 1GB(異常偏差 > 20% 需調查)
  • 無 ERROR 訊息

Step 3: 上傳至雲端儲存

項目內容
目的將備份檔上傳至異地儲存(Azure Blob)
執行者DBA / CronJob
預計時間3-5 分鐘

操作:

# 上傳至 Azure Blob Storage
az storage blob upload \
  --account-name hrmsbackupstorage \
  --container-name hrms-backup \
  --name "daily/${BACKUP_FILE}" \
  --file "/tmp/backup/${BACKUP_FILE}" \
  --auth-mode login

# 清理本地暫存
rm -f /tmp/backup/${BACKUP_FILE}

預期結果:

  • 上傳成功,Blob 可在 Azure Portal 查看
  • 本地暫存已清理

Step 4: 驗證備份完整性

項目內容
目的確認備份檔可正常還原
執行者DBA
預計時間2 分鐘(只驗證 TOC,不實際還原)

操作:

# 下載最新備份並驗證 TOC (Table of Contents)
az storage blob download \
  --account-name hrmsbackupstorage \
  --container-name hrms-backup \
  --name "daily/${BACKUP_FILE}" \
  --file "/tmp/verify/${BACKUP_FILE}" \
  --auth-mode login

pg_restore --list "/tmp/verify/${BACKUP_FILE}" | head -20
rm -f /tmp/verify/${BACKUP_FILE}

預期結果:

  • pg_restore --list 正常列出所有 table/index/constraint
  • 無 corruption 錯誤訊息

6. 驗證與確認

📝 範本

6.1 成功驗證清單

#驗證項目驗證方法預期結果實際結果通過
1{項目}{方法}{預期}{實際}

6.2 完成通知

  • 通知對象:{角色/群組}
  • 通知方式:{Email/Slack/監控系統}
  • 通知內容:{備份成功 + 檔案大小 + 耗時}

📖 使用說明

  • 每次操作結束後必須驗證,不能「假設」成功
  • 驗證清單確保不遺漏驗證步驟
  • 完成通知讓相關人員掌握狀態

💡 範例

6.1 成功驗證清單

#驗證項目驗證方法預期結果實際結果通過
1備份檔案存在Azure Portal / CLIBlob 存在且大小合理-
2備份可列出結構pg_restore –list正常列出 tables-
3監控儀表板更新Grafana 確認最新備份時間已更新-
4備份保留政策確認超過 30 天已刪除只保留 30 天-

7. 異常處理

📝 範本

7.1 常見異常與處理

異常情境可能原因處理步驟升級條件
{異常描述}{原因}{步驟}{何時升級}

7.2 升級路徑

Step 1: 執行者自行處理(5 分鐘內)
   ↓ 失敗
Step 2: 通知組長/資深人員(15 分鐘內)
   ↓ 失敗
Step 3: 升級至主管(30 分鐘內)

📖 使用說明

  • 異常處理是 SOP 的核心價值 — 減少遇到問題時的慌亂
  • 列出最常見的 3-5 種異常場景
  • 明確的升級條件與路徑,避免一人苦戰

💡 範例

7.1 常見異常與處理

異常情境可能原因處理步驟升級條件
pg_dump 連線逾時DB 負載過高 / 網路問題1. 等待 5 分鐘重試 2. 檢查 DB 連線數 3. 確認網路重試 3 次仍失敗
備份檔大小異常(偏差 > 30%)資料大量刪除/新增 / 備份不完整1. 比對前日備份 2. 查看 DB 大小 3. 確認有無大量異動確認非正常異動
Azure Blob 上傳失敗儲存空間滿 / 權限過期1. 確認 Blob 配額 2. 確認 Token 有效 3. 手動上傳上傳仍失敗
CronJob 未執行K8s CronJob suspend / Node 問題1. kubectl get cronjob 確認狀態 2. 手動觸發CronJob 修復後仍無法觸發

8. 安全注意事項

📝 範本

#安全要求說明
1{安全要求}{為什麼/如何做}

📖 使用說明

  • 任何涉及敏感資料/系統的 SOP 都需要安全注意事項
  • 包含:權限最小化、密碼處理、日誌記錄、檔案清理
  • 符合資安政策與合規要求

💡 範例

#安全要求說明
1備份帳號使用唯讀權限hrms_backup 角色僅有 pg_read_all_data,無法修改資料
2連線使用 SSLsslmode=require 確保傳輸加密
3備份檔案加密存放Azure Blob 啟用 SSE(Server-Side Encryption)
4密碼不出現在腳本中使用 Azure Managed Identity / K8s Secret
5備份完成後清理本地暫存避免敏感資料殘留於作業主機
6操作日誌保留所有備份操作記錄於 Audit Log(保留 180 天)

9. 相關文件

📝 範本

文件編號文件名稱關聯
{編號}{名稱}{與本 SOP 的關係}

📖 使用說明

  • 列出與本 SOP 相關的其他文件,方便交叉參考
  • 包含:上層政策、相關 SOP、技術手冊、應急計畫

💡 範例

文件編號文件名稱關聯
SOP-DR-001HRMS 災難恢復 SOP備份是 DR 的基礎
SOP-DEP-001HRMS 部署標準作業程序部署前需手動備份
POL-SEC-003資料備份與保存政策本 SOP 遵循的上層政策
TM-HRM-001HRMS 威脅模型THR-004 資料保護對策

10. 變更歷史

📝 範本

版本日期變更者變更內容核准者
v{x.x}{日期}{人員}{變更描述}{核准者}

📖 使用說明

  • ISO 9001 要求受管制文件有完整的變更歷史
  • 每次修改(即使小修)都需記錄
  • 版本號語義:主版本 = 重大流程變更;次版本 = 小修/補充

💡 範例

版本日期變更者變更內容核准者
v1.02025-06-01陳 DBA初版建立IT 主管
v1.12025-09-15陳 DBA新增 Azure Blob 上傳步驟(從本地磁碟遷移)IT 主管
v2.02026-05-01林 DBA全面改寫:PostgreSQL 16 升級 + 新備份策略IT 主管

📌 範本使用注意事項

  1. 本範本依據 ISO 9001:2015 受管制文件格式與 ISO/IEC 20000-1:2018 維運管理要求編製
  2. SOP 是「活文件」,需定期審核(至少每年一次)並因應環境變更更新
  3. 新 SOP 核定後需對執行人員進行教育訓練,確認理解
  4. 建議搭配 Checklist 版本(精簡版)供日常操作使用,完整版供教育訓練與審核
  5. SOP 執行結果需有記錄(日誌/工單),作為稽核證據