it-swarm-eu.dev

Jak získám seznam všech rozdělených tabulek v databázi?

Jak získám seznam všech rozdělených tabulek v databázi?

Na které systémové tabulky/DMV bych se měl dívat?

24
RK Kuppala

Tento dotaz by měl poskytnout, co chcete:

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

The sys.partitions Zobrazení katalogu poskytuje seznam všech oddílů pro tabulky a většinu indexů. JOIN JOIN, že s sys.tables získat tabulky.

Všechny tabulky mají alespoň jeden oddíl, takže pokud hledáte konkrétně rozdělené tabulky, budete muset tento dotaz odfiltrovat na základě sys.partitions.partition_number <> 1 (u tabulek bez oddílů, partition_number se vždy rovná 1).

22
Thomas Stringer

Methinks lepší dotaz je následující:

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

Tím se podíváme na „správné“ místo pro identifikaci schématu rozdělení: sys.partition_schemes , má správnou mohutnost (není potřeba pro distinct), zobrazuje pouze rozdělený objekt (není potřeba filtrující klauzuli where) promítá název schématu a název schématu oddílu. Všimněte si také, jak tento dotaz zdůrazňuje chybu v původní otázce: nejsou to tabulky , které jsou rozděleny, ale indexy (a to zahrnuje index 0 a 1, aka. halda a seskupený index). Tabulka může mít více indexů, některé rozdělené, jiné ne.

29
Remus Rusanu

A co tedy kombinace 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    
3
guest