Como obtenho uma lista de todas as tabelas particionadas no meu banco de dados?
Quais tabelas de sistema / DMVs devo observar?
Como obtenho uma lista de todas as tabelas particionadas no meu banco de dados?
Quais tabelas de sistema / DMVs devo observar?
Respostas:
Esta consulta deve fornecer o que você deseja:
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
A sys.partitions
exibição do catálogo fornece uma lista de todas as partições para tabelas e a maioria dos índices. Apenas junte-se a isso sys.tables
para obter as mesas.
Todas as tabelas possuem pelo menos uma partição; portanto, se você estiver procurando especificamente por tabelas particionadas, terá que filtrar essa consulta com base em sys.partitions.partition_number <> 1
(para tabelas não particionadas, partition_number
sempre será igual a 1).
partition_id
na sua cláusula WHERE, você precisa partition_number
. Me desculpe.
Parece que uma consulta melhor é a seguinte:
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
Ele examina o local 'adequado' para identificar o esquema de partição: possui a cardinalidade correta (sem necessidade distinct
), mostra apenas o objeto particionado (sem necessidade de uma where
cláusula de filtragem ), projeta o nome do esquema e o nome do esquema de partição. Observe também como esta consulta destaca uma falha na pergunta original: não são as tabelas que são particionadas, mas os índices (e isso inclui os índices 0 e 1, também conhecido como heap e índice clusterizado). Uma tabela pode ter vários índices, alguns particionados e outros não.
Bem, então que tal combinar o 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