In un server SQL 2014 Edition (12.0.2430.0 - ancora nessun SP1) con un database in modalità compatibilità 2012 (lavorando per passare al 2014 ...) Ho una manciata di oggetti chiave esterna che sono costantemente contrassegnati come not trusted
nel database . Li ho rilasciati e ricreati senza NOCHECK
opzioni, ma entro 5-10 minuti diventano nuovamente non attendibili e se generi uno CREATE
script viene visualizzato come:
ALTER TABLE [dbo].[Points] WITH NOCHECK
ADD CONSTRAINT [FK_BadgeId] FOREIGN KEY([BadgeId])
REFERENCES [dbo].[Badge] ([Id])
GO
Lo script di creazione utilizzato è:
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
Non c'è replica, non ci sono strumenti di terze parti e sto monitorando tutte le istruzioni DDL sul database, quindi non è un altro utente.
Sono in grado di controllare bene i vincoli (usando WITH CHECK CHECK
su ciascuno) ma diventano poco attendibili poco dopo. Solo i lavori di manutenzione in esecuzione sono di Ola all'inizio del mattino e questo accade durante il giorno.
Aggiornare:
Quindi, dopo un paio di tracce per restringere le possibilità, sembra che un BULK INSERT
potrebbe FK
non fidarsi. Questa domanda msdn afferma che questa è una strada valida per rendere la chiave non affidabile, che è la prima volta che ne ho sentito parlare.
Quindi la mia domanda ora è: esiste una strategia alternativa all'utilizzo in BULK INSERT
grado di mantenere lo is_trusted
stato di chiave esterna ? Viene eseguito nel contesto di un'applicazione in esecuzione più volte all'ora. Potrei avere gli sviluppatori in batch le loro istruzioni di inserimento, ma preferirei non mettere un ultimatum sull'uso BULK INSERT
se non dovessi.
SqlBulkCopy
con lo stesso effetto, ma c'è (almeno ora) un'opzione per fare la copia in blocco controllando ancora i vincoli - il che significa che la funzione di copia in blocco può fare il controllo in linea di principio, molto probabilmente bcp ha qualche opzione per abilitare quello. Chiunque abbia impostato la modalità di non controllo sull'impostazione predefinita deve essere preso a pugni in faccia.