首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对tempdb的DBCC校验数据库

对tempdb的DBCC校验数据库
EN

Database Administration用户
提问于 2019-06-18 17:41:11
回答 3查看 4.6K关注 0票数 6

是否建议在tempdb上运行DBCC CheckDB?如果是,可否请人列出理由?这可能出现在任何Server版本上。我拥有的是Server 2017。

EN

回答 3

Database Administration用户

发布于 2019-06-18 17:51:39

不,不推荐是因为这在很大程度上是浪费时间。当Server重新启动时,会从头创建tempdb。另外,里面的数据还不够长,不能很好地反映出它是否有问题,或者底层存储的问题。

在设置CHECKDB例程时,Ola的脚本和维护计划都将跳过tempdb。

它基本上无用的另一个原因是,如果tempdb确实被破坏了,您会很快知道的。查看我在这里的博客文章,在这里我故意破坏了tempdb:DBA天:轻柔地杀死TempDB

在SQLServer2019中,我们将能够在tempdb中的系统表中使用“内存中”技术。虽然这解决了相当大的争用问题,但您可以使用无法对内存表运行CHECKDB。检查这些数据的唯一方法是备份tempdb,这不是您可以做的事情。

代码语言:javascript
复制
BACKUP DATABASE tempdb TO DISK = 'D:\Backups\t.bak'

Msg 3147、级别16、状态3、第27行备份和还原操作不允许在数据库tempdb上运行。Msg 3013,16级,状态1,27行备份数据库正在异常终止。

如果您真的认为值得在SQL Server不允许您备份的数据库上运行checkdb,那么,我想这是您的维护窗口。

票数 10
EN

Database Administration用户

发布于 2019-06-18 17:56:50

补充埃里克的回答

对tempdb运行DBCC不执行任何分配或目录检查,必须获取共享表锁才能执行表检查。这是因为,出于性能原因,在tempdb上无法使用数据库快照。这意味着无法获得所需的事务一致性。

我能想到针对tempdb运行checkdb的唯一原因是当tempdb严重损坏时,使用它的会话开始出现错误。

此外,当tempdb被破坏时,您的用户数据库可能也会发生损坏。

我个人并没有在tempdb上进行校验。

票数 5
EN

Database Administration用户

发布于 2019-06-18 17:58:20

在这里,我有一个不同的观点,您“应该”对所有数据库运行checkdb,不管是系统还是用户period.Why,仅仅是因为数据库存储了信息--如果有损坏怎么办--您要重新启动SQl服务器吗?这样就清除了SQl数据库,并且“可能”损坏消失了。我也想让你读布伦特·奥扎尔博客

问:我应该运行CheckDB对抗TempDB吗?是的-你应该去。CheckDB不能像针对其他数据库那样对TempDB执行每次检查(输出将使您知道它无法创建快照),但它仍然可以针对TempDB运行各种检查,并且支持运行它。别跳过它!您应该检查主、模型、msdb和tempdb,以及所有的用户数据库。

应该像对用户数据库一样在Tempdb上运行checkdb吗?不,如果需要的话可以避免。

难道我根本不应该在tempdb数据库上运行checkdb吗?不,你应该跑。不要漏掉它。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/240831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档