我在18xe oracle数据库中有6gb的SYSAUX表空间文件。
SYSAUX 表空间有 61% 的可用空间:
select
fs.tablespace_name as Tablespace,
(df.totalspace - fs.freespace) as Used_MB,
fs.freespace as Free_MB,
df.totalspace as Total_MB,
round(100 * (fs.freespace / df.totalspace)) as Percentage_Free
from
(select tablespace_name, round(sum(bytes) / 1048576) TotalSpace from dba_data_files group by tablespace_name) df,
(select tablespace_name, round(sum(bytes) / 1048576) FreeSpace from dba_free_space group by tablespace_name) fs
where
df.tablespace_name = fs.tablespace_name
and df.tablespace_name = 'SYSAUX';
退货
所以如果可能的话我想回收 61% 的可用空间。
ALTER DATABASE DATAFILE '...\XE\SYSAUX01.DBF' RESIZE 5000M;
但我收到错误:
ORA-03297: file contains used data beyond requested RESIZE value
ALTER TABLESPACE SYSAUX SHRINK SPACE KEEP 5000M;
错误:
ORA-12916: cannot shrink permanent or dictionary managed tablespace
ALTER TABLESPACE sysaux RESIZE 5000M;
错误
ORA-32773: operation not supported for smallfile tablespace SYSAUX
请问有人知道要重新占用这个空间吗?
谢谢。
不幸的是,SYSAUX 因其内容而成为“特殊野兽”。有许多不同的机制来回收空间,具体取决于其中对象的类型。
MOS 说明“对 SYSAUX 空间使用问题进行故障排除(文档 ID 1399365.1)”可能是这里最好的起点,但在所有这些情况下,通常很少能够达到实际调整大小的程度。数据文件向下移动,因为 SYSAUX 中的多个表具有 LONG 列,因此您无法对它们执行“alter table move”。
有些人已经成功地使用了一些(不受支持的)删除/重新创建某些对象的机制,但这当然意味着您需要准备好丢失其中的任何信息。
SYSAUX 不计入您的 XE 空间限制,但我确实理解,当您现在有一半以上的空间是空的时,该空间仍坐在那里是令人沮丧的。
几年前我写过一篇关于此的文章。这是分步指南。您可以在这里找到它:https://www.informatik-aktuell.de/betrieb/datenbanken/der-oracle-sysaux-tablespace-reorganization-und-verkleinerung.html
它是德语的。但今天你可以轻松地翻译它。