السلام عليكــم ورحمـة الله وبركاتــه ،،
هل يوجد يوجد يقوم بالبحث عن العمليات التي عليها block في قاعدة البيانات
هذه العمليات قد تكون select or inert or update
فهل يوجد كود يقوم بالبحث عن هذه العمليات ويقوم بحذفها
ارجوا الافادة
السلام عليكــم ورحمـة الله وبركاتــه ،،
هل يوجد يوجد يقوم بالبحث عن العمليات التي عليها block في قاعدة البيانات
هذه العمليات قد تكون select or inert or update
فهل يوجد كود يقوم بالبحث عن هذه العمليات ويقوم بحذفها
ارجوا الافادة
و عليكم السلام و رحمة الله تعالى و بركاته...
المرجو إعادة صياغة السؤال...
اشكرك اخ محمد رضى
السؤال
احيانا تعميل مثلا insert or update على قاعدة البيانات من البرنامج
فاحيانا هذه العملية تظل قيد التنفيذ يعني لو دخلت من sqlserver>management>activity monitor
في من ظمن الحقول الموجودة في activity monitor
blocking بعض العمليات توضع عليها 1 وتكون معلقه في السرفر ضروري تعمل لها kill process
فهل يوجد كود يقوم بهذه العملية
شاكرين
قم أولا بزيادة مرجع نحو المكتبة SMO و ConnectionInfo لمشروعك. بعدها قم بزيادة السطرين التاليين لاستيراد فضاء أسماء المكتبتين :
Imports Microsoft.SqlServer.Management.Common Imports Microsoft.SqlServer.Management.Smo
و هذا كود بسيط يمكنك من قتل أي بروسيس و ذلك بتحديد مرجعه على المتغير ProcsID :
' إنشاء كائن الإتصال بالخادم و ليس بقاعدة بيانات
Dim sqlConnection As New SqlClient.SqlConnection("Data Source=.\SQLEXPRESS;Integrated Security=SSPI;Connect Timeout=30")
Dim srvrConnection As New ServerConnection(sqlConnection)
' ربط الإتصال بالخادم
Dim srvr As New Server(srvrConnection)
' قتل البروسيس
Dim ProcsID As Integer = 52 ' حدد هنا رقم البروسيس لقتله
srvr.KillProcess(ProcsID)اخي محمد هذا معناه انه ضروري اولا اعرف رقم البروسيس المراد حذفها
يعني هل يوجد كود معين يقوم بجلب العمليات الي عليها blocking
وشكرا
استعمل الدالة Server.EnumProcesses() للحصول على جدول به لائحة بروسيسز و معلومات كل واحد منها. ويمكنك التعرف على البلوكت منها و قتلها...
أنظر هنا :
اشكرك اخي محمد على الرد
ومعليش لو ثقلت عليك
الدالة Server.EnumProcesses
على ما اظن انها تجلب بيانات غير الي موجودة في ACTIVITY MONITOR
لانه الدالة.EnumProcesses تجيب مثلا الحقول التالية : URN , NAME, SPID,LOGIN الخ
اما الي اريده انا في ACTIVITY MONITOR يحتوي الحقول التالية PROCESS ID ,SYSTEM PROCESS ,BLOKING,BLOCKED BY
فهل انا غلطان في الاستخدام اما انها تجلب بيانات غير الي ACTIVITY MONITOR
مرفق صوره توضح معلومات البروسيس الي انا عايزها
وشكرا
تم تعديل هذه المشاركة بواسطة ya_as في 17 نوفمبر 2009 في 09:30
اخ محمد
هل هذه المعلومات الموجودة بالشاشة بتاعتك هي نفس المعلمومات الي في ACTIVITY MONITOR
الموجودة في SQLSERVER 2005
من حيث رقم البروسيس وبياناتها
نعم بالطبع و أضن أنها كافية لمعرفة البروسيس الجامد و قتله
اهلا استاذ محمد
معليش ادوشتك معاي
الان انا جربت الطريقة الي جبتها لجلب البروسيس
بس لاحظت اختلافات بين ACTIVITY MONITOR وبين البيانات الي جايبها بالكود من حيث
1) أرقام البروسيس مختلف
2) عدد البروسيس الي في ACTIVITY MONITOR اكثر اي ان الكود لا يعرض كل البروسيس
3) قمت بملاحظة بعض العمليات في ACTIVITY MONITOR وهي BLOCKED لكنها لا تظهر الشاشة بتاعتي
اشكرك على كل المعلومات
اقتباس1) أرقام البروسيس مختلف
هل تم تثبيت أكثر من Instance لخادم SQL Server على الجهاز؟
في هذه الحالة يجب أن تحدد اسم Instance التي تريد التعامل معها في جملة الربط.
اقتباس3) قمت بملاحظة بعض العمليات في ACTIVITY MONITOR وهي BLOCKED لكنها لا تظهر الشاشة بتاعتي
العمود Status, ألا يظهر حالة البروسس الجامد؟
بالنسبة لعدد البروسس فـ Activity Monitore برنامج متقدم و يمكنك تحديد فلتر لإضهار المعلومات التي تريد و لا أظن أن أحدا منا مستعد لبدل الوقت و الجهد لتطوير برنامج مماثل ;)
لا يوجد عندي غير Instance واحدة فقط
لكن الارقام تظل مختلفة فمثلا في ACTIVITY MONITOR دائما نرى الارقام من 51 - 52 ........
بينما في الشاشة تبدأ من 1 -2 .......
وكذلك كما قلت العمود Status, ألا يظهر حالة البروسس الجامد؟
اذا كان هذا البروسيس هو الي عامل المشكلة يعني انه الكود الي مسويه ما ينفع
اشكرك على سعة صدرك
اهلا محمد
اولا اشكرك على كل المعلومات الي جبتها
ثانيا
احب اقول لك انه توجد طريقه تعرض البروسيس نفس الي موجوده في ACTIVITY MONITYOR
وهو جدول موجود في MASTER DB اسمه SYSPROCESSES