在 Windows 平台 (含 32-bit 與 64-bit) 上運行 Oracle Database 時,嘗試設定 db_32k_cache_size 參數將報錯 ORA-00382: 32768 not a valid block size。本文說明技術原因、驗證過程與替代方案。
SQL> show parameter 32k
NAME TYPE VALUE
db_32k_cache_size big integer 0
SQL> alter system set db_32k_cache_size=10m;
ORA-32017: failure in updating SPFILE
ORA-00382: 32768 not a valid block size, valid range [..]
SQL> create tablespace tbs32K datafile 'c:\tbs32K.dbf' size 4M blocksize 32k;
ORA-00382: 32768 not a valid block size, valid range [2048..16384]
db_block_size 及非標準快取 (2K, 4K, 8K, 16K, 32K) 需對應的 OS 大頁面支援。Windows 僅支援 4KB 基礎頁面,衍生出 2K/4K/8K/16K 塊大小,但無 32KB 對應機制。shmmax、large_pages、hugetlbfs 配置 32KB/64KB/256KB/... 大頁面,支援完整塊大小範圍。SQL> select * from v$block_size;
-- Windows 典型輸出:2048, 4096, 8192, 16384 (無 32768)
create tablespace tbs16K datafile 'c:\tbs16K.dbf' size 100M blocksize 16k;
alter system set db_16k_cache_size = 50m scope=spfile;
16K 塊大小對大型物件 (LOB)、資料倉庫全表掃描有顯著效能提升。gpedit.msc → Computer Configuration → Windows Settings → Security Settings → Local Policies → User Rights Assignment → Lock pages in memory 加入 Oracle 服務帳號。use_large_pages = ONLY (11gR2+)| 參數 | Windows 支援 | Linux/Unix 支援 |
|---|---|---|
| db_2k_cache_size | ✅ | ✅ |
| db_4k_cache_size | ✅ (預設) | ✅ |
| db_8k_cache_size | ✅ | ✅ |
| db_16k_cache_size | ✅ | ✅ |
| db_32k_cache_size | ❌ | ✅ (需 OS 大頁面) |