Nick ve Martin tarafından belirtildiği gibi, sorgunuzun nihai durumu, SQL Server'ın sorgu tamamlanmadan önce ağ kablosu çekme hakkında bilgi sahibi olup olmadığına bağlıdır. Gönderen Books Online (Ben bunun için eşdeğer konular içinde olduğunu ilginç bulduğu halde 2000 , 2005 , 2008 ve 2008 R2 değil 2012 veya 2014 ama):
Bir hata, işlemin başarıyla tamamlanmasını engelliyorsa, SQL Server işlemi otomatik olarak geri alır ve işlem tarafından tutulan tüm kaynakları serbest bırakır. İstemcinin Veritabanı Altyapısı örneğine ağ bağlantısı kesilirse, ağ kopma örneğini bildirdiğinde, bağlantının bekleyen tüm işlemleri geri alınır. İstemci uygulaması başarısız olursa veya istemci bilgisayar kapanırsa veya yeniden başlatılırsa, bu da bağlantıyı keser ve Veritabanı Altyapısı örneği, ağ kesintiyi bildirdiğinde bekleyen tüm bağlantıları geri alır. İstemci uygulama oturumunu kapatırsa, bekleyen tüm işlemler geri alınır.
(Bir kenara, son cümledeki kelime bağlantıları muhtemelen işlemler anlamına geliyordu . Bir kişinin bağlantıyı nasıl geri aldığını bilmiyorum.)
Benzer şekilde, SQL Server, beklenmedik bir şekilde kapatıldıktan sonra kurtarma sırasında işlemleri geri alabilir veya yineleyebilir ve bu, kapatma anındaki işlemin durumuna bağlı olacaktır. İnsanların bu taktiği, yapmaya çalıştığınız şeyi (işlemleri iptal etmek için) kullandıklarını gördüm ve sunucu yeniden başladığında işin çoğu basitçe yeniden yapıldı (bu yüzden diz-pislik reaksiyonunun net etkisi çok daha yakındı beklediklerinden sıfıra).
Buna tabi olmak yerine, bir ağ kablosunun sorulması veya makinenin kapatılması gibi panik içinde sert şeyler yapmak yerine, gelecekte önemli sistemlere karşı geçici sorgular yürütme konusunda daha iyi bir disipline sahip olmanızı öneririm. Örneğin:
UPDATE dbo.sometable
-- where *oops* I forgot this part
Al bunu:
BEGIN TRANSACTION;
UPDATE dbo.sometable
-- where *oops* I forgot this part
-- COMMIT TRANSACTION;
-- ROLLBACK TRANSACTION;
Ardından, güncelleme gerçekten doğruysa, COMMIT
parçayı vurgulayıp çalıştırabilirsiniz. Değilse , parçayı sakin bir şekilde vurgulayabilir ROLLBACK
ve çalıştırabilirsiniz. Şablonunuzu bu ortak metni içerecek şekilde düzenlemek için SSMS Araçlar Paketi gibi eklentileri bile kullanabilirsiniz New Query
.
Şimdi yine sorguyu çalıştırın ve sonra da bu olay derde olabilir yok şimdi işlem diğer kullanıcıları engellediği için, ya geri alma taahhüt veya. Ancak bu, verileri değiştirilemez bir şekilde değiştirmekten daha iyidir.
Ve elbette, her zaman olduğu gibi, güvenebileceğiniz bir yedeğiniz var.