是否建议在tempdb上运行DBCC CheckDB?如果是,可否请人列出理由?这可能出现在任何Server版本上。我拥有的是Server 2017。
发布于 2019-06-18 17:51:39
不,不推荐是因为这在很大程度上是浪费时间。当Server重新启动时,会从头创建tempdb。另外,里面的数据还不够长,不能很好地反映出它是否有问题,或者底层存储的问题。
在设置CHECKDB例程时,Ola的脚本和维护计划都将跳过tempdb。
它基本上无用的另一个原因是,如果tempdb确实被破坏了,您会很快知道的。查看我在这里的博客文章,在这里我故意破坏了tempdb:DBA天:轻柔地杀死TempDB
在SQLServer2019中,我们将能够在tempdb中的系统表中使用“内存中”技术。虽然这解决了相当大的争用问题,但您可以使用无法对内存表运行CHECKDB。检查这些数据的唯一方法是备份tempdb,这不是您可以做的事情。
BACKUP DATABASE tempdb TO DISK = 'D:\Backups\t.bak'Msg 3147、级别16、状态3、第27行备份和还原操作不允许在数据库tempdb上运行。Msg 3013,16级,状态1,27行备份数据库正在异常终止。
如果您真的认为值得在SQL Server不允许您备份的数据库上运行checkdb,那么,我想这是您的维护窗口。
发布于 2019-06-18 17:56:50
补充埃里克的回答
对tempdb运行DBCC不执行任何分配或目录检查,必须获取共享表锁才能执行表检查。这是因为,出于性能原因,在tempdb上无法使用数据库快照。这意味着无法获得所需的事务一致性。
我能想到针对tempdb运行checkdb的唯一原因是当tempdb严重损坏时,使用它的会话开始出现错误。
此外,当tempdb被破坏时,您的用户数据库可能也会发生损坏。
我个人并没有在tempdb上进行校验。
发布于 2019-06-18 17:58:20
在这里,我有一个不同的观点,您“应该”对所有数据库运行checkdb,不管是系统还是用户period.Why,仅仅是因为数据库存储了信息--如果有损坏怎么办--您要重新启动SQl服务器吗?这样就清除了SQl数据库,并且“可能”损坏消失了。我也想让你读布伦特·奥扎尔博客
问:我应该运行CheckDB对抗TempDB吗?是的-你应该去。CheckDB不能像针对其他数据库那样对TempDB执行每次检查(输出将使您知道它无法创建快照),但它仍然可以针对TempDB运行各种检查,并且支持运行它。别跳过它!您应该检查主、模型、msdb和tempdb,以及所有的用户数据库。
应该像对用户数据库一样在Tempdb上运行checkdb吗?不,如果需要的话可以避免。
难道我根本不应该在tempdb数据库上运行checkdb吗?不,你应该跑。不要漏掉它。
https://dba.stackexchange.com/questions/240831
复制相似问题