1. 程式人生 > >Oracle資料塊的大小

Oracle資料塊的大小

標準資料塊的大小被用於系統和臨時表空間,除非有特別的說明,除非有特別的說明,標準資料塊的大小也被用作一個表空間的資料塊的預設值。資料庫中標準資料塊的大小是在資料庫建立時使db_blcok_size初始化引數設定的,若要改變這一設定就需要重建資料庫。在Oracle9i或以上的版本中,每個Oracle資料庫中除了標準資料塊之外還支援最多4中不同大小的資料塊。
     一般將最常用的資料塊大小選為標準資料塊的大小,在大多數情況下,這也是唯一需要說明的資料塊大小,在多數情況下,db_block_size被設定為4k或8k。如果沒有說明,預設資料塊的大小與作業系統相關的。
  db_cache_size說明了預設快取記憶體的大小。它的最小尺寸為一個granule(4mb or 16mb)預設值為48mb.該快取記憶體的資料塊的大小為標準資料塊的大小,由db_block_size所定義。
   使用快取記憶體初始化引數來定義SGA中快取記憶體的大小,如果要在一個數據庫中使用多個數據塊,就必須定義db_cache_size和至少一個DB_nk_cache_size引數。可以使用以下的動態引數配置額外的非標準塊的快取記憶體。
*db_2k_cache_size:用於2kb資料塊
*db_4k_cache_size:用於4kb資料塊
*db_8k_cache_size:用於8kb資料塊
*db_16k_cache_size:用於16kb資料塊
*db_32k_cache_size:用於32kb資料塊
以上每個引數定義了所對應資料塊的快取記憶體的大小。db_nk_cache_size的預設值為0.如果在資料庫中有任何資料塊大小為nKB的聯機表空間存在,就不可以將db_nk_cache_size置為0.如果nk是標準快的大小,則db_nk_cache_size被禁止。每個而快取記憶體區的最小尺寸為一個granule。

資料塊大小還受到IT平臺的一些限制。如所使用的IT平臺上最小塊的尺寸為2KB,就不能設定DB_2k_CACHE_SIZE,如果所使用的IT平臺的最大快的尺寸為32KB,也不能設定為db_32k_cache_size
.

使用多種資料塊尺寸的原則如下:
*一個分割槽物件的所有分割槽必須存在相同塊尺寸的表空間中。

*所有臨時表空間,包括預設的臨時表空間的永久表空間必須是標準塊尺寸。

*Index_organized表的overflow和out-of-line LOB段可以存在於基表不同塊大小的表空間中。

那麼怎麼建立非標準塊尺寸的表空間。可以通過在create tablespace 語句中使用bolocksize nk或block n 子句來建立非標準尺寸的表空間。這裡n為正整數,單位為位元組,如果使用了字尾k,單位為k位元組。
 為了使用這一子句,必須首先設定db_cache_size和至少一個db_nk_cache_size引數。而且該子句中的正整數n也必須與對應的db_nk_cache_size引數中的正整數n相同。
  
SQL> select tablespace_name,blocK_size,status,contents from dba_tablespaces;

TABLESPACE_NAME BLOCK_SIZE STATUS    CONTENTS
--------------- ---------- --------- ---------
SYSTEM                8192 ONLINE    PERMANENT
UNDOTBS1              8192 ONLINE    UNDO
SYSAUX                8192 ONLINE    PERMANENT
TEMP                  8192 ONLINE    TEMPORARY
USERS                 8192 ONLINE    PERMANENT
TEST                  8192 READ ONLY PERMANENT

6 rows selected.

查詢得出:每個表空間都是8kb