Sybase中查询某个进程在执行哪些查询
授权方式:署名,非商业用途,保持一致,转载时请务必以超链接(http://www.fwolf.com/blog/post/75)的形式标明文章原始出处和作者信息及本声明。sp_who可以查询系统中进程的情况,sp_lock可以查询系统中锁的情况,知道是哪个进程出了问题之后,可以用一下方法查询某个进程在干什么:
dbcc traceon(3604)
go
dbcc sqltext(pid)
其中pid为进程号,输出结果如下:
SQL Text: select xh,gcmc,zbjggsrq,zbtzsrq from gs_zbxx where datediff(dd,zbjggsrq,getdate())<=3 order by zbjggsrq desc
see also:
Sybase FAQ: 6/19 - ASE Admin (3 of 7)
Advanced ASE Administration
Update @ 2007-04-20
其实3604是指定dbcc把信息输出到用户屏幕上,相应的还可以使用dbcc traceon(3604)指定输出到errorlog,不过这些都是针对人为的操作,如果是使用程序,比如php语言来查询dbcc信息的话,php是无法得到这些输出的,这种情况就只能借助外部程序,比如isql或者sqsh来实现了,就像这样:
$sql = '';
$sql .= "dbcc traceon(3604)\n";
$sql .= "go\n";
$sql .= "dbcc sqltext($spid)\n";
// Notice, multi-line cmd
$cmd = "sqsh -S $host -U $user -P \"$pass\" -C \"$sql\"";
$rs = shell_exec($cmd);
然后对$rs进行处理,过滤掉dbcc产生的杂乱信息,就得到了实际的进程sql,还有一种dbcc查询方式,不过输出的信息更多更乱:
$sql .= "dbcc pss(0, $spid, 0)";
现在还剩下一个缺点,就是有些sql(可能是多行的)查询出来时会被无端截断,只显示后面一部分,不过大部分情况下还都是好的。
参考:
Bookmark and Share This Page
If you like this then please subscribe to the RSS Feed.
Save to Browser Favorites
Ask
backflip
blinklist
BlogBookmark
Bloglines
BlogMarks
Blogsvine
BuddyMarks
BUMPzee!
CiteULike
co.mments
Connotea
del.icio.us
DotNetKicks
Digg
diigo
dropjack.com
dzone
Facebook
Fark
Faves
Feed Me Links
Friendsite
folkd.com
Furl
Google
Hugg
Jeqq
Kaboodle
kirtsy
linkaGoGo
LinksMarker
Ma.gnolia
Mister Wong
Mixx
MySpace
MyWeb
Netvouz
Newsvine
PlugIM
popcurrent
Propeller
Reddit
Rojo
Segnalo
Shoutwire
Simpy
Slashdot
Sphere
Sphinn
Spurl.net
Squidoo
StumbleUpon
Technorati
ThisNext
Webride
Windows Live
Yahoo!
Email This to a Friend