1. 程式人生 > >建立表空間資料檔案過大導致失敗

建立表空間資料檔案過大導致失敗

系統環境

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