2

Quelle est la meilleure pratique pour définir la propriété DacUpgradeOptions.IgnoreDataLoss dans les mises à niveau automatiques de l'application de niveau de données (DACPAC)?Meilleure pratique pour définir l'indicateur DacUpgradeOptions.IgnoreDataLoss en déploiement continu?

Sur la base de la documentation MSDN (link), si IgnoreDataLoss est vrai , la mise à niveau procédera, même si certaines des opérations entraînent la perte de données. Si Faux, ces opérations mettront fin à la mise à niveau. Par exemple, si une table de la base de données en cours n'est pas présente dans le schéma du nouveau DAC, la table sera supprimée si True est spécifié. La valeur par défaut est True. Cependant, dans l'environnement avec une livraison continue où chaque changement de base de données est automatiquement déployé tout le long du pipeline (CI -> Test -> UI-Test) et finalement à l'environnement de production, il semble être une mesure de sécurité IgnoreDataLoss est False, car nous ne souhaitons pas que la perte/dérive des données se produise dans la base de données de production. Si IgnoreDataLoss est False et qu'un développeur valide une modification de la base de données qui introduit une perte de données, la génération de CI/Test échouera, ce qui nous permettra de l'attraper avant que ce changement atteigne la production.

Il y a cependant un problème avec cette approche, car sont fois où la perte de données est intentionnelle. Par exemple, nous pourrions avoir besoin de supprimer une table spécifique qui n'est plus utilisée. Si IgnoreDataLoss est False, la génération échoue et les modifications DACPAC ne sont jamais appliquées, car une perte de données potentielle est détectée (même si cette perte est intentionnelle). Dans ce scénario, nous voudrions que IgnoreDataLoss soit True.

Je me demandais quelle serait la meilleure pratique pour cela, en particulier dans un environnement où nous déployons continuellement et automatiquement. Toute suggestion serait grandement appréciée. Merci!

Répondre

2

Dans la plupart des cas, nous pouvons définir IgnoreDataLoss sur false. Cela permet de s'assurer que nous ne modifions pas accidentellement la base de données et n'introduisons pas de perte de données. Lorsque nous voulons supprimer une table, nous pouvons supprimer manuellement la table (n'utilisez pas DACPAC). Ou nous pouvons temporairement définir IgnoreDataLoss sur true pour cette opération de mise à niveau particulière.

Meilleures salutations,

Ming Xu.

Questions connexes