如何在大型的并且有表分区的数据库中进行DBCC CHECKDB操作 其实这个问题已经在《SQLSERVER企业级平台管理实践》里徐老师已经讲过了,不过我想用自己的语言再讲详细一些 笔记链接:笔记19-徐 如何在超大型数据库上运行DBCC CHECKDB 先来看一下表分区的概念图
如何在大型的并且有表分区的数据库中进行DBCC CHECKDB操作
其实这个问题已经在《SQLSERVER企业级平台管理实践》里徐老师已经讲过了,不过我想用自己的语言再讲详细一些
笔记链接:笔记19-徐 如何在超大型数据库上运行DBCC CHECKDB
先来看一下表分区的概念图
很多时候你或者因为性能问题而使用表分区技术,将一些数据放到不同的分区,而这些数据实际上是被逻辑的放到不同的文件组里
大家知道:不管是索引还是数据,文件组都是这些索引和数据存放的最小逻辑单位
文件组是文件的命名集合,用于简化数据存放和管理任务(例如,备份和还原操作,文件组备份和文件组还原)
MSDN 使用文件和文件组 :(v=sql.90).aspx
那么假如我有一个表使用了表分区技术,如下图
表中索引和数据放在这3个文件组中,其中历史数据/归档数据放在文件组1,索引放在文件组2,当前数据放在文件组3
当然,真实环境中的大型数据库会有更多的文件组用来存放不同的历史数据和索引!!
对于使用了分区表机制的数据库,对于存储历史数据的分区文件组,由于数据本身已经不会发生修改,我们可以把文件组类型设成只读模式,
防止任何误修改。
步骤一:
我们可以对文件组1进行一次DBCC CHECKFILEGROUP检查,如果没有错误,就将文件组1设置为只读,
这样以后就不用再执行DBCC CHECKFILEGROUP检查了,,因为文件组1是只读的,不会再对它进行修改
我们使用下面SQL语句检查文件组1是否有错误
CHECKFILEGROUP(1) 4 GO