Есть интересная ситуация. БД Oracle EE 11.2.0.4, ASM, Oracle Linux 6.6
Натурный эксперимент:
В ТП есть свободное пространство, около 80Гб.
SQL> select round(sum(bytes)/1024/1024/1024) from dba_free_space where tablespace_name='DWH_DATA_STAGE';
ROUND(SUM(BYTES)/1024/1024/1024)
--------------------------------
80
Создаю пустую таблицу
SQL> create table test1.t1 tablespace DWH_DATA_STAGE as select * from dba_objects where 1=2;
Table created.
пытаюсь выделить экстентов на 40Гб для этой таблицы и получаю ошибку
SQL> alter table test1.t1 ALLOCATE EXTENT (size 40g);
alter table test1.t1 ALLOCATE EXTENT (size 40g)
*
ERROR at line 1:
ORA-01652: unable to extend temp segment by 4096 in tablespace DWH_DATA_STAGE
SQL>
Но если запрошу 30Гб, ошибки нет:
SQL> alter table test1.t1 ALLOCATE EXTENT (size 30g);
Table altered.
SQL> select round(sum(bytes)/1024/1024/1024) from dba_free_space where tablespace_name='DWH_DATA_STAGE';
ROUND(SUM(BYTES)/1024/1024/1024)
--------------------------------
50
SQL>
Т.е. у нас еще 50Гб свободно, пробуем еще выделить 30Гб и получаем ошибку, но 5Гб выделяет
SQL> alter table test1.t1 ALLOCATE EXTENT (size 30g);
alter table test1.t1 ALLOCATE EXTENT (size 30g)
*
ERROR at line 1:
ORA-01653: unable to extend table TEST1.T1 by 4096 in tablespace DWH_DATA_STAGE
SQL> alter table test1.t1 ALLOCATE EXTENT (size 5g);
Table altered.
SQL> alter table test1.t1 ALLOCATE EXTENT (size 5g);
alter table test1.t1 ALLOCATE EXTENT (size 5g)
*
ERROR at line 1:
ORA-01653: unable to extend table TEST1.T1 by 4096 in tablespace DWH_DATA_STAGE
SQL> alter table test1.t1 ALLOCATE EXTENT (size 2g);
Table altered.
...
SQL>
Так можно продолжать уменьшать параметр size, при выделении extent-ов, пока при любом значении не будут появляться ошибки
SQL> alter table test1.t1 ALLOCATE EXTENT (size 100m);
Table altered.
SQL> alter table test1.t1 ALLOCATE EXTENT (size 100m);
alter table test1.t1 ALLOCATE EXTENT (size 100m)
*
ERROR at line 1:
ORA-01653: unable to extend table TEST1.T1 by 512 in tablespace DWH_DATA_STAGE
SQL> alter table test1.t1 ALLOCATE EXTENT (size 65m);
alter table test1.t1 ALLOCATE EXTENT (size 65m)
*
ERROR at line 1:
ORA-01653: unable to extend table TEST1.T1 by 512 in tablespace DWH_DATA_STAGE
SQL> alter table test1.t1 ALLOCATE EXTENT (size 64m);
Table altered.
SQL> alter table test1.t1 ALLOCATE EXTENT (size 64m);
Table altered.
...
SQL> alter table test1.t1 ALLOCATE EXTENT (size 5k);
alter table test1.t1 ALLOCATE EXTENT (size 5k)
*
ERROR at line 1:
ORA-01653: unable to extend table TEST1.T1 by 64 in tablespace DWH_DATA_STAGE
SQL>
SQL> select round(sum(bytes)/1024/1024/1024) from dba_free_space where tablespace_name='DWH_DATA_STAGE';
ROUND(SUM(BYTES)/1024/1024/1024)
--------------------------------
39
SQL>
Т.е. в ТП довольно много свободного пространства, но сегменты не могут расширяться.
Пока не могу сообразить в чем проблема, можете подсказать?
Еще немного информации по ТП
TABLESPACE_NAME GB_ALLOC GB_FREE GB_USED PCT_USED MAX
------------------------------ ---------- ---------- ---------- ---------- ----------
DWH_DATA_STAGE 192 39 153 79 192
+ |
SQL> SELECT a.tablespace_name,
2 ROUND (a.bytes_alloc /1024/ 1024 / 1024) gb_alloc,
3 ROUND (NVL (b.bytes_free, 0) /1024/ 1024 / 1024) gb_free,
4 ROUND ( (a.bytes_alloc - NVL (b.bytes_free, 0)) / 1024 / 1024/1024)
5 gb_used,
6 100 - ROUND ( (NVL (b.bytes_free, 0) / a.bytes_alloc) * 100) Pct_used,
7 ROUND (maxbytes / 1048576/1024) MAX
8 FROM ( SELECT f.tablespace_name,
9 SUM (f.bytes) bytes_alloc,
10 SUM (
11 DECODE (f.autoextensible,
12 'YES', f.maxbytes,
13 'NO', f.bytes))
14 maxbytes
15 FROM dba_data_files f
16 GROUP BY tablespace_name) a,
17 ( SELECT f.tablespace_name, SUM (f.bytes) bytes_free
18 FROM dba_free_space f
19 GROUP BY tablespace_name) b
20 WHERE a.tablespace_name = b.tablespace_name(+) and b.tablespace_name= 'DWH_DATA_STAGE';
TABLESPACE_NAME GB_ALLOC GB_FREE GB_USED PCT_USED MAX
------------------------------ ---------- ---------- ---------- ---------- ----------
DWH_DATA_STAGE 192 39 153 79 192
SQL>
|