create table bigtab (id number, name varchar2 (4000));
create index bigtab_idx on bigtab (name);
insert into bigtab
select level id, rpad ('A', 4000, 'A') name
from dual connect by level <= 10e10;
ORA-01653: 无法在表空间 SYSTEM 中将表 SYS.BIGTAB 扩展 1024
你可以找到这样的对象:
select
owner, segment_name, segment_type, tablespace_name, blocks, extents,
round (bytes/1024/1024) sizemb
from dba_segments
where tablespace_name = 'SYSTEM'
order by sizemb desc
fetch first 5 rows only;
OWNER SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME BLOCKS EXTENTS SIZEMB
----- ---------------- ------------------ ---------------- ---------- ---------- ----------
SYS BIGTAB_IDX INDEX SYSTEM 57344 127 448
SYS BIGTAB TABLE SYSTEM 37888 108 296
并将它们移动到另一个 TP:
alter table bigtab move tablespace sysaux;
alter index bigtab_idx rebuild tablespace sysaux;
select
owner, segment_name, segment_type, tablespace_name, blocks, extents,
round (bytes/1024/1024, 2) sizemb
from dba_segments
where segment_name like 'BIG%';
OWNER SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME BLOCKS EXTENTS SIZEMB
----- ---------------- ------------------ ---------------- ---------- ---------- ----------
SYS BIGTAB TABLE SYSAUX 8 1 .06
SYS BIGTAB_IDX INDEX SYSAUX 8 1 .06
表空间 (TP)
SYSTEM不能溢出。在这个 TP 中,原则上不能有会导致其溢出的数据库对象。只能有在安装数据库、补丁、附加组件期间创建的对象。模块,仅此而已。如果数据库对象是在帐户下
SYS或SYSTEM错误创建的,那么最佳解决方案是将它们转移到其他数据库模式。例如,导出它们并使用参数导入它们:至少,您需要将此类对象移动到其他 TP,
SYSTEM为此,作为一项规则,SYSAUX.例如,在 uch.z 下。
SYS创建一个会溢出 TP 的无意义表:你可以找到这样的对象:
并将它们移动到另一个 TP: