之前一直使用mysql,换了新工作初用oracle数据库,使用create table XXX as select * from XXX语句备份单张表时出现ora-01654 unable to extend index错误,网上查了一下都说可能是用户表空间不足导致的,虽然最后排查不是错误原因,但其间用到的相关查询还是在这里记录一下
select * from user_users;
查询用户信息
select username,default_tablespace from dba_users where username like '%USERNAME%';
查询用户使用的表空间
SELECT SUM(bytes) / (1024 * 1024) AS free_space, tablespace_name
FROM dba_free_space
GROUP BY tablespace_name;
查询表空间使用情况
SELECT a.tablespace_name,
a.bytes/(1024 * 1024) total,
b.bytes/(1024 * 1024) used,
c.bytes/(1024 * 1024) free,
trunc(((b.bytes * 100) / a.bytes),2)||'%' "% USED ",
trunc(((c.bytes * 100) / a.bytes),2)||'%' "% FREE "
FROM sys.sm$ts_avail a, sys.sm$ts_used b, sys.sm$ts_free c
WHERE a.tablespace_name = b.tablespace_name
AND a.tablespace_name = c.tablespace_name;
查询表空间使用情况
最后查出来对应的SYSTEM表空间是足够的(自动扩展的),create table 报错有待继续研究
-----------------------------------------------------------------------------------------------------------------------------------------
最新进展表里有个字段加上not null就没法创建,删掉约束就可以,不知道加上not null到底有什么影响
-----------------------------------------------------------------------------------------------------------------------------------------
仔细想了想not null不可能有什么影响,只是需要分配的空间更多表空间不够用。
上午坐在对面的同事出现了同样问题,我按照之前的方法帮他排查了原因的确是表空间不足,使用
ADD DATAFILE 'D:XXX' SIZE 50M
AUTOEXTEND ON
NEXT 10M
扩展了表空间以后问题的确解决了,可我的问题是咋回事?
-----------------------------------------------------------------------------------------------------------------------------------------
下午找人帮忙看了下,发现是这台数据库的机器使用的是虚拟机,df -m一看虚拟机分配的磁盘空间不足
。。。。。。