2010-10-21 57 views

回答

13

在SQL Server中,可以運行此存儲過程:

sp_who2 

編輯:

,如果你想看到誰在任何給定時間使用你的服務器時,您可以使用此查詢。這將允許你進一步過濾。

SELECT 
    SessionId   = ses.session_id 
    ,[Database] = DB_Name(er.database_id) 
    ,[Login]   = ses.login_name 
    ,Host    = ses.host_name 
    ,StartTime   = er.start_time 
    ,ClientAddress  = con.client_net_address 
    ,SQLStatement  = st.text 
FROM sys.dm_exec_requests er 
OUTER APPLY sys.dm_exec_sql_text(er.sql_handle) st 
LEFT JOIN sys.dm_exec_sessions ses ON ses.session_id = er.session_id 
LEFT JOIN sys.dm_exec_connections con ON con.session_id = ses.session_id 
WHERE ses.is_user_process = 0x1 
AND ses.session_id != @@SPID 
ORDER BY 
    ses.session_id 
+0

如何使用此優化結果?例如select * from sp_who2 where ....... – 2010-10-21 21:12:07

+0

請參閱我的修改答案。我給了你一個腳本,允許你過濾用戶列表。 – 2010-10-21 21:18:50

5

對於SQL Server,你可以嘗試

SELECT * 
FROM sys.dm_exec_sessions 

這將列出所有打開的會話

+0

我不認爲這顯示數據庫名稱。 – 2010-10-21 21:18:26

+1

這是一個非常遲到的評論,但您可以使用DB_NAME()函數從sys.dm_exec_sessions中獲取數據庫的名稱。只需將database_id列傳遞給函數,它將爲您提供數據庫的實際名稱。 – 2014-08-01 04:30:55

2

這完全取決於如何安全性和訪問的SQL Server中的Access數據庫

實現

如果它使用一個單一的SQL Server登錄所有用戶到sql後端(這很常見),那麼就沒有辦法知道。

1

1)開發人員必須在SQL Server上具有VIEW SERVER STATE權限才能查看SQL Server實例上的所有正在執行的會話。否則,只會看到當前會話最簡單的方法是使用系統管理員憑據打開連接(即使用sqlcmd或Management Studio)併發出以下語句:

GRANT查看服務器狀態(您的網絡用戶標識)

2)5分鐘或10分鐘不活動後,訪問似乎與SQL Server斷開連接。我還沒有時間做詳細的搜索,並找出什麼設置,如果有的話,可以覆蓋這一點。

3)使用SQL Server工具的開發人員可能會連接到主數據庫,即使他們正在查看數據數據庫中的對象。

相關問題