創建表空間數據文件過大導致失敗

系統環境

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只能更改塊大小

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章