如何确定 table 的空 Logical_data_block

How to determine the empty Logical_data_block for a table

假设我的 table 有 1 个片段,其中有 1 个范围。

如果查询

SELECT BLOCKS 
FROM DBA_EXTENTS 
WHERE owner LIKE 'owner' 
  AND segment_name LIKE 'segmentname';

您可以取回一个范围正在存储的逻辑块的数量。

如何从这个(例如)8块中判断哪一个是实际使用的,哪一个是空的?

所以如果有人需要这个,你可以通过

获得空逻辑块的数量
  1. 对非空块求和 SELECT COUNT(*) FROM( SELECT DBMS_ROWID.ROWID_BLOCK_NUMBER(rowid) FROM yourtable GROUP BY DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID))
  2. 获取所有块的数量SELECT SUM(BLOCKS) FROM dba_segments WHERE owner LIKE ownerofyourtable AND segment_name LIKE nameofyourtable'
  3. 然后你只需要减去 2。我在 pl/sql 中做了,但我认为从这一点来看它应该很容易。

注意第二点中的大写和小写。