次のSQL文を作成しますが、一般的に最も大きなテーブルを表示します。私は各表スペースについてそれを見たいと思う。Oracleの各テーブルスペースで最大のテーブルを見つける方法
select tablespace_name, max(BYTES/1024/1024), SEGMENT_NAME
from dba_segments
where SEGMENT_TYPE='TABLE'
group by tablespace_name,SEGMENT_NAME,tablespace_name
次のSQL文を作成しますが、一般的に最も大きなテーブルを表示します。私は各表スペースについてそれを見たいと思う。Oracleの各テーブルスペースで最大のテーブルを見つける方法
select tablespace_name, max(BYTES/1024/1024), SEGMENT_NAME
from dba_segments
where SEGMENT_TYPE='TABLE'
group by tablespace_name,SEGMENT_NAME,tablespace_name
あなたがFIRST機能を使用するときは、それを短くすることができます:SEGMENT_TYPE = 'TABLE'
による
SELECT tablespace_name, MAX(BYTES/1024/1024),
MAX(SEGMENT_NAME) KEEP (DENSE_RANK LAST ORDER BY BYTES)
FROM dba_segments
WHERE SEGMENT_TYPE = 'TABLE'
GROUP BY tablespace_name;
注意、あなたのクエリがpartitionizedテーブルは含まれません。
また、いくつかのテーブルがまったく同じサイズを持つ場合に備えて、テーブルスペースごとに1つのテーブルだけが得られます。すべてのテーブルが必要なため、APCのソリューションを使用してください。大きさの順にテーブルをランク付けする
これはMAX(SEGMENT_NAME)KEEP(DENSE_RANK BY ORDER BY BYTES)とは何ですか? – user3661564
解決策は、あなたが思っていることをしません。 MAX(SEGMENT_NAME)は、最も大きな表の名前ではなく、アルファベット順に最後のセグメントの名前を返します。 – APC
@APC、max(segments_name)を書いておらず、 "keep ..."という式を扱いました –
使用分析機能:
SELECT
tablespace_name,segment_name,tab_size_mb
FROM
(
SELECT
tablespace_name,segment_name,bytes/1024/1024 tab_size_mb,
RANK() OVER (PARTITION BY tablespace_name ORDER BY bytes DESC) AS rnk
FROM dba_segments
WHERE segment_type='TABLE'
)
WHERE rnk=1;
あなたのソリューション.is rnk sqlまたはpl/sql関数に感謝します。 – user3661564
ランクはpl/sql関数です。 –
あなたが二回GROUP BYでTABLESPACE_NAMEを持っています。後者を削除します。 – jarlh
あなたの迅速な対応に感謝します。私は解決策を私の自己見つけるが、あなたもチェックします。 – user3661564
t1.tablespace_name、t1.mb/1024/1024、t2.segment_nameを選択します。(select tablespace_name、max(BYTES)はdba_segmentsからmbになります(SEGMENT_TYPE = 'TABLE'グループby tablespace_name)t1 内部結合dba_segments t2 on t1。 mb = t2.BYTES ここで、t2.segment_type = 'TABLE' – user3661564