Uzun SQL işi: VPN koptuğunda çalışmaya devam etsin
Kopan bir VPN, istemci hatasının yanıtlayamadığı bir soru bırakır: iş commit edildi mi? Uzun işleri kalıcı bir sahibe devredin ve yeniden denemeden önce uzlaştırın.
VPN, indeks yeniden oluşturmanın yirminci dakikasında kopar, SQL istemciniz bozuk bir bağlantı gösterir ve bariz sorunun o hatada yanıtı yoktur. İfade tamamlandı mı, geri alındı mı, yoksa sizsiz çalışmaya devam mı etti? Yeniden bağlanıp yeniden göndermek üç seçeneğin en kötüsüdür, çünkü tek bir belirsiz sonucu iki olası sonuca çevirir. Bir sonraki pencereden önce işi kalıcı bir sahibi olan bir şeye taşıyın.
Bağlantı hatasının size söylemedikleri
İstemci tarafındaki bir hata istemciyi tanımlar. Yuvaların kapandığını bildirir, sunucunun işlemle ne yaptığını değil. İfade hâlâ çalışıyor olabilir, bağlantı ölmeden hemen önce işlenmiş olabilir veya oturumu temizlenirken geri alınmış olabilir. Üçü de dizüstü bilgisayarınızda aynı mesajı üretir.
Bunu yalnızca sunucunun durumu çözebilir. Bir şeye karar vermeden önce oraya bakın.
İşi sunucu tarafındaki bir sahibe devredin
İnsan gözetimi gerektirmeyen işler için yürütmenin sahibi veritabanı ana makinesi olsun. SQL Server Agent işleri istek üzerine veya bir zamanlamaya göre çalıştırır ve her çalıştırmayı kaydeder, böylece işin yaşam döngüsü VPN oturumunuzdan bağımsızdır. İş kimliği tam olarak görevin gerektirdiği izinlere ihtiyaç duyar, bir yöneticinin tam etkileşimli bağlamına değil. Ardından dizüstü bilgisayar işi başlatır ve sonuçları okur, işi hayatta tutan süreç olmak yerine.
EXEC msdb.dbo.sp_start_job @job_name = N'nightly-customer-reindex';Agent'ın kullanılabilirliği dağıttığınız sürüme ve hizmete bağlıdır. Bunun her yerde var olduğunu varsaymak yerine platformunuzun gerçekten sunduğu mekanizmayı kullanın.
Veritabanına yakın bir atlama ana makinesi yolu kısaltır ve bulunmaya değer, ancak sahiplik sorusunu değiştirmez. Oturum yine de ağ bittiğinde biter. Onu gözlemlemek için kullanın, işi hayatta tutan şey olmak için değil.
Sonraki oturumun okuyabileceği bir kayıt bırakın
Bir iş adı veya tanımlayıcı, hedef veritabanı ve beklediğiniz sonucu kaydedin. O kayıt, başka bir oturumun veya başka bir kişinin, hatanın yanıtlayamadığı soruyu yanıtlamasını sağlar. O olmadan bir güncellemeye dair belirsiz bir anı ve denetlemenin hiçbir yolu kalmaz.
EXEC msdb.dbo.sp_help_jobhistory @job_name = N'nightly-customer-reindex';Geçmiş, her adımın sonucunu ve zamanını gösterir; bu tek bir başarı bayrağından daha faydalıdır. Veriyi değiştiren görevler için uygulamanın kendi doğrulamasını da ekleyin: satır sayısı, sağlama toplamı veya işin yazdığı bir durum satırı. İki bağımsız kayıt, yeniden denemeyi güvenli kılar ve kaydedilmiş iş geçmişi bunların ilkidir.
Yeniden göndermeden önce uzlaştırın
Gözlemci bağlantı kaybolduğunda, yenisini başlatmadan önce mevcut çalıştırmayı bulun. Adımlarının sonuçlarını okuyun ve işin işlenip işlenmediğine, kısmen tamamlandığına ya da hiç başlamadığına karar verin. Ancak o zaman iş akışının tanımladığı yeniden deneme kuralını uygulayın, çünkü körlemesine yeniden göndermek bir yüklemeyi ikiye katlayabilir veya ikinci kez yarı yolda başarısız olabilir.
Kalıcı sahibi ve denetlenebilir sonucu koruyun; kısa bir erişim arızası o zaman bir tahmin değil, bir zahmet olur. Tasarımın tüm amacı budur: iş, onu isteyen bağlantıdan daha uzun yaşamalıdır.