Oracle如何回收SYSAUX表空间未使用的空间?

问题描述 投票:0回答:2

我在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% 的可用空间。

尝试1:

ALTER DATABASE DATAFILE '...\XE\SYSAUX01.DBF' RESIZE 5000M; 

但我收到错误:

ORA-03297: file contains used data beyond requested RESIZE value

尝试2:

ALTER TABLESPACE SYSAUX SHRINK SPACE KEEP 5000M;

错误:

ORA-12916: cannot shrink permanent or dictionary managed tablespace

尝试3:

ALTER TABLESPACE sysaux RESIZE 5000M;

错误

ORA-32773: operation not supported for smallfile tablespace SYSAUX

请问有人知道要重新占用这个空间吗?

谢谢。

oracle
2个回答
1
投票

不幸的是,SYSAUX 因其内容而成为“特殊野兽”。有许多不同的机制来回收空间,具体取决于其中对象的类型。

MOS 说明“对 SYSAUX 空间使用问题进行故障排除(文档 ID 1399365.1)”可能是这里最好的起点,但在所有这些情况下,通常很少能够达到实际调整大小的程度。数据文件向下移动,因为 SYSAUX 中的多个表具有 LONG 列,因此您无法对它们执行“alter table move”。

有些人已经成功地使用了一些(不受支持的)删除/重新创建某些对象的机制,但这当然意味着您需要准备好丢失其中的任何信息。

SYSAUX 不计入您的 XE 空间限制,但我确实理解,当您现在有一半以上的空间是空的时,该空间仍坐在那里是令人沮丧的。


0
投票

几年前我写过一篇关于此的文章。这是分步指南。您可以在这里找到它:https://www.informatik-aktuell.de/betrieb/datenbanken/der-oracle-sysaux-tablespace-reorganization-und-verkleinerung.html

它是德语的。但今天你可以轻松地翻译它。

© www.soinside.com 2019 - 2024. All rights reserved.