imp 匯入大量資料常需數小時甚至數天,若為災難恢復場景,時間壓力極大。本文從系統層級、init.ora 初始化參數、imp 導入選項三個層次,提供具體調優參數與操作步驟,大幅縮短匯入耗時。
一、系統層級調整
| 調整項目 | 操作 | 效益 | 注意事項 |
| DB_BLOCK_SIZE | 重建資料庫時設最大值(如 32KB) | 減少 I/O 循環次數 | 永久性變更,建庫時決定,影響所有物件 |
| 大型 Rollback Segment | 建立單一大 Rollback Segment(≈ 最大表 50%),其餘 OFFLINE | 支援大交易,減少擴展等待 | 需配合 COMMIT=N |
| NOARCHIVELOG 模式 | 匯入前切換:ALTER DATABASE NOARCHIVELOG | 消除歸檔日誌產生開銷 | 匯入完成後立即切回 ARCHIVELOG 並備份 |
| 大型 Redo Log Files | 建立少數大尺寸 Redo Log,移除小檔案 | 減少 Log Switch 頻率 | 警示日誌出現 "Checkpoint not complete" 需再擴大 |
| 分離 I/O | Rollback、資料檔、Redo Log 分佈不同實體磁碟 | 消除 I/O 競爭 | 需規劃儲存陣列 LUN 對應 |
二、init.ora 參數調整
| 參數 | 建議值 | 原理 | 調校方法 |
| LOG_CHECKPOINT_INTERVAL | > 最大 Redo Log 檔案大小(OS 區塊單位,通常 512 bytes) | 僅在 Log Switch 時執行 Checkpoint,最小化 Checkpoint 開銷 | 設為超過 Redo Log 大小即可 |
| SORT_AREA_SIZE | 視可用記憶體 5-10 次嘗試尋找最佳值 | 加速索引建立、排序操作 | 出現 Swapping/Paging 即為過大 |
三、imp 導入選項調整
| 選項 | 設定 | 效益 | 配合條件 |
| COMMIT | COMMIT=N | 每個物件(表)結束才 Commit,而非緩衝區滿 Commit,大幅減少 Commit 次數 | 需大型 Rollback Segment |
| BUFFER | 大數值(數 MB 至數十 MB,視記憶體) | 減少讀取導出檔次數,每次讀取一個 Buffer 大小 | 無 Swapping/Paging 為宜 |
| INDEXES | INDEXES=N | 跳過索引建立,加速資料導入 | 事後用 INDEXFILE 產生腳本,配合大 SORT_AREA_SIZE 建索引 |
綜合操作流程範例
- 停庫重建,設
DB_BLOCK_SIZE=32768
- 建立大 Rollback Segment,其餘 OFFLINE
ALTER DATABASE NOARCHIVELOG
- 建立大 Redo Log Groups,移除小檔
- 調整
LOG_CHECKPOINT_INTERVAL、SORT_AREA_SIZE
- 執行:
imp system/manager file=big.dmp COMMIT=N BUFFER=50000000 INDEXES=N IGNORE=Y
- 匯入完成:
INDEXFILE=idx.sql 產生索引腳本 → 編輯腳本 → SORT_AREA_SIZE 調大 → 執行建索引
ALTER DATABASE ARCHIVELOG、立即完整備份
結語
匯入效能 = I/O 頻寬 × CPU 排序能力 × 交易提交頻率。三層次調優精準對應三大瓶頸:系統層解決 I/O、參數層解決排序/Checkpoint、選項層解決提交頻率。災難演練時必驗證此流程,確保 RTO 可控。