Objectif du jour, supprimer les vieilles données d’une table partitionnée.
1 – Affichage des partitions grâce à la requête fournie dans le Microsoft SQL Server 2008 R2 Unleashed
select convert(varchar(16), ps.name) as partition_scheme, p.partition_number, convert(varchar(10), ds2.name) as filegroup, convert(varchar(19), isnull(v.value, ''), 120) as range_boundary, str(p.rows, 9) as rows from sys.indexes i WITH (NOLOCK) join sys.partition_schemes ps WITH (NOLOCK) on i.data_space_id = ps.data_space_id join sys.destination_data_spaces dds WITH (NOLOCK) on ps.data_space_id = dds.partition_scheme_id join sys.data_spaces ds2 WITH (NOLOCK) on dds.data_space_id = ds2.data_space_id join sys.partitions p WITH (NOLOCK) on dds.destination_id = p.partition_number and p.object_id = i.object_id and p.index_id = i.index_id join sys.partition_functions pf WITH (NOLOCK) on ps.function_id = pf.function_id LEFT JOIN sys.Partition_Range_values v WITH (NOLOCK) on pf.function_id = v.function_id and v.boundary_id = p.partition_number - pf.boundary_value_on_right WHERE i.object_id = object_id('dw.maTable') and i.index_id in (0, 1) order by p.partition_number
Résultat :
Mon objectif c’est faire le grand ménage et donc supprimer toutes les partitions antérieures à la numéro 12.
Voilà le mode opératoire pour une partition :
1. Créer une table de staging vide, avec la même structure que votre table partitionnée (même clustered index…)
2. A l’aide de l’opérateur SWITCH, déplaçons nos données de la partition 3 vers la table dbo.tableStaging :
ALTER TABLE dw.faitComposant SWITCH PARTITION 3 TO dbo.tableStaging
On relance notre petit script de tout à l’heure et voici le résultat :
La table de Staging contient maintenant nos données et la partition 3 est vide.
3. Nous n’avons plus qu’à effectuer un Merge de la partition 3 afin de la faire effectivement disparaître.
ALTER PARTITION FUNCTION PartFaitComposant() MERGE RANGE (15)
Résultat :
Nous pouvons maintenant soit vider la table de staging, ou bien historiser nos données.
2 Comments
A noter que pour ne pas se taper la maintenance des création de tables de staging tu peux utiliser le package de SQLCAT: http://sqlcat.com/sqlcat/b/toolbox/archive/2009/02/23/sql-server-partition-management-tool.aspx dispo ici http://sqlpartitionmgmt.codeplex.com/. 🙂
Yes !