运行DBCC CHECKDB命令节省时间的办法

近期我们做了一个关于数据库Corruption(损坏)的案例。众所周知,为了能够尽早的发现数据库Corruption以拯救更多的数据,我们通常会建议定期的运行DBCC CHECKDB命令对数据库进行检查。但是,请大家试想一下,如果我有个超级巨大的数据表,需要用超过25个小时才能完成对该表的DBCC CHECKDB操作(或者DBCC CHECKTABLE), 时间长到超出维护窗口时间,该怎么办?

建议使用DBCC CHECKFILEGROUP的方式:

  • 第一步: 创建 partition function.

--Create a partition function

CREATE PARTITION FUNCTION myRangePF2 (int)

AS
RANGE LEFT FOR VALUES (1, 100, 1000);

GO

有关创建partition function的详细介绍请参考:

https://msdn.microsoft.com/en-us/library/ms187802.aspx

 

  • 第二步:创建file group.

 

 

  • 第三步: 创建 partition scheme.

--create a partition scheme base on the partition function we created.

CREATE PARTITION SCHEME myRangePS2

AS
PARTITION myRangePF2

TO
(test1fg, test1fg, test1fg, test2fg );

Go

 

  • 第四步: 创建data files并映射到file group.

 

  • 第五步: 创建在partition上的数据表.

--create a test table by applying the partition scheme

create table TestTable

(id int,

name varchar(20)

) on myRangePS2(id)

 

接下来,一个数据表被多个data file所承载,并被分在不同file group中进行创建。 你现在可以使用DBCC CHECKFILEGROUP了!通过将一个需长时间运行的CHECKDB操作分成若干个小的CHECKFILEGROUP操作,这样就可以大大减少在一个大数据表上的一致性检查的时间。