ORA-01658 表領域 xxxx にセグメント用のINITIAL エクステントを作成できません。
ORA-01658 表領域 xxxx にセグメント用のINITIAL エクステントを作成できません。
0.更新履歴
1.エラー内容
SQL> create table test ( empno number(3) )
2 ;
create table test
*
ERROR at line 1:
ORA-01658: unable to create INITIAL extent for segment in tablespace
xxxx
SQL>
|
テーブルをテーブルスペースxxxxに作成しようとしたが,ORA-01658エラーで作成できない.
2.原因
- テーブルを作成しようとしているが,INITIAL_EXTENTで指定して確保しようとしている領域がとれない.
SQL> select INITIAL_EXTENT,NEXT_EXTENT,MIN_EXTENTS,MAX_EXTENTS,PCT_INCREASE
2> from dba_tablespaces
3> where tablespace_name = 'xxxx';
INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS PCT_INCREASE
-------------- ----------- ----------- ----------- ------------
536870912 10485760 1 2147483645 0
SQL> SELECT SUM(bytes) FROM dba_free_space
2 WHERE tablespace_name = 'xxxx';
SUM(BYTES)
----------
4186112
SQL> select tablespace_name,bytes
2 from dba_data_files where tablespace_name = 'xxxx';
TABLESPACE_NAME
-------------------------------------------------------------------------
BYTES
----------
XXXX
1614807040
SQL>
|
- 容量自体は4MB程度空いているが,create tableを実行する際にStorage句をつけていないため,tablespaceで定義したデフォルトが適用されている.
3.対処
3.1. 作成するテーブルの容量を指定する場合
SQL> create table test (empno number(3))
2 storage (initial 1M next 1M minextents 1 maxextents 10 pctincrease 1);
Table created.
SQL>
|
3.2.テーブルスペースを追加する.
- テーブルスペースxxxxに,300MBのデータベースファイルを新規に追加する.
- xxxxで使われているテーブルスペースの一覧を表示して作成されていることを確認する.
- テーブルスペースに容量が増えていることを確認する.
SQL> ALTER TABLESPACE xxxx
2 ADD DATAFILE '/dbf/xxxx_dbf02.dbf'
3 SIZE 300M;
Tablespace altered.
SQL> select file_id,tablespace_name,file_name from dba_data_files
2 where tablespace_name = 'xxxx';
FILE_ID
----------
TABLESPACE_NAME
--------------------------------------------------------------------------------
FILE_NAME
--------------------------------------------------------------------------------
3
TALOT_EZ_DATA
/dbf/xxxx_dbf01.dbf
7
TALOT_EZ_DATA
/dbf/xxxx_dbf02.dbf
FILE_ID
----------
TABLESPACE_NAME
--------------------------------------------------------------------------------
FILE_NAME
--------------------------------------------------------------------------------
SQL> select sum(bytes) from dba_free_space
2 where tablespace_name = 'xxxx';
SUM(BYTES)
----------
318750720
SQL>
|