db效能下降時很多朋友都想監控到是哪個客戶端、哪個使用者、哪台客戶端發起的什麼會話sql語句,
但是微軟自帶的要使用profiler才能實現,但是考慮效能問題,很多人不願意!
網上有很多指令碼能監控到客戶端資訊,但是唯獨不能獲取客戶端程序的sql語句!
我自己寫了乙個,供參考:
--1.新建儲存過程
--create proc prtest
--@spid int
--as
--dbcc inputbuffer (@spid)
--go
--2.將結果儲存到臨時變數#tmp
--3.建立儲存結果的臨時表
create table #jttest(
[會話id] [smallint] not null,
[使用者名稱] [nvarchar](128) not null,
[資料庫] [nvarchar](128) not null,
[狀態] [nvarchar](60) not null,
[命令] [nvarchar](16) not null,
[應用軟體] [nvarchar](128) not null,
[等待時間] [bigint] not null,
[等待型別] [nvarchar](60) not null,
[客戶機名] [nvarchar](128) not null,
[ip位址] [varchar](48) not null,
[tsql] [varchar](4000) null
) --4.將#tmp中值匯入到臨時表變數#jttest
insert into #jttest
([會話id]
,[使用者名稱]
,[資料庫]
,[狀態]
,[命令]
,[應用軟體]
,[等待時間]
,[等待型別]
,[客戶機名]
,[ip位址]
)select
[會話id]
,[使用者名稱]
,[資料庫]
,[狀態]
,[命令]
,[應用軟體]
,[等待時間]
,[等待型別]
,[客戶機名]
,[ip位址]
from #tmp
--5.獲得每個spid對應的tsql語句
create table #tmp01(
eventtype nvarchar(100),
parameters int,
eventinfo nvarchar(max)
) declare @cursid int
declare cur cursor for select [會話id] from #jttest
open cur
fetch next from cur into @cursid
while @@fetch_status=0
begin
insert into #tmp01 exec prtest @cursid
update #jttest set tsql=(select eventinfo from #tmp01 )
where 會話id=@cursid
truncate table #tmp01
fetch next from cur into @cursid
endclose cur
deallocate cur
drop table #tmp01
--6.檢視最終結果
select * from #jttest
drop table #tmp
drop table #jttest
--dbcc inputbuffer (896)
新浪微博客戶端詳解(一)
裡面總共使用了三種授權認證方式,這裡面我只講解第三種授權認證方式,其他兩種方式可以自己研究一下。本人在使用auth2.0的授權認證過程中,重寫了該介面.中只顯示了兩個步驟,就是獲取code值和token兩個值。這個圖中詳細介紹了auth2.0認證的過程和各個值的獲取。現在我把效果圖展示如下 獲取co...
php獲得客戶端ip
在php 中使用 server remote addr 來取得客戶端的 ip 位址,但如果客戶端是使用 伺服器來訪問,那取到的就是 伺服器的 ip 位址,而不是真正的客戶端 ip 位址。要想透過 伺服器取得客戶端的真實 ip 位址,就要使用 server http x forwarded for 來...
關於獲得客戶端ip
在 asp 中使用 request.servervariables remote addr 來取得客戶端的 ip 位址,但如果客戶端是使用 服務 器來訪問,那取到的就是 伺服器的 ip 位址,而不是真正的客戶端 ip 位址。要想透過 伺服器取得客戶端的真實 ip 位址,就要使用 request.se...