大家好,我叫 Kirk。是 GSE 团队的一名高级首席工程师。本视频专门介绍 Microsoft SQL Server TSQL 数据库工具 DBCC CHECKDB。我们将讨论为什么以及何时应该运行 DBCC CHECKDB,以及确定数据库检查级别和所涉及的运行时的命令选项。
在开始演示之前,我们想讨论几个要点。DBCC CHECKDB 是一种 TSQL 工具,用于查看给定 SQL Server 数据库中所有对象的逻辑和物理完整性。我们还提供一些修复选项,还有“TABLOCK”选项,可用于使用或不使用数据库快照。我们将了解“ESTIMATEONLY”选项,了解为什么要使用它,这与 CHECKDB 过程中使用的“TEMPDB”有关。
此外,我们还将了解“PHYSICAL_ONLY”,了解为什么要使用该选项以及何时使用该选项。我们还将研究如何通过“MAXDOP”来控制 CHECKDB 进程中涉及的处理器数量。现在,我们将看一些运行 DBCC CHECKDB 时会看到的情况示例。因此,从字面上看,第一个命令本身将检查 DBCC CHECKDB 在给定数据库中可能查看的所有内容。
所以,这是结果。运行此命令时,我们最关注的返回线是数据库中发现的“分配错误”和“一致性错误”的数量。因此,我有一个健康的“AdventureWorks2019”数据库,因此所有内容都会恢复,没有错误。它也是一个小型数据库,运行速度非常快。如果我们有一个更大的数据库,例如一个数据库的 100 倍,那么运行它将需要更长的时间。
而且,很多人想知道我们应该多久尝试运行一次DBCC CHECKDB,通常SQL大师会告诉你,你想尽快尝试运行它。如果数据库中有任何不一致或任何类型的软件损坏,您希望尽快发现并处理它。接下来,我们来看一个叫做“WITH PHYSICAL_ONLY”的选项。
这是相同的命令,只是在这种情况下,它实际上只检查物理实体或数据库本身的结构。它的运行速度通常比完全检查快得多,这就是为什么我们希望在维护时间有限制的生产环境中运行它。我们还有另一个叫做“WITH TABLOCK”的选项,所以我们需要了解关于DBCC CHECKDB的一件事是,它做的第一件事是创建一个快照文件,该文件包含在“TEMPDB”数据库中,有时我们可能无法将“TEMPDB”用于类似CHECKDB进程的事情。
因此,无论我们指定什么“WITH TABLOCK”,我们都会告诉 DBCC CHECKDB 不要创建快照文件,因此它不会占用“TEMPDB”中的该空间,因此它通常会运行得更快。我们可以作为选项运行的其他内容之一是“WITH ESTIMATEONLY”。这个特定的命令将告诉我们在运行 CHECKDB 时,我们期望在“TEMPDB”数据库中使用多少空间。
下面是一个输出示例,它以 KB 为单位返回,大约是 230 MB。我们的另一个选择是“WITH MAXDOP”。现在,无论 DBCC CHECKDB 运行什么,它都会尝试使用并行运行所需的任意数量的处理器。它希望运行多个线程,以便尝试尽快执行。因此,我们希望允许在此过程中运行的处理器数量可能会有限制,因此我们可以使用“WITH MAXDOP”语句来限制它。
在本例中,我告诉 SQL 只使用一个处理器来运行 CHECKDB。而且,当我们这样做时,专用于此目的的处理器更少,但是,运行 DBCC CHECKDB 通常需要更长的时间。接下来,我们来看看修复选项。因此,有不同的维修选项。最激烈的是我们所说的“REPAIR_ALLOW_DATA_LOSS”。每当我们使用此选项尝试修复返回错误的数据库时,您都可能会丢失数据。或者,我们可以使用“REPAIR_REBUILD”。
REPAIR_REBUILD被认为是软修复选项,我们的意思是它可以保证在运行它时不会丢失数据库中的可用数据。因此,这个命令的布局方式,我们将使用“Master”数据库的上下文。每当我们做这样的事情时,我们都必须将数据库置于“SINGLE_USER”模式才能进行修复作。在本例中,我们将运行它。
现在,我们可以选择“ESTIMATEONLY”,同样,“ESTIMATEONLY”会告诉我们要在“TEMPDB”中放弃多少空间来执行此作。根据此处返回的数据,我们的快照文件将占用大约 230 MB。在对其进行修复后,我们希望将其重新置于“MULTI_USER”模式。现在,使用“ESTIMATEONLY”时,我们实际上并未运行修复,而只是进行了估算。我们来看看如何使用“REPAIR_REBUILD”运行命令。
再来一次“Execute”命令,我们要把它放回“MULTI_USER”。同样,在“Master”数据库的上下文中,我们要将其设置为“SINGLE_USER”模式。在本例中,我们要执行修复作。这是软修复作。您将看到的是我们在常规数据库检查中看到的大部分内容,当然,我们要再次检查报告的错误。在这种情况下,再一次,没有。
我这里有一个很好的数据库。此作的最后一部分是将其放回“MULTI_USER”模式。“REPAIR_ALLOW_DATA_LOSS”修复命令与“REPAIR_REBUILD”完全一样,只不过我们使用的是“REPAIR_ALLOW_DATA_LOSS”。通常,当我们尝试运行“REPAIR_REBUILD”时,“REPAIR_REBUILD”返回并告诉我们它无法完成数据库修复时,我们运行此命令。
因此,我们没有良好备份的最后手段,是的,我们应该在被迫进行“REPAIR_ALLOW_DATA_LOSS”之前使用良好的备份。如果不存在备份,这是我们使数据库恢复联机并可用的唯一选项。我们讨论 DBCC CHECKDB、考虑何时使用 CHECKDB 以及一些最常见的可用命令选项的演示到此结束。我希望此视频能帮助您了解在尝试维护一致、稳定的 SQL Server 数据库安装时使用 DBCC CHECKDB 的价值。
感谢观看。