Oturum kill durumunda olduğu için yürütme devam edilemiyor. kümelenmiş dizin oluştururken


11

Kümelenmiş bir dizin oluşturmaya çalışırken aşağıdaki hatayı alıyorum

Açıklama sona erdirildi.
Msg 596, Seviye 21, Durum 1, Satır 0
Oturum kill durumunda olduğu için yürütme devam edilemiyor.

Msg 0, Seviye 20, Durum 0, Satır 0
Geçerli komutta ciddi bir hata oluştu. Sonuçlar varsa atılmalıdır.

Dizin:

BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT

BEGIN TRANSACTION
GO

CREATE CLUSTERED INDEX IX_CO_DES_INPUT 
ON dbo.CO_DES_INPUT(DESIGN_ID, PRODUCT_INPUT_NUM, INPUT_NAME)
          WITH(STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, 
               ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO

ALTER TABLE dbo.CO_DES_INPUT 
  SET (LOCK_ESCALATION = TABLE)
GO
COMMIT

Windows NT 6.3 (Build 9600:) üzerinde Microsoft SQL Server 2012 (SP3) (KB3072779) - 11.0.6020.0 (X64) Standard Edition (64-bit) kullanıyorum

Koştum

DBCC CheckDB ('concept-test') WITH NO_INFOMSGS, ALL_ERRORMSGS  

ve sorun bulamadı

Bu hatayı aldığımdan beri veritabanımın bozuk olduğundan korkuyorum. Sorunumu nasıl düzeltebilirim ve bu dizini masaya nasıl ekleyebilirim?


Aynı tabloya kümelenmemiş bir dizin eklemek için gittiğimde aynı hatayı alıyorum. İlk önce kümelenmemiş eklemeyi denedim. Bu hatayı aldım. Bu yüzden dizin bozulmasına sahip olabileceğimi düşündüm ve tüm dizinleri bırakıp yeniden oluşturmaya çalıştım. O zaman ben ilk başta gönderdiğim hata mesajını aldım. Idera SQL Bütünlüğü denetimi, bu tablo için dizinlerde yolsuzluk bulduğunu ekleyebilirsiniz. Şimdi soru şu, bunu nasıl düzeltebilirim.
user2904235

Bir kısıtlama ihlali veya bunun gibi bir şey olduğunu tespit ettiğinde operasyonunuzun başarısız olması mümkün müdür? Lütfen şuna bir göz atın: http://stackoverflow.com/questions/34518205/c-sharp-cmd-executescalar-cannot-continue-the-execution-b
Victor Barajas

Yanıtlar:


4

Sadece bir işaretçi yeniden: SQL Server 2017 (burada bu hatayı vuruyordum) ve 2016'nın bazı sürümleri diğerlerini biraz zaman kazanmak için:

SQL Server 2017 CU8'den (ayrıca 2016 SP1 CU9 ve 2016 SP2 CU1) önce, DML işlemi otomatik bir istatistik güncellemesine neden olduysa artımlı istatistiklere sahip bölümlenmiş tabloların bu hatayı üretmesi sorunu oluştu.

En az KB sayfası burada:

https://support.microsoft.com/en-us/help/4163478/fix-access-violation-when-incremental-statistics-automatically-updated

Yukarıda listelenenden daha yeni bir CU yüklemek sorunu çözer.


3

Bunun nedeni Endeksin Bozulması,

Bunu yönetmenin en iyi yolu, bozuk olan Eski Dizini Bıraktır.

DROP INDEX dbo.CO_DES_INPUT.IX_CO_DES_INPUT 

Soruyu sorularda çalıştır seçeneğinden, tüm kayıtlar benzersizse düzgün çalışmalıdır. belirtilen sütunlarda.


3

Her Zaman Açık Kullanılabilirlik Grupları için yapılandırılmış bir veritabanında, Kullanılabilirlik Grubu SENKRON MOD modundaysa ve ikinciller çevrimdışı duruma geçtiğinde veya askıya alındıysa da bu davranışla karşılaşabilirsiniz. Bu, uygulama sunucuları tarafından yaşanan bir yan etkidir. Teşekkürler,


2

Yanlışlıkla bulduğum bir şey: Dizinlenmiş bir görünümde dizinleri devre dışı bırakırken / yeniden oluştururken, kümelenmiş dizinleri oluşturmadan veya kümeyi yeniden oluşturmadan önce kümelenmemiş dizinlerden bir veya daha fazlasını yeniden oluşturmaya çalışırsanız aynı hatayı alırsınız.


2

AG veritabanlarından birini kullanarak Always On AG Listener kullanarak çalışan bir sorgu olduğunda her zaman bu hatayı alıyorum ve bir yük devretme var:

Net SqlClient Veri Sağlayıcısı: Msg 596, Seviye 21, Durum 1, Satır 0 Oturum kill durumunda olduğu için yürütme devam edilemiyor. Net SqlClient Veri Sağlayıcısı: Msg 0, Seviye 20, Durum 0, Satır 0 Geçerli komutta ciddi bir hata oluştu. Sonuçlar varsa atılmalıdır.

Çoğaltmak çok kolay! Tabii ki, başka nedenler olabilir ama bu tür bir hata alıyorum belirli bir örneğidir ...


0

Bu sorunu Eşzamansız Bağlantılar kullanan oldukça küçük bir C # programında yeniden oluşturabilirim, ancak% 100 neden olduğundan emin değilim. İşte başkalarının denemek istediği durumda benim repro programım - Bunun olması için mükemmel bir şekilde sıralanması gereken bir dizi şey olduğundan şüpheleniyorum:

  • Bağlantı havuzu oluşturma etkin
  • Bağlantı havuzundaki kimliğe bürünme özelliğini kullanma, bağlantı havuzundaki kimliğe bürünme bağlamının geri alınmasına izin verme
void Main()
{
    var impersonateMyself = System.Security.Principal.WindowsIdentity.GetCurrent().Name;

    var testCommand = "SELECT TOP 1 * FROM sys.objects";
    var calls = Enumerable.Repeat(
        $@"{testCommand};",
        10
    );
    var impersonatedCalls = Enumerable.Repeat(
        $@"EXECUTE AS LOGIN = '{impersonateMyself} WITH NO REVERT';  {testCommand}; REVERT;",
        10
    );
    Dictionary<string, object> dict = new Dictionary<string, object>()
    {
    };

    // Scenario 1: Impersonated Calls, With connection pooling -- will randomly fail
    Parallel.ForEach(
        impersonatedCalls,
        c => new SqlAsync("Data Source=devsql2;Initial Catalog=Test;Integrated Security=true;Max Pool Size=2;").AsyncSqlCall<List<A>>(c, CommandType.Text, handleResultAsync, dict).Dump());

    Parallel.ForEach(
        impersonatedCalls,
        c => new SqlSync("Data Source=devsql2;Initial Catalog=Test;Integrated Security=true;Max Pool Size=2;").SyncSqlCall<List<A>>(c, CommandType.Text, handleResultSync, dict).Dump());


    // Scenario 2: Normal calls, with connection pooling -- should succeed every time
    Parallel.ForEach(
        calls,
        c => new SqlAsync("Data Source=devsql2;Initial Catalog=Test;Integrated Security=true;Max Pool Size=2;").AsyncSqlCall<List<A>>(c, CommandType.Text, handleResultAsync, dict).Dump());

    Parallel.ForEach(
        calls,
        c => new SqlSync("Data Source=devsql2;Initial Catalog=Test;Integrated Security=true;Max Pool Size=2;").SyncSqlCall<List<A>>(c, CommandType.Text, handleResultSync, dict).Dump());



// Scenario 3: Impersonated Calls, WITHOUT connection pooling -- should succeed every time
    Parallel.ForEach(
        impersonatedCalls,
        c => new SqlAsync("Data Source=devsql2;Initial Catalog=Test;Integrated Security=true;Max Pool Size=200;").AsyncSqlCall<List<A>>(c, CommandType.Text, handleResultAsync, dict).Dump());

    Parallel.ForEach(
        impersonatedCalls,
        c => new SqlSync("Data Source=devsql2;Initial Catalog=Test;Integrated Security=true;Max Pool Size=200;").SyncSqlCall<List<A>>(c, CommandType.Text, handleResultSync, dict).Dump());
}

public class SqlSync
{
    private readonly string _connectionString;
    public int Timeout {get; set;}

    public SqlSync(string connString)
    {
        _connectionString = connString;
        Timeout = 30;
    }

    public T SyncSqlCall<T>(string commandText, CommandType type, Func<SqlDataReader, T> handleResult, Dictionary<string, object> parameters = null)
    {
        using (SqlConnection conn = new SqlConnection(_connectionString))
        using (SqlCommand cmd = new SqlCommand(commandText, conn))
        {
            cmd.CommandTimeout = Timeout;
            cmd.CommandType = CommandType.Text;

            if (parameters != null)
            {
                foreach (KeyValuePair<string, object> kvp in parameters)
                    cmd.Parameters.AddWithValue(kvp.Key, kvp.Value ?? DBNull.Value);
            }

            conn.Open();

            using (var rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
                return handleResult(rdr);
        }
    }
}

public class SqlAsync
{
    private readonly string _connectionString;
    public int Timeout { get; set; }

    public SqlAsync(string connString)
    {
        _connectionString = connString;
        Timeout = 30;
    }

    public Task<T> AsyncSqlCall<T>(string sp, CommandType commandType, Func<SqlDataReader, Task<T>> handleResult, Dictionary<string, object> parameters = null)
    {
        return AsyncSqlCall<T>(sp, commandType, (reader, token) => handleResult(reader), CancellationToken.None, parameters);
    }

    public async Task<T> AsyncSqlCall<T>(string commandText, CommandType type, Func<SqlDataReader, CancellationToken, Task<T>> handleResult, CancellationToken cancellationToken, Dictionary<string, object> parameters = null)
    {
        using (SqlConnection conn = new SqlConnection(_connectionString))
        using (SqlCommand cmd = new SqlCommand(commandText, conn))
        {
            cmd.CommandTimeout = Timeout;
            cmd.CommandType = CommandType.Text;

            if (parameters != null)
            {
                foreach (KeyValuePair<string, object> kvp in parameters)
                    cmd.Parameters.AddWithValue(kvp.Key, kvp.Value ?? DBNull.Value);
            }

            await conn.OpenAsync(cancellationToken);

//          if (conn.State != ConnectionState.Open)
//              await Task.Delay(TimeSpan.FromMilliseconds(10));
            using (var rdr = await cmd.ExecuteReaderAsync(CommandBehavior.CloseConnection, cancellationToken))
                return await handleResult(rdr, cancellationToken);
        }
    }
}

public class A
{
    public string object_name { get; set; }
}

public static Func<SqlDataReader, Task<List<A>>> handleResultAsync = (SqlDataReader sdr) =>
{
    var result = new List<A>();
    while (sdr.Read())
    {
        result.Add(new A { object_name = sdr.GetFieldValue<string>(0) });
    }
    return Task.FromResult(result);
};

public static Func<SqlDataReader, List<A>> handleResultSync = (SqlDataReader sdr) =>
{
    var result = new List<A>();
    while (sdr.Read())
    {
        result.Add(new A { object_name = sdr.GetFieldValue<string>(0) });
    }
    return result;
};
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.