ORA-00382與DB_nK_CACHE_SIZE參數設定
最近在嘗試最佳化一個包含blob欄位表的查詢,考慮使用非標準塊緩衝。但是,在嘗試設定DB_32K_CACHE_SIZE參數時,遭遇報錯(報錯內容:ORA-00382: 32768 不是有效塊大小, 有效範圍為 [..])。於是,到官方文檔查了一下,才明白這個參數的設定由於和底層資料區塊相關,與作業系統是緊密相連的。在Windows作業系統下,DB_32K_CACHE_SIZE參數時停用,但是,它支援DB_16K_CACHE_SIZE。
這裡給出參數的官方文檔說明以及具體的操作過程,僅供參考。
官方文檔說明DB_nK_CACHE_SIZE
屬性 |
描述 |
參數類型 |
整型數 |
文法 |
DB_[2 | 4 | 8 | 16 | 32]K_CACHE_SIZE =integer[K | M | G] |
預設值 |
0 (預設情況下,不設定非標準塊大小緩衝) |
修改 |
ALTER SYSTEM |
取值範圍 |
最小值: 0 (如果值大於0,會自動修改為記憶體顆粒大小*處理器個數,或者4MB*CPU個數,取二者較大值) 最大值: 取決於作業系統 |
基本參數 |
否 |
DB_nK_CACHE_SIZE (其中 n = 2, 4, 8, 16, 32) 指定了nK緩衝區的大小。你可以設定除DB_BLOCK_SIZE之外的其他數值。例如,如果DB_BLOCK_SIZE為4096,那麼你設定DB_4K_CACHE_SIZE就是非法的(因為4K的緩衝區大小已經被DB_CACHE_SIZE參數設定過了)。
如果資料庫中存在nK塊大小的線上資料表空間,那麼不能設定該參數為0。
作業系統會限制特定的塊大小。例如,如果作業系統最大塊尺寸小於32KB,那麼你不能設定DB_32K_CACHE_SIZE參數。同樣,如果最小塊尺寸大於2KB,那麼你也不能設定DB_2K_CACHE_SIZE參數。
作業環境
我在Oracle10g+Windows Server 2008 Standard R2環境下進行以下操作。
- SQL>