系統環境
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只能更改塊大小