データベース内のすべてのパーティションテーブルのリストを取得するにはどうすればよいですか?


回答:


21

このクエリはあなたが欲しいものを与える必要があります:

select distinct t.name
from sys.partitions p
inner join sys.tables t
on p.object_id = t.object_id
where p.partition_number <> 1

sys.partitionsカタログビューは、テーブルとインデックスのほとんどすべてのパーティションのリストが表示されます。sys.tablesテーブルを取得するためにそれを結合するだけです。

すべてのテーブルには少なくとも1つのパーティションがあるため、パーティションテーブルを特に探している場合は、このクエリをsys.partitions.partition_number <> 1(に基づいてフィルタリングする必要があります(非パーティションテーブルの場合、partition_number常に1に等しくなります)。


これは5万個のオブジェクトを返しましたが、それについて何かが私には正しくないと感じています。現在、SQL 2005から2008 R2へのPeoplesoft Finance dbアップグレードの最中です。新しいバージョンのピープルツールはパーティションテーブルをサポートしていないようです。分割されたテーブルを識別する他の方法はありますか?
RK Kuppala

1
@yogirk申し訳ありませんが、タイプミスがあります。編集をご覧ください。partition_idWHERE句の代わりに必要partition_numberです。謝罪いたします。
トーマスストリンガー

編集のためのおかげで、私は:)期待と同じように、取り組むためのいくつかのテーブルがある嬉しい
RK Kuppala

@yogirkそれを楽しんでください!
トーマスストリンガー

4
ここにエラーがあります-テーブルはまだパーティション化できます(PFとPSを使用)が、単一のパーティションがあります。だから、これらのテーブルのクエリは、間違った結果を返します
オレグたDok

29

より良いクエリは次のように考えられます:

select object_schema_name(i.object_id) as [schema],
    object_name(i.object_id) as [object],
    i.name as [index],
    s.name as [partition_scheme]
    from sys.indexes i
    join sys.partition_schemes s on i.data_space_id = s.data_space_id

これは、パーティションスキームを識別するために「適切な」場所を確認します:sys.partition_schemes、適切なカーディナリティを持ち(の必要なしdistinct)、パーティション化されたオブジェクトのみを表示し(フィルターwhere句は不要)、スキーマ名とパーティションスキーム名を投影します。また、このクエリが元の質問の欠陥をどのように強調するかに注意してください。パーティション化されたテーブルではなく、インデックス(これにはインデックス0と1、別名ヒープとクラスタ化インデックスが含まれます)。テーブルには複数のインデックスを含めることができ、一部はパーティション化され、一部はそうではありません。


3
これは、代わりに第一1の右の答えです-テーブルではなく、ファイルグループのパーティション構成上にある場合を考慮に入れて
オレグたDok

3

それでは、2を組み合わせてみてください。

select 
    object_schema_name(i.object_id) as [schema],
    object_name(i.object_id) as [object_name],
    t.name as [table_name],
    i.name as [index_name],
    s.name as [partition_scheme]
from sys.indexes i
    join sys.partition_schemes s on i.data_space_id = s.data_space_id
    join sys.tables t on i.object_id = t.object_id    
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.