操作前提
- 確認作業系統與硬體支援目標內存大小
- 完整冷備份 (數據文件、控制文件、參數文件、密碼文件)
- 規劃停機窗口,通知業務方
實操步驟記錄
- 停機掛載硬體:關機 → 斷電 → 加裝內存條 → 恢復連接 → 開機 → OS 識別內存正常
- 查看當前 SGA
SQL> SHOW SGA
Total System Global Area 2602007792 bytes
Fixed Size 740592 bytes
Variable Size 335544320 bytes
Database Buffers 2264924160 bytes
Redo Buffers 798720 bytes
- 修改 SGA_MAX_SIZE (靜態參數,需 SPFILE 重啟生效)
SQL> ALTER SYSTEM SET SGA_MAX_SIZE=5000M SCOPE=SPFILE;
System altered.
- 重啟實例
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP;
- 驗證生效
SQL> SHOW SGA
Total System Global Area 5252811728 bytes -- 約 5GB
Fixed Size 744400 bytes
Variable Size 2986344448 bytes -- 明顯增大
Database Buffers 2264924160 bytes
Redo Buffers 798720 bytes
- 後續微調:觀察
V$SGA_RESIZE_OPS、V$BUFFER_POOL_STATISTICS,按需調整 DB_CACHE_SIZE、SHARED_POOL_SIZE、LARGE_POOL_SIZE 等動態子組件 (無需重啟)。
- 最終驗證與備份:業務功能測試無誤 → 熱備份歸檔 → 記錄變更單
關鍵參數關係圖
SGA_MAX_SIZE (上限,靜態)
├── DB_CACHE_SIZE / DB_nK_CACHE_SIZE
├── SHARED_POOL_SIZE
├── LARGE_POOL_SIZE
├── JAVA_POOL_SIZE
├── STREAMS_POOL_SIZE
└── 固定內存 (Fixed Size) + Redo Log Buffer
避坑提醒
- 32 位 Oracle 進程地址空間限制 ~1.7-2.7GB (視 OS),SGA_MAX_SIZE 勿超限
SGA_TARGET (ASMM) 啟用時,子組件設為 0 由自動管理;手動管理時需確保總和 ≤ SGA_MAX_SIZE
- 大頁面 支援需 OS 級配置 (
vm.nr_hugepages / Windows 鎖定頁面權限),否則大 SGA 可能啟動失敗