背景:
今天在做keepalive的实验,设法模拟keepalive不成功的场景,从而达到“ the local TCP will keep sending “Keep Alive” packet in an interval of KeepAliveInterval for TcpMaxDataRetransmissions times. ”的目的。但是通过:
- stop sqlserver服务,tcp\ip能够检测到服务断开,因此在netmon中可以看到最后一条信息是服务器端发给客户端的的keepalive,scale factor=0。
- pause sqlserver服务,keepalive继续进行,此时使用sqlcmd连接sql server 实例会提示数据库出去paused状态。
这两种方法都不能实现上面的场景。后来经过同事提示说试一试suspend sqlservr.exe这个进程试试看,看看还能不能keepalive。从而就有了本文的主题。
要达到suspend 进程可以通过attach to process的方法,主要有两种方式:
- 使用visual studio->debug->attach to process
- 使用windbg->file->attach to a process...
可惜即使我attach process了,keepalive孩子,但是无法使用sqlcmd连接数据库实例,不过和pause服务不同的是,这里会提示连接超时。
本文转自xwdreamer博客园博客,原文链接:http://www.cnblogs.com/xwdreamer/archive/2012/08/03/2622198.html,如需转载请自行联系原作者