Je travaille sur un grand projet ETL et DW où nous utilisons le contrôle TFS / source avec SSIS et SSDT.
Aujourd'hui, j'ai découvert que pendant qu'un package SSIS effectue un BULK INSERT dans une table de base de données, il n'est pas possible d'effectuer une comparaison de schéma SSDT avec cette base de données. C'est regrettable, car certains de nos packages prennent un certain temps. Nous voulons utiliser la fonction Schema Compare pour détecter les modifications apportées à la structure de la base de données afin de les enregistrer dans notre projet SSDT pour le contrôle de version de la base de données.
En y regardant un peu plus, j'ai trouvé que la fonction de comparaison de schéma dans SSDT exécute un script SQL qui appelle la OBJECTPROPERTY()
fonction système sur les tables de la base de données. Plus précisément dans mon cas, tout appel à OBJECTPROPERTY(<object_id>, N'IsEncrypted')
semble être bloqué, lorsqu'il <object_id>
fait référence à une table en cours d'insertion en bloc.
Dans Visual Studio, la comparaison de schéma SSDT expire simplement après un certain temps et prétend qu'aucune différence n'a été détectée.
Existe-t-il une solution à ce problème dans SSDT, ou devrais-je essayer de déposer un rapport de bogue MS Connect?
Alternativement, puisque le BULK INSERT se produit à partir d'un package SSIS, existe-t-il peut-être un moyen de faire cette insertion sans verrouiller les OBJECTPROPERTY
appels sur la table? Edit: dans les destinations SSIS OLE DB, nous pouvons supprimer la coche de "Lock Table", qui fait ce qu'il dit, mais cela peut nuire aux performances dans certaines situations. Je suis beaucoup plus intéressé par une solution qui permet à la comparaison de schémas SSDT de faire son travail, même si certains objets sont verrouillés.