关于作为独立实例运行的 Oracle 数据库企业版版本 19.10.0.0.0 的问题。
我有一张有数十亿行的表。该表始终将 PCTFREE 设置为 10。
事实证明,我们只在这张表上执行过插入,没有更新,没有删除。我想通过将 PCTFREE 降低到 0 来节省磁盘空间。
据我了解,如果我只是执行 ALTER TABLE x PCTFREE 0 那么在我们的例子中,只有未来分配的块会受到影响。但是所有数以百万计的现有块永远不会被填充超过 90%,因为我们永远不会更新或删除这些行。
有没有办法让所有旧块“重新评估”并在我降低 PCTFREE 后重新放回空闲列表?
我不希望移动所有数据(例如,使用 CTAS,或 expdp+impdp,或删除+插入每一行,或 dbms_redefinition),因为表太大以至于这将永远花费和/或使用大量的中间空间. 我只需要数据库知道现在可以在旧块中放置更多行。这可能吗?
我的问题在另一个留言板上得到了回答。答案是在PCTFREE更改后使用DBMS_REPAIR.SEGMENT_FIX_STATUS。
但是,在我的平台(sparc64)上,它有很多错误,在修复单个块时有很多 ORA-600。但是出于某种原因,修复所有块似乎效果更好。