程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 存儲過程輕松過濾SQL Server連接

存儲過程輕松過濾SQL Server連接

編輯:關於SqlServer

    這篇文章我們對系統存儲過程進行討論,通過一個例程列出有關SQL Server連接或者在某個選中的連接上執行操作的信息。

SQL Server數據庫管理員需要時刻保持對服務器上連接的警惕。為了某種模式的應用,管理員需要監控這些連接;列出具有問題的連接,然後采取行動來進行修整;或者是在某個選中的連接上執行操作,例如結束某個連接。這有些困難,但是不是不可能的,要執行這些任務需要使用企業管理器(Enterprise Manager)。一個忙碌的數據庫管理員需要一個更加方便的工具。

列表1中的SQL 代碼創建了一個系統存儲過程,名字為sp_ListConnections。

這個sp_ListConnections存儲過程接受8個參數,但都不是必需的。

第一個參數(@DBUltra)是可選的,可用來指明是否需要限制列表為只顯示那些被阻塞的連接。0這個值表示,所有符合條件的連接都應該列出來。1這個值表示只有被阻塞的和正在阻塞的連接列出來。

第二個參數(@PCUltra)是可選的,用來指定是否需要將列表限制為只顯示那些活動的連接(正在處理T-SQL語句。)0值表示,所有符合條件的連接都應該列出來。1值表示只有活動的連接顯示出來。

隨後的四個參數都是可選的,並且在一起用來形成一個通過名字作為選擇關鍵條件的組合形式。請參考我以前寫的文章,看看我對這些參數的工作方式的解釋。這些參數指定了需要考慮的數據庫、應用程序、登陸或者客戶機。

第七個參數(@DBTrain)是可選的,用來指定如何應用前面四個參數。D值表示通過使用這些參數按照名字選出某個數據庫。A值表示通過使用這些參數按照名字選出的是應用程序。L值表示使用這些參數選出的是登錄名。其他值表示通過使用這些參數選出的是客戶機的名字。

最後一個參數(@PCTrain)是可選的,可用來指定在某個選定的連接上執行什麼操作。這個操作可以是在每個連接上執行T-SQL代碼。也可以是給客戶機發送消息。接收到消息的客戶機就是那些包括在其他參數中的客戶機。所有的@DBTrain數值都是有效的,並且發送給任何一個客戶機的消息都只有一個。

如果@PCTrain的數值包括了字符串“@@SPID”,那麼就假設它是T-SQL代碼。用當前的連接ID替換了"@@SPID"之後,T-SQL代碼在每個連接上執行。

如果@PCTrain的數值是一個簡單的文本消息,那麼消息就會傳輸到客戶機上。消息可以不包含CR/LF字符。

如果@PCTrain數值是數字的,那麼就認為這個數字是SQL Server的錯誤號,就會從sysmessages表中找到相應的信息發送給客戶機。客戶消息可以添加到sysmessages表中,通過使用sp_addmessage系統存儲過程來完成(查看MSDN了解詳細信息)。

注意:發送消息給客戶機的能力依賴於Windows消息服務。SQL Server所在的機器和客戶機上的這個服務必須是啟動的,sp_ListConnections存儲過程返回了有關SQL Server連接或者在某個連接上執行某項操作的信息。連接通過@DBUltra, @PCUltra和其他參數經過了過濾。如果@PCTrain提供的指定操作執行了,那麼就不會返回有關連接信息的集合了。

我建議使用查詢分析器(Query Analyzer)中工具菜單下的用戶選項來建立正確的存儲過程調用,那麼它就可以通過簡單的鍵盤組合來執行了。下面這個截屏圖像演示了我的建議。

用戶選項

請注意,在下面的例子中,網頁的格式可能會導致某個參數值轉到第二行。如果是這樣的話,在執行代碼之前,刪除額外的CR/LF。

下面這個例子列出了涉及阻塞的連接的信息。

EXECUTE sp_ListConnections 1

這個例子通過SQL Agent任務系統列出了連接的信息。

EXECUTE sp_ListConnections 0,0,NULL,NULL,'SQLAgent%',NULL,'A'

這個例子列出了Northwind數據庫上所有活動的連接。

EXECUTE sp_ListConnections 0,1,NULL,NULL,'Northwind',NULL,'D'

這個例子向sysmessages表中添加了客戶消息。

EXECUTE sp_addmessage 50001,16,N'The server will be restarted in 10 minutes.'

這個例子給所有連接到服務器上的計算機發送了一條客戶消息。

EXECUTE sp_ListConnections @PCTrain = '50001'

這個例子給連接到Northwind數據庫的連接所在的計算機發送了一條文字消息。

EXECUTE sp_ListConnections 0,0,'Northwind',NULL,NULL,NULL,'D','The Northwind database will go offline in 10 minutes.'

這個例子中斷了連接到Northwind數據庫上的連接。

EXECUTE sp_ListConnections 0,0,'Northwind',NULL,NULL,NULL,'D','KILL @@SPID'

我希望這個系統存儲過程能對你有用。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved