2009-06-01 27 views
7

में कौन लॉग इन है, यह बताएं कि मैं एक एप्लिकेशन डिज़ाइन कर रहा हूं और मैं यह बताने का सबसे अच्छा तरीका ढूंढ रहा हूं कि वर्तमान में SQL सर्वर में कौन लॉग इन है। मैं एसएसएमएस में निर्मित गतिविधि मॉनिटर का उपयोग करूंगा, जो सर्वर तक पहुंचने वाली सभी प्रक्रियाओं की एक सूची दिखाता है - बहुत अच्छा।SQL सर्वर

हालांकि, अगर मेरे .NET कोड में प्रत्येक बार जब मैं डेटाबेस तक पहुंचता हूं तो यह अलग कनेक्शन का उपयोग करता है तो मैं यह बताने में सक्षम हूं कि वर्तमान में कौन लॉग इन है? यदि कोई उपयोगकर्ता सिर्फ एक स्क्रीन देख रहा है और उस पल में डेटाबेस से डेटा पुनर्प्राप्त नहीं कर रहा है तो वे सही नहीं दिखेंगे?

+0

ऐसा करने का आपका कारण क्या है? इस जानकारी को कौन देखेगा? –

+0

डीबी व्यवस्थापक इस पर ध्यान देगा ताकि वे बता सकें कि उपयोगकर्ता अभी भी लॉग ऑन हैं और उस उपयोगकर्ता के लिए सभी प्रक्रियाओं को मारने में सक्षम हैं, एसएसएमएस में गतिविधि मॉनिटर के समान ही। –

+0

मेरे डीबी कनेक्शन को बंद करने के बाद भी .NET में यह अभी भी गतिविधि मॉनिटर में सो रहा है। क्या यह सामान्य है? –

उत्तर

10

शायद, शायद नहीं। आप सही हैं कि आपके एप्लिकेशन में लॉग इन होने के कारण उपयोगकर्ता को डेटाबेस में लॉग इन करने की आवश्यकता नहीं होती है - असल में, यह अवधारणा वास्तव में मौजूद नहीं है। गतिविधि मॉन्टिटर (और, उपयोगी रूप से, sp_who2) केवल सक्रिय कनेक्शन दिखाएगा - वे कनेक्शन सक्रिय रूप से उपयोग में हैं।

यदि आप पूल कनेक्शन ("पूल = सही", मेरा मानना ​​है, तो आपके कनेक्शन स्ट्रिंग में) का उपयोग करते हुए यह तस्वीर बदलती है। ऐसा करें, और एक "बंद" क्लाइंट कनेक्शन सक्रिय रहेगा, और आप मॉनीटर में उस कनेक्शन को देखेंगे। This article पर उस पर कुछ और जानकारी है।

यदि मैं आप थे, हालांकि, मैं सक्रिय उपयोगकर्ताओं को ट्रैक करने के लिए एक अलग तरीका आर्किटेक्ट करता हूं, जो पूल किए गए कनेक्शन पर भरोसा नहीं करता है।

2

आपका दावा सही है, उपयोगकर्ता डेटाबेस क्रियाएं नहीं कर रहे हैं दिखाई नहीं देंगे। आपको वास्तव में कुछ प्रकार के "लॉग इन इन यूजर्स" जानकारी को मैन्युअल रूप से स्टोर करने की आवश्यकता होगी।

2

आप सही हैं। यदि सही ढंग से कोड किया गया है, तो कनेक्शन बनाया जाएगा जब डेटा सहेजा या पुनर्प्राप्त किया जाएगा, और तुरंत बाद में बंद कर दिया जाएगा।

मान लें कि आप डेटाबेस सर्वर में लॉग इन किए गए एप्लिकेशन से लॉग इन करने में अधिक रुचि रखते हैं, तो आप उपयोगकर्ता आईडी सहित डेटाबेस में सत्र जानकारी जारी रख सकते हैं। फिर आप ऑनलाइन कौन है यह जानने के लिए सत्र डेटाबेस से पूछ सकते हैं। आपके द्वारा उपयोग की जा रही विकास तकनीकों के आधार पर बेहतर समाधान हो सकते हैं।

2

मुझे लगता है कि आप sp_who या sp_who2

14

MSSQL सर्वर आप निम्न आदेश चला सकते हैं के लिए देख रहे ...

exec sp_who2 

यह तुम कौन में लॉग ऑन है सहित जानकारी का एक बहुत कुछ दे देंगे , आवेदन का नाम, वर्तमान आदेश, इतने पर और आगे।

धन्यवाद

6

DMV sys.dm_exec_sessions जुड़ा सत्र को खोजने के लिए इस्तेमाल किया जा सकता। यदि आप सक्रिय रूप से चल रहे हैं, या कनेक्शन विशिष्ट जानकारी प्राप्त करने के लिए sys.dm_exec_connections में शामिल हो सकते हैं, तो आप अनुरोध जानकारी प्राप्त करने के लिए sys.dm_exec_requests में शामिल हो सकते हैं। Session_id का उपयोग सभी जोड़ों के लिए किया जाता है।

मैं व्यक्तिगत रूप से पुराने sp_who संग्रहीत प्रक्रियाओं पर डीएमवी का उपयोग करता हूं। जैसा कि अन्य ने इंगित किया है, यदि कनेक्शन बंद हो जाता है, तो आप इसे नहीं देख पाएंगे, इसलिए यदि आप कनेक्शन के बीच ट्रैक करना चाहते हैं, तो आपको कनेक्शन जानकारी को कैशिंग करने की एक और विधि पर विचार करना होगा।