ASM 實例同樣使用 SPFILE (二進制) 持久化參數,PFILE (文本) 用於備份、遷移、緊急修改。
-- 登錄 ASM 實例
export ORACLE_SID=+ASM1
sqlplus / as sysasm
-- SPFILE → PFILE (文本備份,便於版本控制/異機複製)
CREATE PFILE='/tmp/init+ASM1.ora' FROM SPFILE;
-- 或指定位置
CREATE PFILE FROM SPFILE; -- 默認 $ORACLE_HOME/dbs/init+ASM1.ora
-- PFILE → SPFILE (需實例處於 NOMOUNT/關閉狀態)
CREATE SPFILE FROM PFILE='/tmp/init+ASM1.ora';
| 參數 | 分類 | 說明 | 建議值/備註 |
|---|---|---|---|
INSTANCE_TYPE |
核心標識 | 標識實例類型,ASM 實例必須設為 'ASM' | ASM (不可修改) |
ASM_DISKGROUPS |
掛載控制 | 啟動時自動掛載的磁盤組列表,逗號分隔。RAC 中可用 `sid.ASM_DISKGROUPS` 差異化 | `'DATA', 'FRA'` 或實例級覆蓋 |
ASM_DISKSTRING |
發現路徑 | ASM 掃描磁盤的路徑模式。ASMLib 環境通常留空 (默認掃描 `/dev/oracleasm/disks/*`) | 裸設備環境:`'/dev/mapper/mpath*'` 或 `'/dev/raw/*'` |
ASM_POWER_LIMIT |
再平衡速度 | 0-11 (11gR2+ 0-1024)。0=禁用再平衡,1=最慢/影響最小,最大值=最快/資源佔用最高。動態可修改 | 日常 1-3;維護窗口 5-11;可在 ALTER DISKGROUP... REBALANCE POWER n 臨時覆蓋 |
CLUSTER_DATABASE |
RAC 標識 | 標識是否為集群數據庫 (ASM 實例同樣適用) | TRUE (RAC 環境) |
INSTANCE_NUMBER |
實例序號 | 每個實例唯一,1..n。用於鎖資源命名、線程號分配 | 實例級強制指定:`+ASM1.INSTANCE_NUMBER=1` |
LARGE_POOL_SIZE |
內存 | 再平衡/備份並行 I/O 緩衝。ASM 不用 Shared Pool 緩存用戶數據 | 默認 12MB 足夠;超大磁盤組(>50TB)或頻繁再平衡可調大至 50-100MB |
REMOTE_LOGIN_PASSWORDFILE |
認證 | 密碼文件模式。ASM 實例需 `EXCLUSIVE` 或 `SHARED` 支持遠程 SYSASM 登錄 | EXCLUSIVE |
DIAGNOSTIC_DEST |
診斷 | ADR 基礎路徑 (alert log, trace, incident)。建議顯式設定統一路徑 | `/u01/app/grid` (GI Home) |
假設 2 節點 RAC,ASM 實例 `+ASM1`、`+ASM2`,共享 SPFILE 於 `+DATA/ASM/PARAMETERFILE/spfile.ora`。
*.asm_diskgroups='DATA','FRA'
*.asm_power_limit=1
*.background_dump_dest='/u01/app/grid/diag/asm/+asm/+ASM1/trace' -- 實例級覆蓋見下
*.cluster_database=true
*.diagnostic_dest='/u01/app/grid'
*.instance_type='asm'
*.large_pool_size=12M
*.remote_login_passwordfile='exclusive'
*.user_dump_dest='/u01/app/grid/diag/asm/+asm/+ASM1/trace'
+ASM1.instance_number=1
+ASM1.background_dump_dest='/u01/app/grid/diag/asm/+asm/+ASM1/trace'
+ASM1.core_dump_dest='/u01/app/grid/diag/asm/+asm/+ASM1/cdump'
+ASM1.user_dump_dest='/u01/app/grid/diag/asm/+asm/+ASM1/udump'
+ASM2.instance_number=2
+ASM2.background_dump_dest='/u01/app/grid/diag/asm/+asm/+ASM2/trace'
+ASM2.core_dump_dest='/u01/app/grid/diag/asm/+asm/+ASM2/cdump'
+ASM2.user_dump_dest='/u01/app/grid/diag/asm/+asm/+ASM2/udump'
-- 查看所有實例參數
SELECT inst_id, name, value, isdefault, isses_modifiable, issys_modifiable
FROM gv$parameter
WHERE name IN ('asm_diskgroups','asm_power_limit','instance_number','cluster_database')
ORDER BY name, inst_id;
-- 查看 SPFILE 內容
SELECT name, value FROM v$spparameter WHERE value IS NOT NULL ORDER BY name;
| 錯誤現象 | 根因 | 修正動作 |
|---|---|---|
| 啟動報 `ORA-15183: ASMLib initialization failed` | `ASM_DISKSTRING` 設置錯誤或 ASMLib 未加載 | ASMLib 環境設 `ASM_DISKSTRING=''` (空);檢查 `lsmod | grep oracleasm` |
| 磁盤組未自動掛載 | `ASM_DISKGROUPS` 缺失或拼寫錯誤 | `ALTER SYSTEM SET asm_diskgroups='DATA,FRA' SCOPE=SPFILE;` 重啟驗證 |
| 再平衡極慢/卡住 | `ASM_POWER_LIMIT=0` 或過小;磁盤 I/O 瓶頸 | 調大 `ASM_POWER_LIMIT`;檢查 `V$ASM_OPERATION` 進度;確認磁盤無硬件故障 |
| RAC 節點參數不一致導致實例啟動失敗 | 未使用共享 SPFILE 或實例級覆蓋衝突 | 遷移至共享 SPFILE;檢查 `gv$parameter` 跨實例一致性 |
-- 1. 在節點 1 創建 PFILE 備份
CREATE PFILE='/tmp/init_asm_migrate.ora' FROM SPFILE;
-- 2. 創建 ASM 磁盤組目標位置的 SPFILE (需實例關閉)
-- 假設目標磁盤組 +DATA
CREATE SPFILE='+DATA/ASM/PARAMETERFILE/spfile.ora' FROM PFILE='/tmp/init_asm_migrate.ora';
-- 3. 修改實例啟動腳本/服務指向新 SPFILE
-- Linux: 修改 $ORACLE_HOME/dbs/init+ASM1.ora 內容為:
SPFILE='+DATA/ASM/PARAMETERFILE/spfile.ora'
-- 4. 滾動重啟各節點 ASM 實例驗證