我有定期执行CHECKDB的Server代理(2005)作业,以及高度分散的任何索引的碎片整理(/REORGANIZE)。这些是典型的维护最佳实践。我想知道我应该把这些工作应用到哪个系统数据库中?现在,我只在master上运行CHECKDB,我隐约记得设置它是因为我在某个地方的一本书中看到了它。
那么,对于以下哪一项,我应该执行CHECKDB和/或索引碎片整理?
发布于 2013-04-12 17:05:01
在我看来,实际上只适用于master和msdb。您不应该在模型或tempdb中有易失性数据( Kin指出了一篇关于tempdb中的损坏的好文章--如果您转到更现代的Server版本中,这应该不是什么问题)。我不会像往常那样做这些事,但是只有当你收到腐败报告的时候,我才会处理。国际水文学组织。如果您已经将用户对象添加到模型中,以便在每个新数据库中创建它们,这可能会增加风险,因此您可能希望将其包括在内。通常情况下,它是相当小,所以它没有真正的伤害,包括它无论如何。
对于defrag,MSDB实际上是您在这里需要担心的唯一数据库(特别是如果备份历史记录和作业历史表不受检查)。如果您将用户表放在那里,Master将是一个候选人,但我更愿意通过删除它们来解决这个问题,而不是尝试优化它们。如前所述,您不应该经常更改模型中的数据,而tempdb也不应该有任何永久对象,因此碎片整理要么是浪费性的,要么是虚假的,或者两者兼而有之。
发布于 2013-04-12 17:04:01
所有系统和用户数据库都应该使用CHECKDB进行检查。唯一的例外将是tempdb,因为您不能生成tempdb的快照,而引擎盖后面的checkdb将生成一个DB快照。
棘手的部分是tempdb (当Tempdb损坏时),因为我们都知道,当SQL Server重新启动时会重新创建Tempdb,但是Tempdb文件在重新启动Server时不会被删除,也不会初始化0(0),这样损坏就会持续。
Tempdb腐败(这是罕见的..。最有可能的原因是Server中的一个bug被描述为这里。
发布于 2013-04-12 16:42:51
使用本机windows工具进行碎片整理可能会带来比好更多的问题。坚持在主、msdb和模型上使用checkdb。Tempdb在启动时被重新创建。主数据库是关键的,如果你的模型损坏了,它很难制造新的数据库,但它很容易重新创建,除非你高度定制它,没有备份它。如果您从未改变模型,只需确保您有一个好的备份。
https://dba.stackexchange.com/questions/39844
复制相似问题