Dans un serveur de l'édition SQL 2014 (12.0.2430.0 - pas encore de SP1) avec une base de données en mode de compatibilité 2012 (travail pour le faire passer à 2014 ...) J'ai une poignée d'objets de clé étrangère qui sont systématiquement marqués comme not trusted
dans la base de données . Je les ai supprimés et recréés sans NOCHECK
options, mais en 5 à 10 minutes, ils ne sont plus fiables et si je génère un CREATE
script, il se présente comme suit:
ALTER TABLE [dbo].[Points] WITH NOCHECK
ADD CONSTRAINT [FK_BadgeId] FOREIGN KEY([BadgeId])
REFERENCES [dbo].[Badge] ([Id])
GO
Le script de création utilisé est:
ALTER TABLE [dbo].[Points]
ADD CONSTRAINT [FK_BadgeId] FOREIGN KEY([BadgeId])
REFERENCES [dbo].[Badge] ([Id])
GO
ALTER TABLE [dbo].[Points] CHECK CONSTRAINT [FK_BadgeId]
GO
Il n'y a pas de réplication, il n'y a pas d'outils tiers et je surveille toutes les instructions DDL sur la base de données, donc ce n'est pas un autre utilisateur.
Je suis en mesure de vérifier très bien les contraintes (en utilisant WITH CHECK CHECK
sur chacune) mais elles ne sont toujours pas fiables peu de temps après. Seuls les travaux de maintenance exécutés sont ceux d'Ola au début de la matinée et cela se produit tout au long de la journée.
Mise à jour:
Donc, après quelques traces pour restreindre les possibilités, il semble que cela BULK INSERT
puisse faire en sorte que le FK
devienne non fiable. Cette question msdn indique qu'il s'agit d'un itinéraire valide pour que la clé ne soit pas approuvée, ce qui est la première fois que j'en entends parler.
Ma question est donc la suivante: existe-t-il une stratégie alternative à l'utilisation BULK INSERT
qui peut conserver le is_trusted
statut de clé étrangère ? Il est exécuté dans le contexte d'une application exécutée plusieurs fois par heure. Je pourrais demander aux développeurs de grouper leurs instructions d'insertion à la place, mais je préférerais ne pas mettre un ultimatum sur l'utilisation BULK INSERT
si je ne le dois pas.
SqlBulkCopy
avec le même effet, mais il y a (au moins maintenant) une option pour faire la copie en bloc tout en vérifiant les contraintes - ce qui signifie que la fonction de copie en bloc peut effectuer la vérification en principal, bcp a probablement une option à activer cette. Celui qui a fait le mode non-vérification par défaut doit être frappé au visage.