tcp/ip启用后无法启动sqlserver2012 SQL Server (MSSQLSERVER)服务

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tcp/ip启用后无法启动sqlserver2012 SQL Server (MSSQLSERVER)服务相关的知识,希望对你有一定的参考价值。

tcp/ip启用后无法启动sqlserver2012 SQL Server (MSSQLSERVER)服务。禁用tcp/ip后就能启动何解?Windows事件报告的错误 :SQL Server 无法生成 FRunCommunicationsManager 线程。请查看 SQL Server 错误日志和 Windows 事件日志,获取有关可能发生的相关问题的信息。由于网络库中存在内部错误,所以无法启动网络库。要确定原因,请查看错误日志中紧位于此错误之前的那些错误。TDSSNIClient 初始化失败,出现错误 0x277a,状态代码 0x1。原因: Initialization failed with an infrastructure error. Check for previous errors. The requested service provider could not be loaded or initialized. 服务器无法在 'any' <ipv6> 1433 上侦听。错误: 0x277a。若要继续,请通知您的系统管理员。网上搜了很多建议都没用,数据库已经重装2次,求解求解,谢谢谢谢!

可能是 1433 端口被其它程序占用了,请检查本机是否有多个 SQL实例,可以在SQL的 "配置工具"下找到一个“SQL Server Configuration Manager(SQL配置管理)”的程序,可以在里面修改默认端口1433。
可以将其中的 1433 改为 其它的端口号,如 14330,测试是否可以启动服务,如果可以启动了的话,就是 1433端口被其它程序占用了追问

没有多个实例,端口也改了 。还是不行,只有禁用tcp/ip才能启动服务.....

参考技术A 我昨天也遇到此情况,以前用的好好的sql2008r2,昨天发现服务起不来了,害的我卸载重装了两次,今天来还是不行,报错什么数据库句柄错误,看帖禁用tcp就好了,还真是,但这怎么好好的不让用tcp协议了 参考技术B 我也是遇到了这个奇葩问题,解决了吗? 参考技术C 所以楼主你最后解决了么 我现在也出现了这个问题 参考技术D 我也遇到这个问题。。。。答主解决了嘛

浅谈TCP/IP四种计时器慢启动拥塞避免快速重传快速恢复

持续计时器

假设一种场景:A给B发送数据,如果B告诉A自己的缓冲区已满,于是A停止发送数据,等待一段时间后,B的缓冲区出现了富余,于是给A发送报文告诉rwnd大小为400,但是这个报文不幸丢失了,于是就出现A等待B的通知,B等待A发送数据的死锁状态,为了处理这种问题,TCP引入了持续计时器,当A收到B的零窗口通知时,就启用该计时器,时间到则发送一个字节的探测报文,对方会在此时回应自身的接收窗口大小,如果仍然为0,则重置持续计时器,继续等待.

重传计时器

当TCP发送报文段时,就创建该特定报文段的重传计时器,可能发-生两种情况:

  • 若在计时器截止时间到之前收到了对此特定报文段的确认,则撤销此计时器.
  • 若收到了对此特定报文段的确认之前计时器截止期到,则重传此报文段,并将计时器复位.

保活计时器

保活计时器使用在某些实现中,用来防止在两个TCP之间的连接出现长期的空闲,假定客户端打开了服务器的连接,传送了一些数据,然后就保持静默,也许这个客户端出故障了,在这种情况下,这个连接将永远保持打开状态,要解决这种问题,在大多数的实现中都是使服务器设置保活计时器,每当服务器收到客户端的信息,就将计时器复位,超时通常设置为2小时,若服务器过了2小时还没有收到客户端的信息,就发送探测报文段,若发送10个探测报文段(每一个相隔75秒)还没有响应,就假定客户端除了故障,因而就终止该连接.

时间等待计时器

也就是上篇文章中所说的TCP四次挥手中,主动关闭方最后为什么要等待2MSL之后才能关闭连接?

慢启动

最初的TCP在连接建立成功后会向网络中发送大量的数据包,这样很容易导致网络中路由器缓存空间耗尽,从而发生拥塞。因此新建立的连接不能够一开始就大量发送数据包,而只能根据网络情况逐步增加每次发送的数据量,以避免上述现象的发生。具体来说,当新建连接时,cwnd初始化为1个最大报文段(MSS)大小,发送端开始按照拥塞窗口大小发送数据,每当有一个报文段被确认,cwnd就增加1个MSS大小。这样cwnd的值就随着网络往返时间(Round Trip Time,RTT)呈指数级增长,事实上,慢启动的速度一点也不慢,只是它的起点比较低一点而已。我们可以简单计算下:

开始 ——> cwnd = 1
经过一个RTT 后(即收到一个ACK后)  cwnd = 2*1 = 2
经过两个RTT后(即收到两个ACK后)  cwnd = 2*2 =4
经过三个RTT后(即收到两个ACK后)  cwnd =2*2*2 = 8

拥塞避免

从慢启动可以看到,cwnd可以很快的增长上来,从而最大程度的利用网络带宽资源,但是cwnd不能一直这样无限增长下去,一定需要某个限制。TCP使用了一个叫慢启动门限(ssthresh)的变量,当cwnd超过该值后,慢启动过程结束,进入拥塞避免阶段。对于大多数TCP实现来说,ssthresh的值是65536(同样以字节计算)。拥塞避免的主要思想是加法增大,也就是cwnd的值不再指数级往上升,开始加法增加。此时当窗口中所有的报文段都被确认时,cwnd的大小加1,cwnd的值就随着RTT开始线性增加,这样就可以避免增长过快导致网络拥塞,慢慢的增加调整到网络的最佳值。

上面讨论的两个机制都是没有检测到拥塞的情况下的行为,那么当发现拥塞了cwnd又该怎样去调整呢?

首先来看TCP是如何确定网络进入了拥塞状态的,TCP认为网络拥塞的主要依据是它重传了一个报文段。上面提到过,TCP对每一个报文段都有一个定时器,称为重传定时器(RTO),当RTO超时且还没有得到数据确认,那么TCP就会对该报文段进行重传,当发生超时时,那么出现拥塞的可能性就很大,某个报文段可能在网络中某处丢失,并且后续的报文段也没有了消息,在这种情况下,TCP反应比较“强烈”:
1.把ssthresh 降为cwnd值的一半.
2.把cwnd重新置为1
3.重新进入慢启动过程。
从整体上来讲,TCP拥塞控制窗口变化的原则是AIMD原则,即加法增大、乘法减小。可以看出TCP的该原则可以较好地保证流之间的公平性,因为一旦出现丢包,那么立即减半退避,可以给其他新建的流留有足够的空间,从而保证整个的公平性。

快速重传

其实TCP还有一种情况会进行重传:那就是收到3个相同的ACK。TCP在收到乱序到达包时就会立即发送ACK,TCP利用3个相同的ACK来判定数据包的丢失,此时进行快速重传,快速重传做的事情有:
1.把ssthresh设置为cwnd的一半
2.把cwnd再设置为ssthresh的值+3
3.重新进入拥塞避免阶段

快速恢复

后来的“快速恢复”算法是在上述的“快速重传”算法后添加的,当收到3个重复ACK时,TCP最后进入的不是拥塞避免阶段,而是快速恢复阶段。快速重传和快速恢复算法一般同时使用。快速恢复的思想是“数据包守恒”原则,即同一个时刻在网络中的数据包数量是恒定的,只有当“老”数据包离开了网络后,才能向网络中发送一个“新”的数据包,如果发送方收到一个重复的ACK,那么根据TCP的ACK机制就表明有一个数据包离开了网络,于是cwnd加1。如果能够严格按照该原则那么网络中很少会发生拥塞,事实上拥塞控制的目的也就在修正违反该原则的地方。
1.当收到3个重复ACK时,把ssthresh设置为cwnd的一半,把cwnd设置为ssthresh的值加3,然后重传丢失的报文段,加3的原因是因为收到3个重复的ACK,表明有3个“老”的数据包离开了网络。
2.再收到重复的ACK时,拥塞窗口增加1。
3.当收到新的数据包的ACK时,把cwnd设置为第一步中的ssthresh的值。原因是因为该ACK确认了新的数据,说明从重复ACK时的数据都已收到,该恢复过程已经结束,可以回到恢复之前的状态了,也即再次进入拥塞避免状态。

以上是关于tcp/ip启用后无法启动sqlserver2012 SQL Server (MSSQLSERVER)服务的主要内容,如果未能解决你的问题,请参考以下文章

c# TCP/IP 自动断开

如何解决SQL Server 2008 无法连接到

通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败。错误:“connect timed out。请验证连接属性,并

我安装了windows虚拟网卡,无法获取IP地址,也不能上网了?

FAQ系列 | 启用SELinux后,PHP连接MySQL异常

打开VPN后无法访问局域网共享文件