Dalam server edisi SQL 2014 (12.0.2430.0 - belum ada SP1) dengan database dalam mode kompatibilitas 2012 (bekerja untuk membuatnya beralih ke 2014 ...) Saya memiliki beberapa objek kunci asing yang secara konsisten ditandai seperti not trusted
dalam database . Saya telah menjatuhkan dan membuat ulang mereka tanpa NOCHECK
opsi, tetapi dalam 5-10 menit mereka menjadi tidak dapat dipercaya lagi dan jika saya menghasilkan CREATE
skrip, hasilnya adalah:
ALTER TABLE [dbo].[Points] WITH NOCHECK
ADD CONSTRAINT [FK_BadgeId] FOREIGN KEY([BadgeId])
REFERENCES [dbo].[Badge] ([Id])
GO
Script buat yang digunakan adalah:
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
Tidak ada replikasi, tidak ada alat pihak ketiga, dan saya memonitor semua pernyataan DDL pada database sehingga bukan pengguna lain.
Saya dapat memeriksa kendala dengan baik (menggunakan WITH CHECK CHECK
masing-masing) tetapi mereka masih menjadi tidak dipercaya segera setelah itu. Hanya pekerjaan pemeliharaan yang dijalankan adalah Ola pada awal pagi dan ini terjadi sepanjang hari.
Memperbarui:
Jadi, setelah beberapa jejak untuk mempersempit kemungkinan, sepertinya a BULK INSERT
dapat menyebabkan FK
menjadi tidak dipercaya. Pertanyaan msdn ini menyatakan bahwa ini adalah rute yang valid untuk kunci menjadi tidak dipercaya, yang merupakan yang pertama kali saya dengar.
Jadi pertanyaan saya sekarang adalah, adakah strategi alternatif untuk menggunakan BULK INSERT
yang dapat mempertahankan is_trusted
status kunci asing ? Itu dieksekusi dalam konteks aplikasi yang berjalan beberapa kali per jam. Saya bisa meminta para pengembang untuk memasukkan pernyataan penyisipan mereka sebagai gantinya, tetapi saya lebih memilih untuk tidak menggunakan ultimatum untuk digunakan BULK INSERT
jika saya tidak harus melakukannya.
SqlBulkCopy
dengan efek yang sama, tetapi ada (setidaknya sekarang) pilihan untuk melakukan salinan massal sambil masih memeriksa kendala - yang berarti bahwa fasilitas salinan massal dapat melakukan pengecekan pada prinsipnya, kemungkinan besar bcp memiliki beberapa opsi untuk mengaktifkan bahwa. Siapa pun yang membuat mode non-pengecekan, standarnya harus dipukul di bagian muka.