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:
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