阿里云服务器Windows Server 2008 R2远程桌面链接不上的解决办法

我们其中有一台阿里云服务器,操作系统是Windows Server 2008 R2,远程桌面连接经常连接不上,重启服务器后,又可以了,过几个小时又不行了,要频繁地重启服务器来解决。但通过阿里云后台的VNC远程工具又能连接上。

通过服务器事件查看器 → Windows日志 → 系统,看到来源为TermDD的错误发现,RDP 协议组件 X.224 在协议流中发现一个错误并且中断了客户端连接。这种报错就是导致远程连接经常中断的原因。
RDP 协议组件 X.224 在协议流中发现一个错误.png

微软官方早有这个问题,并且提供了解决办法:https://blogs.msdn.microsoft.com/scstr/2012/02/29/how-to-troubleshoot-the-terminal-server-security-layer-detected-an-error-in-the-protocol-stream-and-has-disconnected-the-client-client-ip-and-the-rdp-protocol-component-x-224-de/

修复命令:netsh int tcp set global chimney=disabled

修复之后,重启服务器生效。

另外,如果服务器安装了360杀毒软件,360的主动防御功能,也可能会导致远程桌面登录失败。注意2个问题的排查。

阿里云Windows server 2008 R2服务器无法更新补丁KB4531786

这个问题被我遇到了,Windows server 2012操作系统就能正常更新。暂时不清楚是阿里云的问题,还是微软这个操作系统的问题。
阿里云Windows server 2008 R2服务器无法更新补丁KB4531786.png
解决办法:

一,打开微软的补丁库:http://www.catalog.update.microsoft.com/home.aspx

二,分别搜索:KB4490628、KB4474419

三,然后把这2个补丁下载下来。下载的时候,一定要选择你服务器对应的版本,注意看清楚!

四,KB4490628和KB44744192这2个补丁手动在服务器里安装好,然后重启服务器生效。

五,再进行Windows update,KB4531786就能正常安装了。

阿里云Windows服务器在线扩容云盘简要步骤

一,按照惯例,扩容操作前先创建快照备份数据

二,如果实例创建时间早于2019-03-30,要先更新RedHat VirtIO SICI驱动

1,远程连接服务器
2,运行 → CMD,运行命令行窗口
3,输入powershell进入PowerShell交互界面
4,输入以下命令检查驱动版本:
    [System.Diagnostics.FileVersionInfo]::GetVersionInfo("C:\Windows\System32\drivers\viostor.sys")
5,查看FileVersion的580XX那个信息,如果大于等于58011,就可以进行第三步;如果小于58011,进行第6步
6,下载并解压virtio驱动,解压出来很多个文件夹,根据你的操作系统情况,选择对应的文件夹
    Windows Server 2008 R2和Windows 7 → win7
    Windows Server 2008  → Wlh
    Windows Server 2012和Windows Server 2012 R2  → Win8
    然后再根据你系统的情况,选择64位的amd64还是32位的x86文件夹。
7,经过第6步的2次文件夹选择,最终要明确文件夹的绝对路径。比如我解压到桌面上,路径是:    
    C:\Users\Administrator\Desktop\virtioDriver
    然后是64位的Windows Server 2008 R2系统,最终路径是:C:\Users\Administrator\Desktop\virtioDriver\win7\amd64\
8,在命令行窗口中执行:
    pnputil -i -a C:\Users\Administrator\Desktop\virtioDriver\win7\amd64\*.inf
9,重启windows服务器,使驱动更新生效
10,再执行第4步,查出来FileVersion的版本应该是58013

阅读剩余部分

无限级结构SQL查询所有下级和所有下级

Id,PId无限级结构,查询某个Id的所有下级或所有上级,使用WITH AS查询:

/*查找Id为1所有的下级*/
WITH T
AS( 
    SELECT Id,PId,Name,0 L FROM User WHERE Id=1
    UNION ALL 
    SELECT U.Id,U.PId,U.Name,L+1   
    FROM User U INNER JOIN T ON U.PId=T.Id  
) 
SELECT * FROM T

/*查找Id为100所有的上级*/
WITH T
AS( 
    SELECT Id,PId,Name,0 L FROM User WHERE Id=100
    UNION ALL 
    SELECT U.Id,U.PId,U.Name,L+1   
    FROM User U INNER JOIN T ON U.Id=T.PId  
) 
SELECT * FROM T