Jak sprawdzić czy grupa tabeli ma takie same partycje

wpis w: t-sql | 0

Załóżmy, że w bazie wiele tabel partycjonowanych w ten sam sposób, ale do każdej z nich używamy schematu partycjonowania o dedykowanej nazwie. Chciali byśmy kontrolować, czy liczba partycji na tych tabelach jest taka sama i czy daty poszczególnych przedziałów funkcji partycjonującej się nie rozjechały.

Mogą w tym pomóc dwa poniższe zapytania:

select so.name , count(*)
from sys.objects as so
join sys.partitions as sp
on so.object_id = sp.object_id
where so.type = 'U'
and sp.index_id < 2
group by so.name

select rv.value AS PartitionFunctionValue, count(*)
    from sys.objects as so 
    join sys.indexes as i 
on so.object_id = i.object_id
    join sys.partitions sp 
on so.object_id=sp.object_id and i.index_id = sp.index_id 
    join sys.partition_schemes ps 
on ps.data_space_id = i.data_space_id  
    join sys.partition_functions pf 
on pf.function_id = ps.function_id  
    left join sys.partition_range_values rv 
on rv.function_id = pf.function_id AND rv.boundary_id = sp.partition_number
where so.type = 'U'
  and sp.index_id < 2
group by rv.value


Jeżeli w każdym zapytaniu w drugiej kolumnie mamy tylko jedną wartość i jest ona równa ilości wierszy w drugim zapytaniu, to nasze tabele są w porządku.
Przykładowo:

tabele_partycje

W pierwszym zapytaniu w drugiej kolumnie jest tylko wartość 27 i podobnie w drugim zapytaniu wszędzie jest wartość 6. Do tego pierwsze zapytanie zwraca 6 wierszy, a drugie 27.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.