سؤال

ما هي قواعد تحديد النطاق لمستويات عزل المعاملات في SQL Server 2005؟أعرف ما تعنيه المستويات المختلفة، ولكن لا أعرف كيفية تطبيقها بشكل صحيح خارج البرنامج النصي الذي يتم تشغيله يدويًا.لا يمكنني العثور على دليل للاستخدام العملي في كود جودة الإنتاج.

من الواضح أن النطاق يبدأ عند استخدام أمر مثل هذا:

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 

ولكن أين ينتهي؟إذا قمت بتعيين مستوى ISO في إجراء مخزن، ثم قام هذا Proc باستدعاء آخر، فهل يرثه Proc المتداخل؟والأفضل من ذلك، إذا قمت بتصعيد مستوى ISO داخل العملية المتداخلة، فهل سيتم نقله مرة أخرى إلى عملية الاتصال؟هل تُحدث أوامر المعاملات مثل BEGIN TRAN وROLLBACK وCOMMIT أي اختلافات؟

عندما يتم استدعاء عملية مخزنة بواسطة تطبيق أو وظيفة وكيل، هل تستمر التغييرات في مستوى العزل بطريقة ما؟هل يجب علي دائمًا العودة إلى الوضع الافتراضي READ COMMITTED في نهاية كل عملية؟

سأختبره في مواقف مختلفة ولكني لا أعرف كيفية قراءة مستوى العزل الحالي.

هل كانت مفيدة؟

المحلول

وتشغيل ما يلي وانظر لنفسك:

CREATE PROCEDURE dbo.KeepsIsolation
AS
BEGIN
PRINT 'Inside sproc that does not change isolation level';
DBCC USEROPTIONS;
END
GO

CREATE PROCEDURE dbo.ChangesIsolation
AS
BEGIN
PRINT 'Inside sproc that changes isolation level';
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
DBCC USEROPTIONS;
END
GO
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
DBCC USEROPTIONS;
EXEC dbo.KeepsIsolation;
DBCC USEROPTIONS;
EXEC dbo.ChangesIsolation;
-- demonstrates that isolation level restored to REPEATABLE READ after exiting the procedure
    DBCC USEROPTIONS;

نصائح أخرى

من MSDN

إذا قمت بإصدار SET TRANSACTION Isolation LEVEL في الإجراء المخزن أو الزناد ، عند إرجاع الكائن يتحكم في مستوى العزلة يتم إعادة تعيين إلى المستوى الساري عندما تم استدعاء الكائن.على سبيل المثال ، إذا قمت بتعيين قراءة قابلة للتكرار على دفعة ، ودعت الدفعة ثم إجراء إجراء مخزن يضع مستوى العزلة على قابلية للتسلسل ، فإن إعداد مستوى العزلة يعود إلى القراءة القابلة للتكرار عندما يعيد الإجراء المخزن التحكم إلى الدفعة.

وDBCC USEROPTIONS سيتم عرض مستوى العزل الحالي، جنبا إلى جنب مع كل من الخيارات SET أخرى.

ومن الكتب على الانترنت

<اقتباس فقرة>   

واحد فقط من عزل المعاملة   يمكن تعيين خيارات LEVEL في وقت واحد،   ويبقى تعيين هذا الصدد   حتى يتم تغيير صراحة. هذه   يصبح السلوك الافتراضي إلا ل   يتم تحديد الخيار الأمثل في   مستوى الجدول في جملة من   البيان.

ولا لفة مستوى عزل مرة أخرى مع الصفقة.

ومستوى عزل يبقى الحالي حتى لو كنت تدعو إلى إجراءات ووظائف.

تجدر الإشارة إلى أن قضية مع نطاق مستويات المعاملات وSQLSERVER 2012 أو قبل ذلك عندما يستخدم عالية الأداء تجميع ADO.NET اتصال حيث هذا يمكن أن تستمر في الواقع عبر الختامي للإتصال:

SQL الخادم: التسريبات مستوى العزل عبر اتصالات المجمعة

<وأ href = "https://social.msdn.microsoft.com/Forums/sqlserver/en-US/916b3d8a-c464-4ad5-8901-6f845a2a3447/sql-server-2014-reseting-isolation-level؟ منتدى = sqldatabaseengine "يختلط =" نوفولو noreferrer "> https://social.msdn.microsoft.com/Forums/sqlserver/en-US/916b3d8a-c464-4ad5-8901-6f845a2a3447/sql-server-2014-reseting-isolation مستوى سطح الأرض؟ المنتدى = sqldatabaseengine

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top