কার্যকর করা চালিয়ে যেতে পারে না কারণ সেশনটি হত্যার রাজ্যে রয়েছে। ক্লাস্টারড ইনডেক্স তৈরি করার সময়


11

একটি ক্লাস্টার্ড ইনডেক্স তৈরি করার চেষ্টা করার সময় আমি নিম্নলিখিত ত্রুটিটি পেয়েছি

বিবৃতিতে বাতিল করা হয়েছে।
এমএসজি 596, স্তর 21, রাজ্য 1, লাইন 0
কার্যকর করা চালিয়ে যেতে পারে না কারণ সেশনটি হত্যার রাজ্যে রয়েছে।

এমএসজি 0, স্তর 20, রাজ্য 0, লাইন 0
বর্তমান কমান্ডে একটি গুরুতর ত্রুটি ঘটেছে। ফলাফল, যদি থাকে, বাতিল করা উচিত।

সূচকটি হ'ল:

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

আমি মাইক্রোসফ্ট এসকিউএল সার্ভার 2012 (এসপি 3) (KB3072779) - 11.0.6020.0 (এক্স 64) স্ট্যান্ডার্ড সংস্করণ (-৪-বিট) উইন্ডোজ এনটি 6.3 (বিল্ড 9600:) এ ব্যবহার করছি

আমি দৌড়েছি

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

এবং এটি কোনও সমস্যা খুঁজে পেল না

আমি আশঙ্কা করছি যেহেতু আমি এই ত্রুটিটি পেয়েছি আমার ডাটাবেসটি দূষিত। আমি কীভাবে আমার সমস্যাটিকে সংশোধন করব এবং এই সূচিটি টেবিলে রাখব?


আমি একই টেবিলে একটি ক্লাস্টারযুক্ত সূচক যুক্ত করতে গেলে একই ত্রুটি পাই। আমি প্রথমে নন ক্লাস্টার যুক্ত করার চেষ্টা করেছি। আমি এই ত্রুটি পেয়েছি। সুতরাং আমি ভেবেছিলাম আমার সূচক দুর্নীতি হতে পারে এবং সমস্ত সূচী বাদ দিয়ে পুনরায় তৈরি করার চেষ্টা করেছি। আমি যখন ত্রুটি বার্তাটি পাই তখন মূলত আমি পোস্ট করি। আমি যুক্ত করতে পারি যে ইডেরা এসকিউএল সততা চেক এই টেবিলের সূচকগুলিতে দুর্নীতি খুঁজে পেয়েছে। এখন প্রশ্ন, আমি কীভাবে এটি ঠিক করব।
ব্যবহারকারী2904235

সীমাবদ্ধতা লঙ্ঘন বা এরকম কিছু আবিষ্কার করলেই কি আপনার অপারেশন ব্যর্থ হবে? দয়া করে এটি দেখুন: http://stackoverflow.com/questions/34518205/c-sharp-Cmd-executescalar-cannot-continue-the-execution-because-the-session
ভিক্টর

উত্তর:


4

কেবলমাত্র একটি পয়েন্টার পুনরায়: এসকিউএল সার্ভার 2017 (যেখানে আমি এই ত্রুটিটি আঘাত করছিলাম) এবং অন্যদেরকে কিছুটা সময় সাশ্রয় করার জন্য 2016 এর কিছু সংস্করণ:

এসকিউএল সার্ভার 2017 সিইউ 8 (এছাড়াও 2016 এসপি 1 সিইউ 9 এবং 2016 এসপি 2 সিই 1) এর আগে একটি সমস্যা হয়েছিল যেখানে ডিএমএল ক্রিয়াকলাপটি কোনও স্বয়ংক্রিয় পরিসংখ্যান আপডেট হওয়ার কারণে যদি বর্ধিত পরিসংখ্যানযুক্ত পার্টিশনযুক্ত টেবিলগুলি এই ত্রুটি তৈরি করে।

সর্বনিম্ন কেবি পৃষ্ঠা এখানে:

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

উপরে তালিকাভুক্তদের চেয়ে পরে সিইউ ইনস্টল করা সমস্যার সমাধান করে।


3

এটি সূচকের দুর্নীতির কারণে হতে পারে,

এটি পরিচালনা করার সর্বোত্তম উপায় হ'ল পুরাতন সূচি হ'ল যা দুর্নীতিগ্রস্থ।

DROP INDEX dbo.CO_DES_INPUT.IX_CO_DES_INPUT 

প্রশ্নগুলিতে ক্যোয়ারি চালানোর চেয়ে, সমস্ত রেকর্ড অনন্য থাকলে এটি ঠিকঠাক কাজ করা উচিত। প্রদত্ত কলামগুলিতে।


3

সর্বদা উপলভ্যতা গোষ্ঠীগুলির জন্য কনফিগার করা একটি ডাটাবেসে, যদি উপলভ্যতা গ্রুপ সিঙ্ক্রোনোস মোডে থাকে এবং সেকেন্ডারিগুলি অফলাইনে চলে যায় বা স্থগিত করা হয় তবে আপনি এই আচরণটিও করতে পারেন। এটি অ্যাপ্লিকেশন সার্ভারগুলির দ্বারা অভিজ্ঞ একটি পার্শ্ব-প্রতিক্রিয়া। ধন্যবাদ,


2

আমি অজান্তে এমন কিছু পেয়েছি: যখন আপনি কোনও সূচকযুক্ত দৃশ্যে সূচকগুলি অক্ষম / পুনর্নির্মাণ করছেন, আপনি ক্লাস্টার তৈরির আগে বা পুনরায় সমস্ত ব্যবহার করার আগে নন-ক্লাস্টারযুক্ত সূচীগুলির আরও একটি আকরিক পুনর্নির্মাণের চেষ্টা করলে আপনি এই একই ত্রুটিটি পাবেন।


2

আমার যখন চলমান ক্যোয়ারী থাকে, সর্বদা অন এজি শ্রোতা ব্যবহার করে, এজি ডাটাবেসগুলির একটি ব্যবহার করে আমি সর্বদা এই ত্রুটিটি পাই:

। নেট স্ক্যালক্লিয়েন্ট ডেটা সরবরাহকারী: এমএসজি 596, স্তর 21, রাজ্য 1, লাইন 0 কার্যকর করা চালিয়ে যেতে পারে না কারণ সেশনটি হত্যার রাজ্যে রয়েছে। । নেট স্ক্যালক্লায়েন্ট ডেটা সরবরাহকারী: এমএসজি 0, স্তর 20, রাজ্য 0, লাইন 0 বর্তমান কমান্ডটিতে একটি গুরুতর ত্রুটি ঘটেছে। ফলাফল, যদি থাকে, বাতিল করা উচিত।

খুব সহজ পুনরুত্পাদন! অবশ্যই অন্যান্য কারণও থাকতে পারে তবে এটিই একটি বিশেষ উদাহরণ যা আমি এই ধরণের ত্রুটি পাচ্ছি ...


0

আমি এই সমস্যাটি মোটামুটি ছোট সি # প্রোগ্রামে পুনরুত্পাদন করতে পারি যা অ্যাসিঙ্ক্রোনাস সংযোগগুলি ব্যবহার করে তবে আমি নিশ্চিত 100% এর কারণ নেই। অন্যরা চেষ্টা করে দেখতে চাইলে এখানে আমার নিন্দার প্রোগ্রামটি রয়েছে - আমার সন্দেহ হয় যে এটি ঘটতে পুরোপুরি লাইন বেঁধে থাকতে হবে এমন একটি সিরিজ রয়েছে:

  • সংযোগ পুলিং সক্ষম
  • সংযোগ পুলটিতে ছদ্মবেশ ব্যবহার করে, সংযোগ পুলে সেই নকলটি প্রাসঙ্গিক রূপটি ফিরিয়ে দেওয়া অস্বীকার করে
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;
};
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.