ORA-03206報錯的解決方案

Hoegh發表於2015-04-01
        Oracle的資料檔案大小是有限制的,今天在建立表空間的時候就遇到了問題,限制很簡單,作為DBA必須要了解。

   測試環境:
   作業系統:Win7 64位專業版
   資料庫版本:64位Oracle10.2.0.4
   DB_NAME:hoegh
   表空間名稱:hoegh

    在執行建立表空間語句時報錯,具體語句如下:
   create tablespace hoegh
    datafile 'S:\hoegh\hoegh01.dbf' size 20g
    autoextend on next 1g maxsize 100g;
   
   提示報錯:
   ORA-03206: AUTOEXTEND 子句中 (13107200) 塊的最大檔案大小超出範圍

   後來查資料,說單個檔案大小最大是32g,修改語句如下:
   create tablespace hoegh
    datafile 'S:\hoegh\hoegh01.dbf' size 20g
    autoextend on next 1g maxsize 32g;

   仍然報錯:
    ORA-03206: AUTOEXTEND 子句中 (4194304) 塊的最大檔案大小超出範圍

   
    按照Oracle文件的描述,每個datafile的最大容量為(2^22-1)個block,即4194303個block,而當前資料庫的block大小是8k,也就是說最大的檔案大小是32G,要建100G的datafile肯定不行。
 
    也就是說,以Oracle的限制,如果要建普通的datafile,最大的大小就是 (2^22-1)*32K = 128G (注:Oracle最大支援block為32k)。存在這個限制是因為Oracle的內部ROWID使用22位2進位制數來儲存不同的block號,所以22位最多代表(2^22-1)個block。
 
      下面列表說明不同資料塊資料庫所能支援的最大物理檔案大小:
               
            資料塊的大小        物理檔案的最大值 M
        ===============================================               
                2048                        8191 M
                4096                        16383 M
                8192                        32767 M
              16384                        65535 M
 
    這就可以解釋,32G>32767 M(多了1M)也不能夠建立。因此,乾脆修改為如下語句,執行成功。
   create tablespace hoegh
    datafile 'S:\hoegh\hoegh01.dbf' size 10g
    autoextend on next 500m maxsize 20g;

   下面,總結一下ORA-03206報錯的解決方案,推薦使用第一種解決方案
   

一)不要建立單個檔案超過32GB的表空間

如果你建立的表空間超過32GB,請把這個表空間儲存為多個資料檔案,每個檔案不大於32GB。這樣,就可以成功的建立表空間。

二)擴大db_block_size

根據oracle的演算法,我們很容易想到這個解決方法。數目衡定,但是db_block_size可以更改(db_block_size的最大大小為32KB)。如果把db_block_size擴大到32KB(32位系統好像是16KB,我在Red Hat 企業版的作業系統建立32KB的block_size失敗。),那麼我們的系統就可以支援單個資料檔案最大128GB。

這個方案聽起來好像很迷人,但是實際上並不是那麼回事。因為要修改db_block_size並不是很容易的事。因為這個db_block_size在建立例項的時候就要指定。而且不能透過簡單修改引數來指定db_block_size。

三)建立bigfile表空間

在oracle10g中引進了bigfile表空間,充分利用了64位CPU的定址能力,使oracle可以管理的資料檔案總量達到8EB。單個資料檔案的大小達到128TB,即使預設8K的db_block_size也達到了32TB。

建立bigfile的表空間使用的sql語句也很簡單。

create bigfile tablespace...

後面的語句和普通的語句完全一樣。

需要注意的是使用bigfile表空間,他只能支援一個資料檔案。也就是說這個檔案的最大大小就是表空間最大大小,你不可能透過增加資料檔案來擴大該表空間的大小。所以oracle說,如果你的這個檔案沒有剩餘空間的話,你還是不要使用bigfile表空間了,這個表空間你沒有擴充套件的餘地了。並且,還需要注意OS的檔案大小限制。

 
    例如在windows下,單個檔案最大限制如下:
    FAT12           8M   
    FAT16           2G     
    FAT32           4G   
    NTFS            64GB   
    NTFS5.0         2TB  



   

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30162081/viewspace-1481834/,如需轉載,請註明出處,否則將追究法律責任。

相關文章