我正在寻找有关回收站范围的信息。
删除表时,其段被重命名为“BIN$...”系统生成的名称,并且范围被隐藏。
这些范围仍然会阻止我缩小数据文件(或表空间)吗?如果是这样,我想在脚本中说明它们。
目前我正在使用受 AskTom 的 maxshrink.sql 启发的查询:
select tbs.TABLESPACE_NAME, df.FILE_NAME,
round(MAX(e.BLOCKS+e.BLOCK_ID+1)*tbs.BLOCK_SIZE/1024/1024,2) "MinMB",
round(MAX(df.BYTES)/1024/1024,2) "FileMB"
from DBA_TABLESPACES tbs
LEFT JOIN DBA_DATA_FILES df on tbs.TABLESPACE_NAME = df.TABLESPACE_NAME
LEFT JOIN DBA_EXTENTS e on df.FILE_ID = e.FILE_ID AND df.RELATIVE_FNO = e.RELATIVE_FNO
-- WHERE
-- tbs.TABLESPACE_NAME like 'MY%'
GROUP BY df.FILE_ID, df.RELATIVE_FNO, tbs.TABLESPACE_NAME, tbs.BLOCK_SIZE, df.FILE_NAME
ORDER BY 1,2;
更新:最初我的问题还问我为什么在 12.2 中不再看到由 Flashback Drop Table 创建的“BIN$”段。然而,这对我来说是一个错误,我的测试表根本没有开始的段。
*_SEGMENTS
您可以从视图/同义词中找到它们的详细信息。是的,它们可能会阻止您缩小数据文件。删除的表和任何关联对象(例如索引、约束、嵌套表和其他依赖对象)不会移动,它们只是用前缀重命名
BIN$
。考虑以下(仅用于演示目的)示例。
SYSDBA 权限没有回收站。
DBA_EXTENTS
从过滤器丢弃对象的定义的相关部分中删除(注释掉)过滤器: