الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

منع مستخدم اخر من تشغيل stored procedure حتي ينتهي المستخدم الاول

بدأه Hisham_wz في 1 مارس 2016 · 10 رد · 1,390 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

 

لدي قاعدة بيانات يستخدمها عدة مستخدمين في نفس الوقت؛ ولدي stored procedure يقوم بتنفيذ عدة عمليات داخل قاعدة البيانات.

أريد منع اي مستخدم من تشغيل الـ stored procedure أثناء تشغيله من قبل مستخدم أخر؟

أو حتي يعطل طلب المستخدم الثاني حتي يقوم المستخدم الاول من الانتهاء من الخطوات الموجودة داخل الـ stored procedure مدام قد التشغيل.

 

شكرا مقدما

#2

وعليكم السلام

 

استخدم transaction

استخدام ذلك يختلف من محرك قواعد بيانات إلى آخر sql server ,oracle , mysql

والمبدأ واحد

 

مثال على sql server

BEGIN TRANSACTION 
INSERT INTO TestTrans VALUES (@PriKey, @CharCol)
INSERT INTO TestTrans VALUES (@PriKey + 1, @CharCol)
COMMIT

تم تعديل هذه المشاركة بواسطة أحمد أبو عبد البر في 1 مارس 2016 في 20:46

2▲ 2

vVIfFr.gif

مدونتي



إذا رأيتموني غبت فأطلت الغياب فربما أكون قد انتقلت عن الدنيا إلى الآخرة

فما أحوجني إلى دعوة صالحة من أخ لي كريم

 

http://www.tvquran.com/

 

LoGeCom

أول برنامج عربي للمحاسبة والتجارة وإدراة المخازن يعمل على اللينكس والماك والويندوز 

#3

السلام عليكم ورحمة الله وبركاته

 transaction تقوم بعمل تكتب كل الخطوات في ملف اللوج ثم مره واحد تنفذه علي قاعدة البيانات بشرط تمام كل العمليات من جلال امر COMMIT واذا حدث خطا في اخد المراحل يتراجع عن الكل من خلا امر Rollback وبهذا يقوم قائمة من طلبات المستخدمين لل stored procedure للاول قي الطلب ثم الثاني بعد الانهاء ولكن يفضل ان يكون stored procedure سريع

انظر الرابط

http://www.c-sharpcorner.com/UploadFile/63f5c2/commit-and-rollback-comands-in-sql-server/

تم تعديل هذه المشاركة بواسطة KARIMSOFT في 2 مارس 2016 في 06:58

1▲ 1
#4

@KARIMSOFT

هل منعي ذلك :

أن استخدام الـ transaction في تنفيذ مجموعة اوامر بدلا من الـ stored procedure سوف يبطي من سرعة استجابة قاعدة البيانات؟

اما ان التاخير سوف يكون اجزاء من الثانية او ثواني علي اقصي تقدير؟

#5

السلام عليكم ورحمة الله وبركاته

اولا  transactionتككتب داخل الstored procedure

ثانيا اقصد بالبطء هو بطء شكل الجمل المستخدمة مثل count(*) بطيئه جدد ولكن count(1) اسعر بكثير وهذا هناك جمل اسرع من جمل هذا ما اقصده

بالتوفيق

2
#7

@Hisham_wz اذا حصلت على جواب مناسب من الاجابات اعلاه٫ ارجو تحديد الجواب الانسب.

#8

لا شكر علي واجب ونحن هنا كلنا طلاب رحمة الله بعلم ينفع الناس وكلنا طلاب علم

بالتوفيق

1
#9

السلام عليكم و رحمة الله

مع احترامي لجميع الذين أجابوا على السؤال لكني أظن أن هناك حلقة مفقودة في الإجابات, و هي أن وجود الـ Transaction لا يمنع بقية المستخدمين من استدعاء الإجراء أو من الوصول إلى الجداول التي يتعامل معها الإجراء المخزن ما لم يكن مستوى عزل الـ Transaction محدد كـ Serializable و هي أقوى حالات العزل و تماثل استدعاء Select  مع الخيار HOLDLOCK.

Create Proc TestProc
AS

SET TRANSACTION ISOLATION LEVEL Serializable
Begin Tran

-- You SQL Statements Here

Commit Tran

Go

تحياتي للجميع

تم تعديل هذه المشاركة بواسطة imadouzoun في 9 يونيو 2016 في 10:45

دروس و كتب مفيدة----------------------كتيب الإجرائيات المخزنةتعرف على اللغة Transact SQL <<-->> كتيب عن تنصيب قواعد البيانات Sql Server باللغة العربية كتيب عن إنشاء قواعد البيانات في SQL Server باللغة العربية <<-->> درس مع الأمثلة عن المؤشرات و التعامل معها في الـ T-SQLالعبارات الشرطية و الحلقات في T-SQL <<-->> شرح لبعض الـ Extended Stored Procedure استخدام مكتبات الـ Dot Net الخاصة بك في الـ Sql Server 2005 <<-->> التعامل مع المصفوفات من خلال الـ T-SQLتعابير الجداول الشائعة في SQL Server 2005 <<-->>الاتصال بالأداة SQL Server Management Studioحلول سريعة و لمحات برمجية --------------------------------التصدير إلى إكسل : طريقة أولى : طريقة بسطر واحد من الكود <<-->> طريقة ثانية : طريقة تحتاج إنشاء إجرائية مخزنةً تجهيز بيانات جدول بالصيغة XML تمهيداً لحفظها كملف <<-->> تصدير البيانات إلى ملفات نصية برمجياً إغلاق جميع الإتصالات المفتوحة بقاعدة بيانات محددة .. تمهيداً لاسترجاعها أو حذفها <<-->> الاستعلام بناء على وقت مخزن بالصيغة العربية ضمن حقل نصي ..حذف السجلات المتكررة و إبقاء عدد محدد منها في جدول.. <<-->> أسرع طريقة لحذف سجلات جدول كيف احصل على اسم جهازي والباسوورد باستخدام T-SQL <<-->> حشر أنواع الصور المختلفة في حقل من نوع Image باستخدام إجرائية مخزنة .كيف تعرف أنواع الصور المخزنة في حقل من نوع Image .. <<-->> إجرائيات مخزنة ببارامترات ديناميكية مفيدة جداً للاستعلامات استخدام رقم الحقل بدلاً من الإسم في عبارات الإستعلام <<-->> من هو أضخم الجداول في قاعدة بياناتي ؟معرفة زمن تنفيذ الإجرائيات ( لتختار الطريقة الأسرع بين إجرائياتك المخزنة ) <<-->> التعامل مع الـ Rules برمجياً الحصول على آخر صف في الجدول <<-->> قراءة ملفات XML باستخدام T-SQL برمجياً (مثال مرفق)سحب بيانات ملف إكسل إلى الـ SQL Server <<-->> تشفير النسخة الاحتياطية بكلمة مرور <<-->> التخلص من البيانات المكررة <<-->> حل مشكلة التاريخ الهجريDifferential Backup بالتعريف---------- لا إله إلا الله .. محمد رسول الله

أخوكم في الله..  Imad Ozone

#10
imadouzoun كتب:

السلام عليكم و رحمة الله

مع احترامي لجميع الذين أجابوا على السؤال لكني أظن أن هناك حلقة مفقودة في الإجابات, و هي أن وجود الـ Transaction لا يمنع بقية المستخدمين من استدعاء الإجراء أو من الوصول إلى الجداول التي يتعامل معها الإجراء المخزن ما لم يكن مستوى عزل الـ Transaction محدد كـ Serializable و هي أقوى حالات العزل و تماثل استدعاء Select  مع الخيار HOLDLOCK.

Create Proc TestProc
AS

SET TRANSACTION ISOLATION LEVEL Serializable
Begin Tran

-- You SQL Statements Here

Commit Tran

Go

تحياتي للجميع

ممكن تشرح أكتر عن الموضوع اللي انت بتقوله ده ؟

أنا عندي مشكلة في جملة select أثنا مستخدم أخر عامل Transaction  على نفس الجدول 

بمعني إن هناك مستخدم رقم 1 يقوم بعملية Insert في الجدول X مع وجود Transaction في عملية الـ Insert

وهناك مستخدم أخر رقم 2 يقوم بعملية Select من الجدول X   بدون Transaction طبعا

تظهر للمستخدم رقم 2 الرسالة المشهورة

Transaction (Process ID 72) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.

هل هناك حل بحيث المستخدم رقم 2 لا يتأثر بالـ Transaction بتاعة المستخدمين التانيين ؟؟

وشكرا

Mohamed Ali Salim

0.1..0...4....7.....6......2.......7........4.........8

#11

السلام عليكم أخي الكريم

يمكنك التغلب على هذه المشكلة عن طريق تنفيذ المستخدم الثاني للعبارة التالية قبل استدعاء الـ Select Query:
 

Set Transaction Isolation Level Read Uncommitted

Select * from X

و هنا سيقرأ المستخدم الثاني ما يسمى بالـ Dirty Data و المقصود أن ما سيقرأه المستخدم الثاني قد يتم التراجع عنه عن طريق الـ Rollback التي ربما يستدعيها المستخدم الأول.

 

و اذا اردت أعمل المثال التالي لتبسيط الشرح:

أنشأ جدولا سمه  X:

Create Table X(id int)

أضف بيانات عبثية:

Insert T select 1 union select 2 union select 3

الآن دع المستخدم الأول ينفذ التالي:

begin tran

Insert T select 10000

الآن دع المستخدم الثاني ينفذ التالي:

Set Transaction Isolation Level Read Uncommitted
Select * from T

ثم اجعل المستخدم الأول يتراجع عن المناقلة:

rollback Tran

و كل الذي سبق يمكنك تنفيذه في الـ SQL Server Management Studio

 

أتمنى أن أكون قد أجبتك أخي الكريم.

تحياتي

 

 

Capture.PNG

1

دروس و كتب مفيدة----------------------كتيب الإجرائيات المخزنةتعرف على اللغة Transact SQL <<-->> كتيب عن تنصيب قواعد البيانات Sql Server باللغة العربية كتيب عن إنشاء قواعد البيانات في SQL Server باللغة العربية <<-->> درس مع الأمثلة عن المؤشرات و التعامل معها في الـ T-SQLالعبارات الشرطية و الحلقات في T-SQL <<-->> شرح لبعض الـ Extended Stored Procedure استخدام مكتبات الـ Dot Net الخاصة بك في الـ Sql Server 2005 <<-->> التعامل مع المصفوفات من خلال الـ T-SQLتعابير الجداول الشائعة في SQL Server 2005 <<-->>الاتصال بالأداة SQL Server Management Studioحلول سريعة و لمحات برمجية --------------------------------التصدير إلى إكسل : طريقة أولى : طريقة بسطر واحد من الكود <<-->> طريقة ثانية : طريقة تحتاج إنشاء إجرائية مخزنةً تجهيز بيانات جدول بالصيغة XML تمهيداً لحفظها كملف <<-->> تصدير البيانات إلى ملفات نصية برمجياً إغلاق جميع الإتصالات المفتوحة بقاعدة بيانات محددة .. تمهيداً لاسترجاعها أو حذفها <<-->> الاستعلام بناء على وقت مخزن بالصيغة العربية ضمن حقل نصي ..حذف السجلات المتكررة و إبقاء عدد محدد منها في جدول.. <<-->> أسرع طريقة لحذف سجلات جدول كيف احصل على اسم جهازي والباسوورد باستخدام T-SQL <<-->> حشر أنواع الصور المختلفة في حقل من نوع Image باستخدام إجرائية مخزنة .كيف تعرف أنواع الصور المخزنة في حقل من نوع Image .. <<-->> إجرائيات مخزنة ببارامترات ديناميكية مفيدة جداً للاستعلامات استخدام رقم الحقل بدلاً من الإسم في عبارات الإستعلام <<-->> من هو أضخم الجداول في قاعدة بياناتي ؟معرفة زمن تنفيذ الإجرائيات ( لتختار الطريقة الأسرع بين إجرائياتك المخزنة ) <<-->> التعامل مع الـ Rules برمجياً الحصول على آخر صف في الجدول <<-->> قراءة ملفات XML باستخدام T-SQL برمجياً (مثال مرفق)سحب بيانات ملف إكسل إلى الـ SQL Server <<-->> تشفير النسخة الاحتياطية بكلمة مرور <<-->> التخلص من البيانات المكررة <<-->> حل مشكلة التاريخ الهجريDifferential Backup بالتعريف---------- لا إله إلا الله .. محمد رسول الله

أخوكم في الله..  Imad Ozone

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…