段自由空间SQL脚本在Oracle 10g中不起作用

时间:2016-11-03 17:15:32

标签: sql oracle

我使用以下脚本向我展示了使用Oracle 9i数据库时,如果表空间中的一个或多个段已满(还保留了自动扩展区的帐户)。

将数据库升级到10g后,即使段已满,也不会返回任何内容。

为什么它不再起作用了?我应该做些什么修改才能使它起作用?

这是剧本:

SELECT rpad(s.owner,10) "Owner",
  rpad(s.segment_type,12) "Tip segment",
  rpad(s.segment_name,25) "Nume segment",
  rpad(tablespace_name,15) "Tablespace",
  s.next_extent * ( 1 + s.pct_increase / 100 )/1024 "Urmatorul extent"
FROM dba_segments s
WHERE 2*s.next_extent * ( 1 + s.pct_increase / 100 ) >
            ( SELECT MAX( f.bytes )
                   FROM dba_free_space f
                   WHERE f.tablespace_name = s.tablespace_name )
order by 1,2

1 个答案:

答案 0 :(得分:0)

您是否从字典管理的表空间更改为本地管理的表空间?肯定是10g(这是一个奇怪的事情升级,因为它已经被支持了几年),本地管理的表空间是默认的。如果内存服务,本地管理的表空间仍然是9i中的首选方法,但是在很久以前我不会相信我的记忆。

根据定义,本地管理的表空间具有NULL pct_increase。这将导致您的WHERE子句不返回行(表达式2*s.next_extent * ( 1 + s.pct_increase / 100 )将评估为NULL)。