كيف أعرف عدد المستخدمين الحاليين المتصلين من الجهزة الطرفية بقاعدة بيانات على السيرفر
كيفية معرفة عدد المستخدمين
Select Count(CURRENT_USER) as [عدد المستخدمين الحاليين]
Technical Lead Developer
اللهم قنى شر الجهل و الجهلاء
( اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ ) {الأنبياء:1}
شكرا على الرد ولكن ما أقصده كم جهاز في الشبكة متصلين بقاعدة البيانات من خلال ال Domain
و ما الفرق بين عدد المستخدمين المتصليين حالياً و عدد الاجهزة المتصلة بقاعدة البيانات
ثم انك لم توضح هذا بسؤالك فى البداية فكان جوابى
Technical Lead Developer
اللهم قنى شر الجهل و الجهلاء
( اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ ) {الأنبياء:1}
السلام عليكم
اقتباسSelect Count(CURRENT_USER) as [عدد المستخدمين الحاليين]
هل ممكن معرف ip المستخدمين المتصليين حالياً ؟
{وَاتَّقُواْ يَوْمًا تُرْجَعُونَ فِيهِ إِلَى اللّهِ ثُمَّ تُوَفَّى كُلُّ نَفْسٍ مَّا كَسَبَتْ وَهُمْ لاَ يُظْلَمُونَ} (281) سورة البقرة

و ماذا لو ان المستخدمين استخدموا نفس اسم المستخدم من على اكثر من جهاز :rolleyes:
مثلا لو ان عندنا 20 جهاز و جميع المستخدمين يستخدمون نفس اسم المستخدم و متصلين الان بقاعدة البيانات
عند تنفيذ الاستعلام السابق هل ستكون النتيجة 1 ام 20
مممممممم
سؤال وجيه اخ ابو زكريا و النتيجة ستكون 1
Technical Lead Developer
اللهم قنى شر الجهل و الجهلاء
( اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ ) {الأنبياء:1}
المتغير CONNECTIONS@@ يعطي عدد الاتصالات التي تمت لSQL server منذ آخر تشغيل لخدمته.
مثال:
select getdate() as WhatTimeIsNow, @@connections as n
النتيجة :

ولم أتوصل بعد لطريقة يمكن بها معرفة عدد المستخدمين في اللحظة، وليس منذ آخر تشغيل للخدمة.
8-)
تم تعديل هذه المشاركة بواسطة walcom في 9 مارس 2006 في 17:24
فكر بطريقة أخرى
اعتقد ان الحل يكون
select count(host_id())
:D طريقة وليد لا تنفع لانها تحدد قاعدة بيانات بعينها و طريقة الاخ ابو زكريا تحتاج لتجربة لانها تأتى بال Wokstation Identifier و هو مميز لكل WorkStation
Technical Lead Developer
اللهم قنى شر الجهل و الجهلاء
( اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ ) {الأنبياء:1}
طارق إبراهيم كتب::D طريقة وليد لا تنفع لانها تحدد قاعدة بيانات بعينها
الطريقة التي ذكرتها لاعلاقة لها بقاعدة البيانات المختارة، بدليل أنني جربتها أكثر من مرة وكل مرة بقاعدة بيانات مختلفة والعدد الناتج نفسه، كما أنه يزيد مع كل اتصال يتم.
تم تعديل هذه المشاركة بواسطة walcom في 9 مارس 2006 في 17:42
فكر بطريقة أخرى
نحن نتحدث لو اننى اريد معرفة عدد الاتصالات الحالية مثلاً بقاعدة البيانات X
Technical Lead Developer
اللهم قنى شر الجهل و الجهلاء
( اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ ) {الأنبياء:1}
بخصوص الحل السابق الذي اوردته فهو خاطئ بسبب انه يعيد دائما الرقم واحد لان هذه الدوال Host_id دائما تعيد قيمة واحدة فقط و لكن مع السرعة و الاستعجال اجبت خطا فانني متاسف
أما الحل الصحيح فهو الاتي :lol:
select Count(distinct client_net_address) from sys.dm_exec_connections where local_tcp_port is not null
و قد توصلت اليه عن طريق البعكشة في جداول النظام :P
اقتباسبخصوص الحل السابق الذي اوردته فهو خاطئ بسبب انه يعيد دائما الرقم واحد لان هذه الدوال Host_id دائما تعيد قيمة واحدة فقط و لكن مع السرعة و الاستعجال اجبت خطا فانني متاسف
تجربتى لها كانت غير هذا و ربما على ان اجربها لاحقاً على اكثر من جهاز فى العمل
:D اما الحل الذى اوردته فهو خاص ب MS SQL Server 2005 و ليس MS SQL Server 2000
Technical Lead Developer
اللهم قنى شر الجهل و الجهلاء
( اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ ) {الأنبياء:1}
هذا الحل ينفع لSQL Server2000
select Count(Distinct hostname)-1 from sysprocesses where hostname <> ''
هذا الموضوع مغلق.