none
SQL Server 2012 在运行过程中,数据库的状态突然变成“恢复挂起”(SQL Server服务注册SPN失败!) RRS feed

  • 问题

  • 服务器环境如下:
    戴尔T330服务器(服务器做了RAID)、windows server 2012 r2 datacenter、SQL server 2012、.net framework v4.0.30319

    客户在使用的过程中多次反映系统有时无法登陆,经过跟踪发现数据库在运行一段时间后状态变成“恢复挂起”,重启SQL Server服务后恢复正常,但是运行几天后问题又重复出现,通过查看Windows系统日志未发现异常,查看SQL Server错误日志后,发现如下错误日志:

    The SQL Server Network Interface library could not register the Service Principal Name (SPN) [ MSSQLSvc/WIN-G47ST85UM16:1433 ] for the SQL Server service. Windows return code: 0xffffffff, state: 63. Failure to register a SPN might cause integrated authentication to use NTLM instead of Kerberos. This is an informational message. Further action is only required if Kerberos authentication is required by authentication policies and if the SPN has not been manually registered.

    The SQL Server Network Interface library could not register the Service Principal Name (SPN) [ MSSQLSvc/WIN-G47ST85UM16 ] for the SQL Server service. Windows return code: 0xffffffff, state: 63. Failure to register a SPN might cause integrated authentication to use NTLM instead of Kerberos. This is an informational message. Further action is only required if Kerberos authentication is required by authentication policies and if the SPN has not been manually registered.

    错误: 18456,严重性: 14,状态: 38。

    望告知小弟该问题产生的原因!感激不尽!


    2018年8月15日 7:12

答案

  • Hi 尘世中迷途程序员,

    不好意思让您久等了,还请谅解。

    根据我的经验,这个问题一般有一下两种可能:

    1. 数据库损坏。
    2. 数据库无法完成恢复。

    针对第一个可能性:
    我们建议您运行DBCC CHECKDB(Database_name)检查数据库是否有一致性错误。如果报错,请将报错信息上传。

    针对第二种可能性:
    SQL Server在重新打开数据库的时候会完成如下三件事情
    1. 分析要做的工作:SQL Server会去分析事务日志文件,找到要重做和回滚的事务。
    2. 重做: SQL Server会将已经提交,但是还没有来得及在硬盘上完成的修改重新做一遍。
    3. 撤销和回滚:上一次数据库被关闭时,可能有一些修改已经在数据页面上完成,但是事务本身没有被提交。对于这些做到一半的事务,SQL一律全部回滚,以保证数据库事件的一致性。

    所以我们建议不要将数据库设置为自动增长或者增长过于频繁,因为会生成很多的VLF(虚拟日志文件),会导致recovery时间非常长。针对小型数据库,建议设置自动增长为50·100M, 针对较大数据库,自动增长设置为200M。

    我们估计您的数据库恢复模式是FULL模式,另外几乎没有做log backup,因为full模式下SQL Server是不会自己截断事务日志的,所以有可能增长到较大的情况。我们建议您定期备份日志,然后收缩到正常大小。
    Right-click “your database”->tasks->shrink->files->change file type to “log”->Choose “Reorganize Pages before releasing unused space”->Shrink file to 200 MB.

    如果您的数据库通过DBCC CHECKDB之后发现没有任何报错,那么我们估计是SQL无法完成恢复,请您备份收缩之后,根据我们的建议调整数据库文件增长设置,然后继续观察问题是不是还会发生。

    Best Regards,

    Teige


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2018年8月28日 6:17
    版主

全部回复

  • Double check if that SPN is registered in domain correctly.
    2018年8月15日 12:14
  • 参考:

    https://mssqlwiki.com/tag/the-sql-server-network-interface-library-could-not-register-the-service-principal-name-spn/

    2018年8月16日 1:47
  • Hi 尘世中迷途程序员,

    能够描述一下您的环境吗? 这是一个单一实例还是在集群内,数据库上有没有配置Alwayson?另外您的客户端是通过什么连接的数据库?SQL Server Service使用的是什么账户?

    上面的日志严格来说并不能算是错误日志,这个只是一个通知性质的日志,告诉你SPN没有注册成功,但是一般情况下,没有SPN,数据库也可以正常工作,不会造成数据库挂起的现象,SPN一般只影响Windows Authentication过程中Kerberos认证。

    请再检查一下您的日志,看看是否有其他相关的错误,一般数据库挂起都有记录的。另外你现在用的什么版本的SQL Server,请安装该版本的最新的补丁。

    Best Regards,

    Teige


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.


    2018年8月16日 8:15
    版主
  • Teige Gao 你好,

    戴尔T330服务器(服务器做了RAID)、windows server 2012 r2 datacenter、SQL server 2012、.net framework v4.0.30319您要的是这个环境吗?

    不是集群是在单一实例里这个实例是SQL server的默认实例,没有配置Alwayson,客户端是通过微软出品的EF框架连接的,NT Service\MSSQLSERVER账户运行的SQL Server服务,这个账户是数据库安装好了以后就没有更改过的,目前还不确定该版本是否有最新的补丁!
    2018年8月22日 2:40
  • Hi 尘世中迷途程序员,

    我们正在研究这个问题,这可能需要一些时间,感谢您的理解和支持!

    Best Regards,

    Teige


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2018年8月22日 7:08
    版主
  • Teige Gao 你好,

    感谢你的尽心尽力,为此给您带来的困扰和麻烦,还请谅解!

    2018年8月22日 8:09
  • Teige Gao 你好,

    数据库主文件设置的增长率为15%,分区文件和数据库日志文件设置的增长率为1MB

    但是在半年时间内数据库日志已经高达250G,同时我注意到日志文件限制为2097152MB

    不知道这些配置会不会引起我遇到的问题?

    2018年8月22日 10:58
  • 1. Grow by 1MB will cause disk fragmentation and sql will constantly expand tempdb log file if apps use tempdb heavily. Set it to bigger number. 

    2. We never set file growth rate to %, hard to control disk usage.

    3. 2097152MB = 2PB, tempdb log file never be that big nowadays. 

    2018年8月22日 12:24
  • Hi 尘世中迷途程序员,

    不好意思让您久等了,还请谅解。

    根据我的经验,这个问题一般有一下两种可能:

    1. 数据库损坏。
    2. 数据库无法完成恢复。

    针对第一个可能性:
    我们建议您运行DBCC CHECKDB(Database_name)检查数据库是否有一致性错误。如果报错,请将报错信息上传。

    针对第二种可能性:
    SQL Server在重新打开数据库的时候会完成如下三件事情
    1. 分析要做的工作:SQL Server会去分析事务日志文件,找到要重做和回滚的事务。
    2. 重做: SQL Server会将已经提交,但是还没有来得及在硬盘上完成的修改重新做一遍。
    3. 撤销和回滚:上一次数据库被关闭时,可能有一些修改已经在数据页面上完成,但是事务本身没有被提交。对于这些做到一半的事务,SQL一律全部回滚,以保证数据库事件的一致性。

    所以我们建议不要将数据库设置为自动增长或者增长过于频繁,因为会生成很多的VLF(虚拟日志文件),会导致recovery时间非常长。针对小型数据库,建议设置自动增长为50·100M, 针对较大数据库,自动增长设置为200M。

    我们估计您的数据库恢复模式是FULL模式,另外几乎没有做log backup,因为full模式下SQL Server是不会自己截断事务日志的,所以有可能增长到较大的情况。我们建议您定期备份日志,然后收缩到正常大小。
    Right-click “your database”->tasks->shrink->files->change file type to “log”->Choose “Reorganize Pages before releasing unused space”->Shrink file to 200 MB.

    如果您的数据库通过DBCC CHECKDB之后发现没有任何报错,那么我们估计是SQL无法完成恢复,请您备份收缩之后,根据我们的建议调整数据库文件增长设置,然后继续观察问题是不是还会发生。

    Best Regards,

    Teige


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2018年8月28日 6:17
    版主
  • 先简单模式截断和收缩日志,再调度全备、日志备份

    同时也检查是否有长时间不提交的事务

    这2个可能性最大



    SQL Server 2016 ~ 2000 性能优化、方案设计 QQ:315054403 田园嘉兴

    2018年8月28日 23:33