ORA-03233: 無法擴充套件表 SIS_HIS_PERFEVAL.TB_JX_INDEX_HIS 的子分割槽 PART_9_SUB_1 (透過 1024, 在表空間 SIS_HIS_PERFEVAL

發表於2012-07-24
問題:
某一表空間,就一個表,是一個分割槽表,當資料檔案達到35G左右時,就無法寫入資料了,磁碟空間也沒滿,丟擲:
ORA-03233: 無法擴充套件表 SIS_HIS_PERFEVAL.TB_JX_INDEX_HIS 的子分割槽 PART_9_SUB_1 (透過 1024, 在表空間 SIS_HIS_PERFEVAL 中)
[@more@]
解決方案:
SQL> alter tablespace SIS_HIS_PERFEVAL add datafile '+DATADG/ora11gr2/datafile/SIS_HIS_PERFEVAL2.dbf' SIZE 1M AUTOEXTEND ON;
Tablespace altered.
思考:
1、獲取建立表空間的sql語句
SQL>set long 10000 (在sqlplus設定變數,不然顯示的內容不全)
SQL> select dbms_metadata.get_ddl('TABLESPACE','SYSTEM') from dual;

DBMS_METADATA.GET_DDL('TABLESPACE','SYSTEM')
--------------------------------------------------------------------------------
CREATE TABLESPACE "SYSTEM" DATAFILE
'E:PROGRAMFILESORACLEPRODUCT10.2.0ORADATAMZLSYSTEM01.DBF' SIZE 314572800
AUTOEXTEND ON NEXT 10485760 MAXSIZE 32767M
LOGGING ONLINE PERMANENT BLOCKSIZE 8192
EXTENT MANAGEMENT LOCAL AUTOALLOCATE SEGMENT SPACE MANAGEMENT MANUAL
ALTER DATABASE DATAFILE
'E:PROGRAMFILESORACLEPRODUCT10.2.0ORADATAMZLSYSTEM01.DBF' RESIZE 503316

發現建立的資料檔案大小都不能大於32GB?

預設建立資料庫有5個表空間:
系統表空間system,預設的資料檔案為480MB
輔助表空間sysaux,預設的資料庫檔案為240MB
回滾表空間undotbs1,預設的資料庫檔案為25MB
臨時表空間temp,預設的資料庫檔案為,20MB
使用者預設使用的表空間:users,預設的資料庫檔案為5M

2、檢視各表空間的資料檔案的位置、大小
SQL> select file_name,tablespace_name,bytes/1024/1024 "bytes MB",
2 autoextensible,maxbytes/1024/1024 "maxbytes MB" from dba_data_files;

臨時表空間的位置、大小
SQL> select file_name,tablespace_name,bytes/1024/1024 "bytes MB",
2 autoextensible,maxbytes/1024/1024 "maxbytes MB" from dba_temp_files;

3、建立一個自動擴充套件的表空間
SQL> l
1 create tablespace test
2 datafile 'E:PROGRAMFILESORACLEPRODUCT10.2.0ORADATAMZLtest.dbf'
3* size 2M autoextend on
SQL> /

表空間已建立。

SQL> select dbms_metadata.get_ddl('TABLESPACE','TEST') from dual;

DBMS_METADATA.GET_DDL('TABLESPACE','TEST')
--------------------------------------------------------------------------------

CREATE TABLESPACE "TEST" DATAFILE
'E:PROGRAMFILESORACLEPRODUCT10.2.0ORADATAMZLTEST.DBF' SIZE 2097152
AUTOEXTEND ON NEXT 8192 MAXSIZE 32767M
LOGGING ONLINE PERMANENT BLOCKSIZE 8192
EXTENT MANAGEMENT LOCAL AUTOALLOCATE SEGMENT SPACE MANAGEMENT AUTO

剛才建立了一個自動擴充套件的表空間:檢視只能最大MAXSIZE 32767M,大約32GB(31.999GB),
原來資料庫的db_block_size為8192位元組,也就是8KB,但為什麼最大隻能小於32GB。
Oracle中每個small file資料檔案最多隻能包含2的22次方 - 1 個資料塊,所以資料庫最大為8KB*(2^22-1)=32GB-8KB
所以資料庫的db_block_size為8KB時,資料檔案的最大值為32GB-8KB,
如果Oracle的db_block_size為16KB時,資料檔案的最大值為64GB-16KB(16KB*(2^22-1))


注:檢視資料庫表空間的各引數:資料塊大小、初始化區大小、遞增區大小、狀態、區管理、段管理、是否大檔案
select * from dba_tablespaces;

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

相關文章