কীভাবে আইডিএনটিআইটিএসইআরটি সামঞ্জস্যকে প্রভাবিত করে?


11

আমি কোনও গ্রাহককে তৃতীয় পক্ষের এসএপি অ্যাড-অনের সাথে সাহায্য করার চেষ্টা করছি যার একটি পোস্টিং গ্লাচ রয়েছে এবং সমর্থন ছাড়িয়ে গেছে।

নির্দিষ্ট পরিস্থিতিতে, এটি সংরক্ষণাগারভুক্ত এবং পোস্টিং সারি টেবিল থেকে পোস্টিং সংরক্ষণাগার সারণীতে অসম্পূর্ণ পোস্ট। আমাকে এই সংরক্ষণাগারভুক্ত ফলাফলগুলি আবার সারিতে সরিয়ে নেওয়া দরকার।

সারি আইডি একটি পরিচয় কলাম এবং আমি এটি একই রাখতে চাই।

প্রশ্নটি হল, আমি যদি পরিচয়_সিন্টটি / সন্নিবেশ / পরিচয়_ইনসেট বন্ধ করে দিই, সেক্ষেত্রে কিউ এন্ট্রিগুলি তৈরি করে এবং পরিচয় কলামটি স্বয়ংক্রিয়ভাবে উত্পন্ন হওয়ার প্রত্যাশার সাথে সম্মতির সাথে আমি কী আশা করতে পারি?

এই জাতীয় আচরণের সর্বোত্তম উপায়ে কোনও পয়েন্টার পাশাপাশি প্রশংসা করা হবে।

উত্তর:


8

IDENTITY_INSERT ONনিজে থেকে সেট করা সামঞ্জস্যকে দূর করে না - এটি টেবিলে কোনও এক্সক্লুসিভ লক রাখে না, কেবল একটি সংক্ষিপ্ত স্কিমা স্থিতিশীলতা (এস-এস) লক করে।

সুতরাং তাত্ত্বিকভাবে ঘটতে পারে ডিফল্ট আচরণের অধীনে, আপনি কি অধিবেশন 1 এ এটি করতে পারেন:

BEGIN TRANSACTION;

-- 1
SET IDENTITY_INSERT dbo.tablename ON;

-- 2
INSERT dbo.tablename(id, etc) VALUES(100, 'foo'); -- next identity is now 101

-- 3
INSERT dbo.tablename(id, etc) VALUES(101, 'foo'); -- next identity is now 102

-- 4
SET IDENTITY_INSERT dbo.tablename OFF;

COMMIT TRANSACTION;

অন্য অধিবেশনে, আপনি টেবিলের মধ্যে 1, 2, 3 বা 4 পয়েন্টগুলিতে সারিগুলি সন্নিবেশ করতে পারেন এটি 2 থেকে 3 এর মধ্যে ঘটে এমন কোনও সন্নিবেশের জন্য যা ঘটে তা বাদ দিয়ে এটি একটি ভাল জিনিস বলে মনে হতে পারে , এটি স্বয়ংক্রিয়ভাবে উত্পন্ন মানটি ট্রিগার করে is অন্য সেশনের মাধ্যমে বিবৃতি 2 এর ফলাফলের উপর ভিত্তি করে - সুতরাং এটি 101 তৈরি করবে এবং তারপরে বিবৃতি 3 প্রাথমিক কী লঙ্ঘনে ব্যর্থ হবে। কিছু সেট আপ করে নিজেকে পরীক্ষা করা এটি বেশ সহজ WAITFOR:

-- session 1
-- DROP TABLE dbo.what;
CREATE TABLE dbo.what(id INT IDENTITY PRIMARY KEY);
GO
BEGIN TRANSACTION;

SET IDENTITY_INSERT dbo.what ON;

INSERT dbo.what(id) VALUES(32);
WAITFOR DELAY '00:00:05';
INSERT dbo.what(id) VALUES(33);
WAITFOR DELAY '00:00:05';
INSERT dbo.what(id) VALUES(34);
WAITFOR DELAY '00:00:05';
INSERT dbo.what(id) VALUES(35);
WAITFOR DELAY '00:00:05';
INSERT dbo.what(id) VALUES(36);

SET IDENTITY_INSERT dbo.what OFF;

COMMIT TRANSACTION;

একবার এই ব্যাচটি শুরু হয়ে গেলে, এই ব্যাচটি অন্য উইন্ডোতে শুরু করুন:

-- session 2
INSERT dbo.what DEFAULT VALUES;
WAITFOR DELAY '00:00:01';
GO 20

সেশন 2 এর কি কেবল কখনও 1-20 থেকে মান সন্নিবেশ করা উচিত, তাই না? ব্যতীত অন্তর্নিহিত পরিচয়টি আপনার ম্যানুয়াল সন্নিবেশ সেশন 1 দ্বারা আপডেট করা হয়েছে, কোনও সময় সেশন 2 সেশনটি 1 বাকী ছেড়ে যাবে এবং 32, বা 33, বা 34 ইত্যাদি সন্নিবেশ করবে, তবে এটি করার অনুমতি দেওয়া হবে তবে তারপরে সেশন 1 পরের সন্নিবেশে পিকে লঙ্ঘন ব্যর্থ হবে (যা কোনটি জিততে পারে সময়সীমার বিষয়)।

এটির কার্যকারণের এক উপায় হ'ল TABLOCKপ্রথম সন্নিবেশটিতে একটি অনুরোধ করা:

INSERT dbo.what WITH (TABLOCK) (id) VALUES(32);

আপনি এই সংরক্ষণাগারযুক্ত সারিগুলি পিছনে সরিয়ে না নেওয়া পর্যন্ত এটি এই টেবিলটি সহ যে কোনও অন্য ব্যবহারকারীকে sertোকানোর চেষ্টা করছে (বা সত্যিই কিছু করতে) চেষ্টা করবে block এই থ্রোটলস সম্মতি, নিশ্চিত, তবে আপনি কাজ করতে অবরুদ্ধ করার উপায় এটি । এবং আশা করি এটি এমন কিছু নয় যা ঘন ঘন এমন হারে ঘটে থাকে যেখানে আপনি সমস্ত সময় অন্য মানুষকে অবরুদ্ধ করেন।

কয়েকটি অন্যান্য কাজের পরিমাণ:

  • IDENTITYউত্পন্ন মান সম্পর্কে যত্ন নেওয়া বন্ধ করুন । কে পাত্তা দেয়? যদি মূল মানটি খুব গুরুত্বপূর্ণ হয় তবে একটি UNIQUEIDENTIFIER(সম্ভবত IDENTITYএকটি সরোগেট হিসাবে একটি পৃথক টেবিলের মধ্যে উত্পন্ন) ব্যবহার করুন ।
  • "নরম মোছা" ব্যবহার করার জন্য সংরক্ষণাগার প্রক্রিয়াটি পরিবর্তন করুন যেখানে প্রাথমিকভাবে সংরক্ষণাগার হিসাবে কিছু চিহ্নিত করা হয়েছে এবং পরবর্তী কোনও তারিখ অবধি সংরক্ষণাগার স্থায়ী হয় না। তারপরে যে কোনও প্রক্রিয়া তাদের পিছনে সরিয়ে নেওয়ার চেষ্টা করছে তা কেবল সরাসরি আপডেট করতে পারে এবং নরম মোছার পতাকাটি ঠিক করতে পারে।

আপনার ব্যাখ্যার জন্য ধন্যবাদ. আমি এই পরিচয় ক্ষেত্রগুলি তৈরি করে এমন একটি সমর্থন-বহনযোগ্য পণ্য সাহায্য করার জন্য এককভাবে ইউটিলিটি লিখছি। এটি কীভাবে পরিচালিত হয় তার উপর আমার কোনও নিয়ন্ত্রণ নেই।
রূপক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.