2016-11-03 44 views
1

Oracle 9iデータベースを使用しているときに、表領域内の1つ以上のセグメントがフルになっている)。セグメント空き領域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に評価されます)。

関連する問題