建立表空間資料檔案過大導致失敗
系統環境
Suse11sp1,Oracle10.2.0.5
故障現象
建立表空間失敗,提示ERROR at line 1:ORA-03206: maximum file size of (6400000) blocks in AUTOEXTEND clause is out of range
具體情況
使用者提出需求使用共享資料庫的需求,我們需要給他建立一個使用者,為了各種安全,需要給使用者一個專門的表空間使用,
建立表空間語句如下
CREATE TABLESPACE tbs_spotlight
NOLOGGING
DATAFILE
'/oracle/oradata/tbs_spotlight.dbf' SIZE 8000M
AutoExtend On Next 10M Maxsize 50000M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K
SEGMENT SPACE MANAGEMENT AUTO;
過了很長一段時間返回了錯誤ERROR at line 1:ORA-03206: maximum file size of (6400000) blocks in AUTOEXTEND clause is out of range
解決過程
看報錯資訊應該是說擴充套件的資料檔案包括了6400000個塊,超出了最大限度
用show db_block_size檢視其尺寸為8k,6400000個塊大約為48G
查閱資料瞭解
A smallfile tablespace is a traditional Oracle tablespace, which can contain 1022 datafiles or tempfiles, each of which can contain up to approximately 4 million (2^22) blocks.
由於Oracle的Rowid中使用22位來代表Block號,這22位最多隻能代表2^22-1(4194303)個數據塊,而在我們一般情況下使用的資料塊大小為8k,所以資料檔案的理論大小最大為: 31.9999924G
就是說oracle資料庫最多包涵1022個數據檔案,並且每個資料檔案最多有2^22*8K=32G,而擴充套件資料檔案設定的大小為50G,超過了限制,所以報錯
具體到上述例子,為了突破32G資料檔案要改動塊大小,動作未免太大,況且資料檔案為32G也能滿足大小,所以資料檔案只要小於32G即可
資料檔案大小也可寫為unlimited,但其實大小也不能超過32G
使用語句
/*建立表空間*/
CREATE TABLESPACE tbs_spotlight
NOLOGGING
DATAFILE
'/oracle/oradata/tbs_spotlight.dbf' SIZE 8000M
AutoExtend On Next 10M Maxsize 30000M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K
SEGMENT SPACE MANAGEMENT AUTO;
ALTER TABLESPACE tbs_spotlight LOGGING;
/*建立使用者並授權*/
CREATE USER user_spotlight IDENTIFIED BY spotlight
DEFAULT TABLESPACE tbs_spotlight
TEMPORARY TABLESPACE temp;
GRANT CONNECT,RESOURCE TO user_spotlight;
REVOKE UNLIMITED TABLESPACE FROM user_spotlight;
ALTER USER user_spotlight QUOTA UNLIMITED ON tbs_spotlight;
經驗教訓
smallfile表空間的資料檔案大小和db_block_size有關,塊為2k最大資料檔案為8G,塊為4k最大資料檔案為16G,塊為8k最大資料檔案為32G(預設),塊為16k最大資料檔案為64G,塊為32k最大資料檔案為128G,所以讓資料檔案突破32G只能更改塊大小