【问题标题】:SYSTEM tablespace growing over 64GBSYSTEM 表空间增长超过 64GB
【发布时间】:2019-11-08 12:31:17
【问题描述】:

我的Oracle数据库版本是12.1.0.2.0

我正在谈论的数据库用于创建部署在 UAT/生产等环境中的“包”(不是 oracle 包,而是包含代码/脚本的包)。 为此,会在运行时创建新模式,并定期删除不再使用的旧模式。

创建/删除这些模式的表空间大小为 84GB,可用空间超过 50%。

64GB 大小的 SYSTEM 表空间只有 10MB 可用空间。

SYSTEM 表空间中的所有段都归 SYS 或 SYSTEM 所有。

以下查询的前 15 行是:

SELECT owner, 
       segment_name,
       segment_type,
       bytes
  FROM dba_segments
 WHERE tablespace_name = 'SYSTEM'
 ORDER BY bytes desc;

64GB SYSTEM 的表空间听起来对吗? 是否可以减少,如果可以,如何减少?

【问题讨论】:

  • 表的记录数:
  • SOURCE$ 116738579
  • IDL_UB1$ 627158
  • IDL_UB2$ 330314
  • ARGUMENT$ 5298051

标签: oracle oracle12c tablespace


【解决方案1】:

SOURCE$ 是任何 PLSQL 源代码(过程、包、类型等)。

同样,IDL_UBL1、I_SOURCE 也有关系。

您的附录意味着您在该数据库中有 116 百万 行 PLSQL。这是相当多的代码:-)

如果你真的需要 1.16 亿行源代码,那么我认为 64G SYSTEM 表空间是不合理的。

C_OBJ# 很大表明您的数据库中可能有很多对象。因此,请查看 DBA_OBJECTS 以及清理的机会。

【讨论】:

  • 自从它的 SYSTEM 表空间,我不知道什么该丢弃或什么不该丢弃。阅读了几篇文章后,我被警告不要从 SYSTEM 表空间中删除任何内容,因为它是 Oracle 使用的代码。在 DBA_OBJECTS 上,让我看看,然后再回来找你。谢谢。
  • dba_objects 中有 1771539 条记录。其中 13476 个属于 SYS,645 个属于 SYSTEM。有 285 个用户(我之前提到过,它们是动态创建的,几周后会定期删除),每个用户大约有 6k-7k 个对象。当用户被删除时,是否需要清理以从 C_OBJ# 中释放空间?还是隐式处理?
  • 切勿丢弃 SYS(或任何其他 Oracle 内部帐户)拥有的任何东西,除非自己无意中创建了它。 其他对象将重用空闲空间,无论它们是创建还是增长,但我认为您不会返回
  • 这是不是说除了增加空间什么都做不了?
  • 如果您需要那 1.16 亿行代码,那么是的,您需要那个空间。如果您确实不需要 需要这些代码行,则删除有问题的 PLSQL 对象,该空间将可用于新/替换代码。但是除非您导出/导入整个数据库,否则您将无法收回该空间
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-31
  • 2011-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-25
相关资源
最近更新 更多