Saya selalu berpikir bahwa memperbarui prosedur tersimpan adalah sesuatu yang bisa saya lakukan ketika pengguna aktif menggunakan sistem.
Tapi saya saat ini sedang menguji pembaruan untuk prosedur yang tersimpan dan sementara panggilan berjalan lama ke sproc sedang dieksekusi (itu 4 + menit ke dalam panggilan), saya memperbarui sproc. (Saya berencana untuk mencoba rencana kueri yang berbeda di jendela terpisah.)
Ketika saya kembali ke yang lama berjalan, saya memiliki kesalahan ini:
The definition of object 'MySprocName' has changed since it was compiled.
Kesalahan ini tampaknya mengatakan bahwa setiap sproc yang sedang dieksekusi secara aktif akan gagal jika definisi sproc itu diperbarui. (Saya berpikir bahwa sekali sproc mulai berjalan, ia akan menggunakan rencana itu untuk sisa menjalankan meskipun perubahan definisi.)
Apakah ini benar? Apakah saya perlu memiliki waktu henti untuk memperbarui definisi sproc?
sumber
WITH RECOMPILE
? Ini adalah opsi tingkat prosedur untuk mengatur prosedur untuk dikompilasi ulang setelah setiap kali dijalankan. Ini berarti bahwa rencana akan selalu mengkompilasi ulang sehingga menghindari rencana cache digunakan kembali.Jawaban:
Ya memang benar bahwa Anda tidak boleh mengubah prosedur tersimpan yang aktif berjalan, karena SQL Server tidak menyukainya.
Sedangkan untuk mengambil downtime, ya, Anda tidak harus membuat perubahan pada prosedur tersimpan yang sering digunakan dalam lingkungan produksi yang sibuk selama jam operasional sebagai praktik terbaik.
sumber