在每日例行检查脚本运行状况时,发现如下错误信息:
ORA-01658: unable to create INITIAL extent for segment in tablespace TS_CONSUMEQUERY_DATA
经查询,是由于表空间不足导致,过程如下:
select * from sys.dba_free_space t where t.tablespace_name = 'TS_CONSUMEQUERY_DATA';
查询无记录,说明没有剩余表空间
select upper(f.tablespace_name) "表空间名",
d.tot_grootte_mb "表空间大小(m)",
d.tot_grootte_mb - f.total_bytes "已使用空间(m)",
to_char(round((d.tot_grootte_mb - f.total_bytes) / d.tot_grootte_mb * 100,
2),
'990.99') "使用比",
f.total_bytes "空闲空间(m)",
f.max_bytes "最大块(m)"
from (select tablespace_name,
round(sum(bytes) / (1024 * 1024), 2) total_bytes,
round(max(bytes) / (1024 * 1024), 2) max_bytes
from sys.dba_free_space
group by tablespace_name) f,
(select dd.tablespace_name,
round(sum(dd.bytes) / (1024 * 1024), 2) tot_grootte_mb
from sys.dba_data_files dd
group by dd.tablespace_name) d
where d.tablespace_name = f.tablespace_name
order by 4 desc;
经查询,确实是表空间不足
生成环境采取ASM方式管理表空间:
SQL> show parameter db_block_size;
NAME TYPE
------------------------------------ ---------------------------------
VALUE
------------------------------
db_block_size integer
16384
块大小为16k,所以一次最多只能加64G的表空间。
ALTER TABLESPACE TS_CONSUMEQUERY_DATA ADD DATAFILE;
获得表,表空间等创建SQL
select dbms_metadata.get_ddl('TABLESPACE','TS_CONSUMEQUERY_DATA') FROM DUAL;
添加完表空间后,问题得以解决。