Outils de données SQL Server et fonctions de partition

16

Je crée un scénario de chargement de fenêtre coulissante et les fonctions de partition changeront leurs limites au fil du temps.

J'ai créé des fonctions de partition dans mon projet de base de données SQL Server Data Tools (SSDT) ​​avec des limites initiales codées en dur.

Cependant, au fur et à mesure que le temps passe et que les limites des fonctions de partition changent, les futures publications de la base de données SSDT reviendront aux limites d'origine.

Existe-t-il un moyen de gérer ce scénario avec élégance, éventuellement en désactivant la publication des fonctions de partition?

J'ai essayé de modifier la propriété Build Action des fonctions de partition dans SSDT, par défaut Build, en None, mais le projet ne parvient pas à se construire en raison d'une référence manquante dans les objets dépendants.

gonsalu
la source
4
J'ai toujours dit que le déploiement basé sur diff était fondamentalement cassé. Les migrations sont une métaphore de déploiement tellement supérieure !
Remus Rusanu
Les 'Ignorer les options d'index' doivent également être définies pour éviter que SSDT ne reconstruise votre index partitionné chaque fois que le déploiement est déclenché.

Réponses:

16

J'ai pu trouver une solution à mon problème - j'espère que cela aide quelqu'un d'autre.

Pour éviter que chaque publication de base de données ne recrée la fonction de partition, vous pouvez cocher l' option Ignorer les schémas de partition dans la boîte de dialogue Paramètres de publication avancés ( bouton Avancé ... dans la boîte de dialogue Publication de base de données).

D'après la description de l'option (soulignement le mien):

Spécifie si les différences dans les schémas de partition et les fonctions doivent être ignorées ou mises à jour lorsque vous publiez dans une base de données.

Cependant, si vous avez défini un objet partitionné (table ou index) avec une compression de page ou de ligne, bien que l' option Ignorer les schémas de partition ne recrée plus la fonction de partition, l'objet partitionné sera quand même recréé.

Cela se produit car l'objet partitionné est scripté avec la compression définie par partition , et puisque l'objet a un nombre de partitions différent de celui initialement défini, SSDT recrée l'objet lors de la publication. Par exemple (formaté):

WITH ( DATA_COMPRESSION = PAGE ON PARTITIONS (1)
     , DATA_COMPRESSION = PAGE ON PARTITIONS (2)
     , ...

Pour que cela ne se produise pas, vous pouvez également cocher l' option Ignorer les options de table , dans la même boîte de dialogue Paramètres de publication avancés - gardez à l'esprit que vous ignorerez d'autres options, telles que ALLOW_ROW_LOCKSet ALLOW_PAGE_LOCKS( référence des options de table ).

Boîte de dialogue Paramètres de publication avancés

gonsalu
la source
1
Google vient de me conduire ici. Superbe information, merci du partage.
jamiet
Notez que si vous utilisez la boîte de dialogue similaire dans les propriétés du projet -> page Débogage, les modifications seront enregistrées dans le fichier .sqlproj.user, MAIS uniquement lors du déchargement du projet.
Taran
3

Aïe, ce n'est pas une bonne situation. Autant que je sache, SSDT ne prend pas en charge cela. La meilleure solution de contournement à laquelle je peux penser est d'utiliser un script de pré-déploiement pour stocker les limites dans une table, puis de modifier la fonction de partition en utilisant ces valeurs dans le script de post-déploiement.

jamiet
la source
Ignorez ma réponse ici, jugeant la réponse de mon Gonsalu ci-dessus, j'avais clairement tort.
jamiet