我有一台主要用作开发服务器的 SQL 2008 服务器,在过去的两周内它偶尔会出现“故障”,我已经将这些故障的原因隔离开来,因为 CHECKDB 几乎连续运行,以下日志信息记录到 Windows 事件日志中(来源:MSSQLSERVER,类别:服务器):
事件:1073758961,消息:启动数据库“DBName1”。 事件:1073758961,消息:启动数据库“DBName2”。 事件:1073759397,消息:数据库“DBName1”的 CHECKDB 已于 2010-07-19 20:29:26.993(当地时间)无错误完成。这只是一条信息性消息;无需用户采取任何措施。 事件:1073759397,消息:数据库“DBName1”的 CHECKDB 已于 2010-07-19 20:29:26.993(当地时间)无错误完成。这只是一条信息性消息;无需用户采取任何措施。
每 1-2 秒重复一次,直到 SQL Server 重新启动或有问题的数据库被分离。
我最初以为是数据库的问题,因此我进行了备份并将其恢复到 SQL Express 实例,所有数据都完好无损,并且 CHECKDB 运行时没有问题。
上周出现问题的两个数据库并未使用;因此我对它们进行了完整备份并分离了数据库,这解决了问题。然而今天早上 01:00 GMT,其他完全不相关的数据库开始出现同样的问题。
事件日志中没有任何内容表明服务器发生了某些事情(例如重启),也没有关于进程崩溃或存储控制器检测到问题的消息。
与公司老板交谈时得知,这台电脑过去曾遭遇过“故障”,不过,他们听取了建议,更换了主板,重建了电脑,内存和处理器都一样。
统计数据:
- 操作系统:Windows 2008 标准版本 6002
- 中央处理器: 2x 奔腾双核 E5200 @ 2.5GHz
- 内存:2GB
- SQL:2008 标准 10.0.2531
编辑:有人发了一条关于 AutoClose 的评论,然后又删除了,受影响的数据库上已启用该功能。看来最佳做法是禁用它,所以我按照以下方法禁用了它。
EXECUTE sp_MSforeachdb
'IF (''?'' NOT IN (''master'', ''tempdb'', ''msdb'', ''model''))
EXECUTE (''ALTER DATABASE [?] SET AUTO_CLOSE OFF WITH NO_WAIT'')'
我不知道该问题是否会在一段时间内再次出现,因此我仍然愿意接受进一步的回答。
答案1
查看自动关闭数据库的属性。将其关闭
答案2
自动关闭:
当设置为 ON 时,最后一个用户退出后,数据库将彻底关闭并释放其资源。当用户再次尝试使用数据库时,数据库将自动重新打开。
当设置为 OFF 时,数据库在最后一个用户退出后仍保持打开状态。
ALTER DATABASE DBName1 SET AUTO_CLOSE OFF;
默认情况下,在 Express 实例上创建的数据库具有 AUTO_CLOSE ON;
答案3
服务器重启后,任何 SQL 数据库的正常过程都是......
SQL Server 检查数据库 (MDF) 中最后应用的事务与事务日志 (LDF) 中最后注册的事务。如有必要,它可以将日志中的事务应用到 DB。