When you run DBCC CHECKDB in SQL Server, it performs a comprehensive set of checks to validate the logical and physical integrity of the database.


DBCC CHECKDB, from Microsoft MSDN Library, checks logical and physical integrity of all the objects in the specified database by performing the following operations:

· Runs DBCC CHECKALLOC on the database - Checks consistency of disk space allocation structures for a specified database.

·  Runs DBCC CHECKTABLE on every table and view in the database - Checks the integrity of all the pages and structures that make up the table or indexed view.

· Runs DBCC CHECKCATALOG on the database - Checks for catalog consistency within the database.

·  Validates the contents of every indexed view in the database.

·  Validates link-level consistency between table metadata and file system directories and files when storing varbinary(max) data in the file system using FILESTREAM.

·  Validates the Service Broker data in the database

Overall, DBCC CHECKDB is a crucial maintenance command that helps ensure the integrity and reliability of a SQL Server database by checking both logical and physical aspects of its data and structures.

Here's a complete picture of what happens behind the scenes when DBCC CHECKDB runs:

1.      Initialization:

·   DBCC CHECKDB initializes by setting up necessary data structures and resources for the integrity checks. It acquires the necessary locks to ensure consistency during the process.

2.      Database Snapshot Creation (Optional):

·   If DBCC CHECKDB is executed with the WITH TABLERESULTS or WITH SNAPSHOT option, it creates a database snapshot to perform the checks. This snapshot ensures a consistent view of the database while CHECKDB is running, preventing interference from concurrent transactions.

3.      Allocation Integrity Checks:

·  CHECKDB begins by checking the allocation structures of the database, including pages, extents, and allocation units. It verifies the integrity of these structures to ensure they are correctly linked and organized, detecting any physical corruption or inconsistencies.

DBCC CHECKDB also checks the physical integrity of the database at the storage level. This involves:

·      Verifying the integrity of data pages, extents, and allocation units.

·      Detecting and repairing physical corruption, such as torn pages or checksum errors.

·      Ensuring that data pages are correctly linked and organized within the database files.

4.      Structural Checks:

·      After completing the allocation integrity checks, CHECKDB verifies the structural integrity of database objects such as tables, indexes, system catalog views, and metadata. It examines the object definitions, relationships, and dependencies to ensure they are consistent and correctly maintained.

5.      Logical Checks:

·     DBCC CHECKDB performs logical checks on data pages within the database. It validates data values, checks for orphaned records, verifies referential integrity, and ensures data consistency across related objects. This phase detects logical inconsistencies or corruption that may not be evident from allocation or structural checks alone.

DBCC CHECKDB examines the logical consistency of data within the database. This includes checking for:

·      Orphaned records: Records that do not have corresponding parent records in related tables.

·      Referential integrity: Ensuring that foreign key constraints are not violated.

·      Data type consistency: Verifying that data types are consistent across columns and tables.

·      Indexes and views: Checking the structure and consistency of indexes and views.

·      System tables and metadata: Verifying the integrity of system tables and metadata.

6.      Parallel Processing:

·    CHECKDB may utilize parallel processing to improve performance, especially on multi-core systems. It divides the workload into multiple threads responsible for checking different parts of the database concurrently, reducing the overall execution time.

7.      Reporting:

·    As CHECKDB progresses through the checks, it generates a detailed report summarizing the results. The report includes information about any corruption or inconsistencies found, along with recommendations for repair options if applicable.

8.      Repair Options (If Needed):

·      Depending on the severity of corruption detected, DBCC CHECKDB may offer repair options (REPAIR_ALLOW_DATA_LOSS, REPAIR_FAST, or REPAIR_REBUILD) to attempt automatic correction of certain issues. However, these options should be used cautiously as they can cause data loss or data integrity issues.

9.      Completion and Cleanup:

·   Once DBCC CHECKDB completes all checks and generates the report, it releases resources used during the execution and performs any necessary cleanup tasks.

Overall, DBCC CHECKDB is a critical maintenance command that helps ensure the integrity and reliability of a SQL Server database by performing comprehensive checks and validations. It plays a vital role in detecting and resolving corruption, ensuring data consistency, and maintaining database health.



There are a few options to use with DBCC CHECKDB and I'll go over a few of the more popular ones here:

  • NOINDEX - Specifies that intensive checks of nonclustered indexes for user tables should not be performed. This decreases the overall execution time. NOINDEX does not affect system tables because integrity checks are always performed on system table indexes.
  • NO_INFOMSGS - Suppresses all information messages.
  • PHYSICAL_ONLY - Limits the checking to the integrity of the physical structure of the page and record headers and the allocation consistency of the database. This check is designed to provide a small overhead check of the physical consistency of the database, but it can also detect torn pages, checksum failures, and common hardware failures that can compromise a user's data.
  • TABLOCK - Causes DBCC CHECKDB to obtain locks instead of using an internal database snapshot. This includes a short-term exclusive (X) lock on the database. TABLOCK will cause DBCC CHECKDB to run faster on a database under heavy load, but decreases the concurrency available on the database while DBCC CHECKDB is running.
  • DATA_PURITY - Causes DBCC CHECKDB to check the database for column values that are not valid or out-of-range. For example, DBCC CHECKDB detects columns with date and time values that are larger than or less than the acceptable range for the datetime data type; or decimal or approximate-numeric data type columns with scale or precision values that are not valid.

We'll go over some of the REPAIR options in a different section below.

No comments:

Post a Comment

Popular Posts