根据我在网上以及本网站找到的信息,我尝试了以下所有方法(1-5)来检索 SQL Server 的最后启动日期:
SELECT 0 as Id, SYSDATETIME() as DT
union
SELECT 1, sqlserver_start_time FROM sys.dm_os_sys_info
union
SELECT 2, login_time FROM sys.dm_exec_sessions WHERE session_id = 1
union
SELECT 3, start_time from sys.traces where is_default = 1
union
SELECT 4, crdate FROM sysdatabases WHERE name='tempdb'
union
SELECT 5, create_date FROM sys.databases WHERE name = 'tempdb'
结果是:
0 2025-04-17 23:38:26.9364166
1 2025-04-13 19:09:42.2000000
2 2025-04-13 19:09:44.3166667
3 2025-04-13 19:09:46.5600000
4 2025-04-13 19:09:51.0900000
5 2025-04-13 19:09:51.0900000
问题:我一小时前刚启动了机器(以及随之启动的 SQL Server)。我预期的应该是 2025-04-17 22:38……,而不是 2025-04-13 19:09……。
该 SQL 服务器安装在 VMware 盒中。
在另一个 SQL Server 中,相同的版本和版本,我得到了正确的结果:
Id DT
0 2025-04-18 14:34:49.3442637
1 2025-04-18 14:34:03.4333333
2 2025-04-18 14:34:05.1233333
3 2025-04-18 14:34:09.7400000
4 2025-04-18 14:34:14.6100000
5 2025-04-18 14:34:14.6100000
我不明白为什么虚拟机中的结果会出错。我每次工作时都会启动和关闭主机和虚拟机。
我这里遗漏了什么吗?
- SQL Server 开发版 2019
对社区 Wiki 的评论。
启动时,是在上次关闭后出现这种情况,还是可能只是从休眠状态恢复? -马丁·史密斯
看起来更像是虚拟机并没有关闭客户机,而只是保存了它。这绝对不是 SQL Server 的问题,而肯定是虚拟化层配置问题(例如保存而不是关闭),或者类似的虚拟化层在操作系统启动时未能正确设置当前时间的问题。SQL 不可能显示错误的启动日期,也不可能在客户机操作系统关闭时奇迹般地在后台运行。—— Sean Gallardy
我建议检查错误日志的启动消息,以验证服务是否确实在预期时间(重新)启动,而不是作为DMV查询的替代方法。错误日志应该可以确认SQL Server服务实际上并没有像你假设的那样重新启动。—— Dan Guzman