2016-11-03 38 views
1

當使用Oracle 9i數據庫時,如果表空間中的一個或多個段變滿(還包含自動擴展的帳戶),我有以下腳本)。段可用空間SQL腳本在Oracle 10g中不起作用

將數據庫升級到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 
+0

你怎麼知道查詢應該返回任何數據?你運行的其他哪些查詢表明存在「完整段」?如果沒有對dba_segments和dba_free_space數據的訪問,很難說出應該發生什麼...... –

+1

似乎可能不再滿足'WHERE'子句。註釋掉'WHERE'子句並查看返回的內容。 –

回答

0

你從字典管理的表更改爲本地管理表空間?當然是10g(這是一個很奇怪的事情,因爲它已經被支持幾年了),本地管理的表空間是默認的。如果內存提供服務,本地管理的表空間仍然是9i中的首選方法,但這足夠長,我不會相信我的記憶。

根據定義,本地管理的表空間具有NULL pct_increase。這會導致你的WHERE子句不返回一行(表達式2*s.next_extent * (1 + s.pct_increase/100)將計算爲NULL)。