Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Ayrıntılar
| Özellik | Değer |
|---|---|
| Ürün Adı | SQL Server |
| Olay Kimliği | 3617 |
| Olay Kaynağı | MSSQLSERVER |
| Bileşen | SQLEngine |
| Sembolik Ad | SYS_ATTN |
| İleti Metni |
Explanation
Yürütmenin ortasındaki bir sorgu uygulama veya kullanıcı tarafından iptal edildiğinde veya bağlantı kesildiğinde 3617 hatası oluşur. Uygulamadan gelen bu sorgu iptali, Veritabanı Altyapısı'nda bir Dikkat olayının oluşmasına neden olur. Dikkat olayı, istemci uygulamasının sorgu yürütmeyi sonlandırma isteğini kaydeden bir SQL Server olayıdır. Genişletilmiş Olaylar veya SQL İzleme dikkat olay sınıfını kullanarak SQL Server tarafında bir Dikkat olayını izleyebilirsiniz. Dikkatler dahili olarak hata 3617 olarak gösterilir.
Dikkat (sorgu iptali), SQL Server tarafından işlenen en yaygın TDS olayı arasındadır. Sorgu iptal isteği geldiğinde, oturum/istek için dikkat biti ayarlanır. Oturum verim noktalarını işlerken dikkatler alınır ve kabul edilir. Dikkatler ve diğer bileşenlerle nasıl etkileşime geçtikleri hakkında daha fazla bilgi için bkz . Görevler, Çalışanlar, İş Parçacıkları, Zamanlayıcı, Oturumlar, Bağlantılar, İstekler; bunların hepsi ne anlama geliyor?
Kullanıcı eylemi
Nedenlerin özeti:
| Nedeni | Description |
|---|---|
| Sorguların beklenen süre içinde tamamlandığından emin olun (yapılandırılmış sorgu zaman aşımı değerinden az) | Dikkat olaylarının en yaygın nedeni, sorgu zaman aşımı değerlerinin aşılması nedeniyle sorguların uygulama tarafından otomatik olarak sonlandırılmasıdır. Sorgu/komut zaman aşımı değeri 30 saniye olarak ayarlanırsa ve sorgu istemci uygulamasına tek bir veri paketi bile döndürmezse, ikincisi sorguyu iptal eder. Böyle durumlarda en iyi yaklaşım, sorgunun neden bu kadar uzun sürdüğünü anlamak ve süresini azaltmak için uygun adımları atmaktır. |
| Sorgu veya komut zaman aşımını artırma | İptal edilen sorgunun önceden belirlenmiş temel süre içinde çalıştığını ancak bir komut zaman aşımına yine de ulaşıldığını belirlerseniz, veritabanı uygulamasında zaman aşımı değerini artırmayı düşünebilirsiniz. |
| Kullanıcıların sorgu yürütmeyi el ile iptal etip iptal etmediğini öğrenin | Bazı durumlarda, kullanıcı sorguyu iptal ettiği için dikkat olayı tetiklenebilir. Böyle durumlarda, kullanıcıların beklentilerinin sorgunun gerçek hızını aşıp aşmadığı belirlenebilir ve sorguyu ayarlayarak veya beklenen temeli belgeleyerek bunları ele alabilir. |
| Uygulamanın veya işletim sisteminin sorguyu veya bağlantıyı beklenmedik bir şekilde sonlandırıp sonlandırmadığını veya uygulamanın kendisinin sonlandırılıp sonlandırıldığını öğrenin | Uygulama ucunda neler olduğunu anlamak için durumu araştırın. Uygulama günlüklerini veya Sistem günlüklerini incelemek olası kök neden hakkında ipuçları sağlayabilir. |
Dikkat ve işlemler
Genellikle, uygulama bir sorgu zaman aşımına ulaştığında ve sorguyu iptal ettiğinde Dikkat olayları tetiklenir. Dikkat olayı oluştuğunda SQL Server, açık işlemleri otomatik olarak geri almaz. İşlemi geri almak uygulamanın sorumluluğundadır ve işlemenin birkaç yaygın yolu vardır:
SQL Server'a bağlanırken SET XACT_ABORT etkinleştirerek işlem geri alma işlemini denetleyin. Bir uygulama bunu yapmazsa, yalnız bırakılmış bir işlem sonuçlanır.
Daha yaygın olarak, uygulamalar kullanarak
try.. catch... finallyhataları işler. bloğundatryişlemi açarsınız ve hata oluşursa, catch veya finally bloğundaki işlemi geri alırsınız.
İşte bir örnek:
using (SqlConnection connection = new SqlConnection(sqlConnectionString))
{
SqlTransaction transaction;
SqlCommand command = connection.CreateCommand();
connection.Open();
transaction = connection.BeginTransaction("UpdateTran_Routine1");
command.Connection = connection;
command.Transaction = transaction;
try
{
//update one of the tables
command.CommandText = "update dl_tab1 set col1 = 987";
command.ExecuteNonQuery();
transaction.Commit();
}
catch (SqlException ex)
{
// Attempt to roll back the transaction.
try
{
transaction.Rollback();
}
catch (Exception ex2)
{
// This catch block will handle any errors that may have occurred
// on the server that would cause the rollback to fail, such as
// a closed connection.
Console.WriteLine("Rollback Exception Type: {0}", ex2.GetType());
Console.WriteLine(" Message: {0}", ex2.Message);
}
}
}