检查当前数据库的有效性。可选择更正 dbspace 或数据库的分配问题。 sp_iqcheckdb 如果分区数据存在于脱机 dbspace 上,则不检查分区表。
sp_iqcheckdb 读取数据库中的所有存储。成功完成后,系统将更新数据库空闲列表(内部分配映射),以反映数据库的真实存储分配情况。然后,sp_iqcheckdb 生成一个报告,列出它已经执行的操作。
如果发现错误,则 sp_iqcheckdb 会报告对象的名称和错误的类型。如果检测到错误,sp_iqcheckdb 不会更新空闲列表。
使用 sp_iqcheckdb 还可以检查指定的表、索引、索引类型或整个数据库的一致性。
注意sp_iqcheckdb 是 SAP IQ 数据库一致性检查程序 (DBCC) 的用户界面,有时称为 DBCC。
sp_iqcheckdb 'mode target [ … ] [ resources ]'
mode:
{ allocation
| check
| verify }
| dropleaks
target:
[ indextype […] ] database [nomirrorcheck]
| database resetclocks
| { [ indextype ] […] table [ partition ] […]
| index
| […] dbspace }
| cache
有三种检查数据库一致性的模式,以及一种重置分配映射的模式。如果参数字符串中既没有指定模式也没有指定目标,则 SAP IQ 会返回错误消息:
At least one mode and target must be specified to DBCC.dbspace 都必须处于联机状态。
Multiplex。排除数据库一致性检查中的镜像 DAS dbfile。
index-type>以下索引类型之一:FP、CMP、HG、HNG、WD、DATE、TIME、DTTM、TEXT。 如果指定的 <index-type> 在目标中不存在,则返回错误消息。如果指定多个索引类型,并且目标仅包含这些索引类型中的一部分,则 sp_iqcheckdb 将处理现有索引类型。
index-name>可能包含所有者和表限定符:[[table-name>.]<index-name>。 如果未指定 table>,则 <index-name> 必须是唯一的。
table-name>可能包含所有者限定符:[table-name>如果未指定 table-name> 不能是临时表或预连接表。 注意 如果表名称或索引名称包含空格,请将 < table-name> 或 <index-name> 参数用双引号引起来:sp_iqcheckdb 'check index "dbo.sstab.i2" resources 75'
dbspace-name><dbspace-name> 参数不包含限定符。如果它包含空格,请将其放在双引号内。 dbspace 目标检查属于该 dbspace 的数据库页的子集。dbspace 必须联机。当表只有一个 dbspace 时,dbspace 和数据库目标在语义上是等同的。
dbspace 中的页面与 IQ 主存储库中的原始页面进行比较。
注意sp_iqcheckdb 参数字符串必须用单引号引起来,并且长度不能超过 255 字节。 分配问题可以在沙漏模式下进行修复。
SAP IQ 服务器和 Multiplex。
您必须具有系统过程的 EXECUTE 特权。您还必须拥有 ALTER DATABASE 系统特权。
sp_iqcheckdb 检查数据库中每个块的分配情况,并在当前会话中保存该信息,直至发出下一个 sp_iqdbstatistics 过程。sp_iqdbstatistics 显示最近一次执行 sp_iqcheckdb 的最新结果。
sp_iqcheckdb 可以执行几种不同的功能,具体取决于指定的参数。
模式说明分配根据整个数据库、特定索引、特定索引类型、特定分区、特定表或特定 dbspace 的块映射信息检查分配情况。不检查索引一致性。检测重复块(两个或多个对象声明对其的所有权的块)或额外块(对象所拥有的未分配块)。检测数据库或 dbspace 目标的泄漏块(在指定目标中任何对象都未声明的已分配块)。当目标为分区表时,allocation mode: 检查所有表分区分配位图的元数据检查表分配位图的元数据验证块映射条目与表的分配位图是否一致验证表的分区分配位图没有重叠检查在表的分区分配位图中定义的行是否构成表的存在位图的超集检查在表的分区分配位图中定义的行是否构成表的分配位图的超集验证主高速缓存页与 IQ 主存储库页是否一致。注意 如果在输入参数字符串中指定单个索引、索引类型或表的名称,则 sp_iqcheckdb 不能检查所有分配问题。 以分配模式运行: 检测重复块或无主块(使用数据库或特定表或索引作为目标)如果遇到页头错误DBCC 选项 resetclocks 仅用于分配模式。resetclocks 与强制恢复一起使用,以将 Multiplex 辅助服务器转换成协调器。有关 Multiplex 功能的信息,请参见“SAP IQ 管理:Multiplex”。resetclocks 将在内部数据库版本控制时钟落后时更正这些时钟的值。除非曾经咨询过 SAP IQ 技术支持,否则请勿将 resetclocks 选项用于任何其它目的。 resetclocks 选项必须在单用户模式下运行,并且只能与 DBCC 语句 allocation database 一起使用。resetclocks 的语法为:sp_iqcheckdb 'allocation database resetclocks'检查验证可以读取整个数据库、主高速缓存、特定索引、特定索引类型、特定表、特定分区或特定 dbspace 的所有数据库页。如果表已分区,则检查模式将检查表的分区分配位图。 如果在运行查询时返回元数据、空计数或非重复计数错误,则会在检查模式下运行。验证验证整个数据库、主高速缓存、特定索引、特定索引类型、特定表、特定分区或特定 dbspace 的非 FP 索引及其相应 FP 索引的内容。如果指定的目标包含 FP 及相应的非 FP 索引的所有数据页,则验证模式会检测以下不一致问题: 缺失键 – 某键在 FP 中,但不在非 FP 索引中。附加键 – 某键在非 FP 索引中,但不在 FP 索引中。缺失行 – 某行在 FP 中,但不在非 FP 索引中。附加行 – 某行在非 FP 索引中,但不在 FP 索引中。如果指定的目标仅包含 FP 页的一个子集,则验证模式仅可以检测以下不一致问题: 缺少键缺少行如果目标是分区表,则验证模式还将验证是否已将表或表分区中的每一行分配给正确的分区。如果在运行查询时返回元数据、空计数或非重复计数错误,则会在验证模式下运行。注意 sp_iqcheckdb 不检查参照完整性或修复参照完整性违规。 沙漏当 SAP IQ 服务器以单节点模式运行时,您可以将沙漏模式与数据库或 dbspace 目标结合使用以重置整个数据库或指定 dbspace 目标的分配映射。如果目标是 dbspace,则沙漏操作还必须阻止对已命名 dbspace 的读写操作。数据库或 dbspace 列表中的所有 dbspace 都必须处于联机状态。 在 Multiplex 协调器节点上,沙漏模式还检测整个 Multiplex 中的泄漏块、重复块或额外块。
DBCC 性能
DBCC 的执行时间根据进行全面数据库检查的数据库的大小、指定的表或索引的数目以及计算机的大小而有所不同。如果仅检查数据库的子集(即仅检查指定的表、索引或索引类型),则需要的时间要比检查整个数据库少。
注意 如果 sp_iqcheckdb 无法访问 DAS dbspace 中的 DAS dbfile,则 DBCC 将直接发出错误消息,并不会重试 DAS dbspace 检查。在执行 sp_iqcheckdb 之前,请确保 DAS dbfile 节点和镜像 DAS dbfile 节点正在运行。
sp_iqcheckdb 沙漏模式的处理时间取决于 dbspace 目标数。
下表总结了四种 sp_iqcheckdb 模式的操作和输出。
模式检测到的错误输出速度分配分配错误仅限分配统计信息每小时 4 TB检查分配错误 大部分索引错误所有可用统计信息每小时 60 GB验证分配错误 所有索引错误所有可用统计信息每小时 15 GB沙漏分配错误仅限分配统计信息每小时 4 TB
输出
根据执行模式,sp_iqcheckdb 的输出包括摘要结果、错误、信息性统计信息和修复统计信息。如果在单个会话中指定多个模式,则输出最多可能包含三个结果集。错误统计信息用星号 (***) 表示,并且仅当检测到错误时才会显示。
sp_iqcheckdb 的输出还会复制到 SAP IQ 消息文件 .iqmsg。如果 DBCC_LOG_PROGRESS 选项是 ON,则 sp_iqcheckdb 会将进度消息发送到此 IQ 消息文件,从而使用户可以跟踪 DBCC 操作的执行进度。
检查整个数据库的分配:
sp_iqcheckdb 'allocation database'在 dbspace IQ_SYSTEM_MAIN 上执行沙漏模式:
sp_iqcheckdb 'dropleaks dbspace IQ_SYSTEM_MAIN'对索引 i1 、 i2 和 dbo.t1.i3 执行详细检查。如果不指定新模式,则 sp_iqcheckdb 将对剩余的目标应用相同模式,如以下命令所示:
sp_iqcheckdb 'verify index i1 index i2 index dbo.t1.i3'可以组合所有模式,并可以在单个会话中对数据库运行多项检查。对表 t2 中的分区 p1 执行快速检查,对索引 i1 执行详细检查,并使用一半 CPU 对整个数据库执行分配检查:
sp_iqcheckdb 'check table t2 partition p1 verify index i1
allocation database resources 50'
检查数据库中类型为 FP 的所有索引:
sp_iqcheckdb 'check indextype FP database'验证表 t1 中的 FP 和 HG 索引以及表 t2 中的 HNG 索引:
sp_iqcheckdb 'verify indextype FP indextype HG table t1 indextype HNG table t2'检查 LVC 单元不一致问题:
sp_iqcheckdb 'check index EFG2JKL.ASIQ_IDX_T208_C504_FP'
Index Statistics:
Inconsistent Index: abcd.EFG2JKL.ASIQ_IDX_T208_C504_FP **** FP
Indexes Checked: 1
Unowned LVC Cells: 212 ******
sp_iqcheckdb LVC 单元消息包括:
这些消息表明与 VARCHAR、VARBINARY、LONG BINARY (BLOB) 或 LONG VARCHAR (CLOB) 列的不一致。无主 LVC 单元表示少量的不可用磁盘空间,可安全地忽略。重复和未分配的 LVC 单元为严重的错误,只能通过删除已损坏的列解决。
若要删除已损坏的列,请使用旧列的副本创建一个新列,然后删除原始列并将新列重命名为旧列。
注意 LVC 是一个宽度大于 255 的 VARCHAR 或 VARBINARY 列。LONG BINARY (BLOB) 和 LONG VARCHAR (CLOB) 也使用 LVC。
运行 sp_iqcheckdb 'allocation database' :
sql</h1>
<h1>DBCC Allocation Mode Report </h1>
<h1> DBCC Status No Errors Detected </h1>
Allocation Summary
===================================================================
Blocks Total 25600
Blocks in Current Version 5917
Blocks in All Versions 5917
Blocks in Use 5917
<h1> % Blocks in Use 23 </h1>
<h1>Allocation Statistics</h1>
Marked Logical Blocks 8320
Marked Physical Blocks 5917
Marked Pages 520
Blocks in Freelist 2071196
Imaginary Blocks 2014079
Highest PBN in Use 1049285
Total Free Blocks 19683
Usable Free Blocks 19382
% Total Space Fragmented 1
% Free Space Fragmented 1
Max Blocks Per Page 16
1 Block Page Count 165
3 Block Page Count 200
4 Block Page Count 1
10 Block Page Count 1
16 Block Page Count 153
2 Block Hole Count 1
3 Block Hole Count 19
6 Block Hole Count 12
7 Block Hole Count 1
10 Block Hole Count 1
15 Block Hole Count 1
16 Block Hole Count 1220
Partition Summary
Database Objects Checked 2
Blockmap Identity Count 2
<h1> Bitmap Count 2 </h1>
<h1>Connection Statistics</h1>
Sort Records 3260
Sort Sets 2
===================================================================
<h1>DBCC Info </h1>
DBCC Work units Dispatched 197
DBCC Work units Completed 197
DBCC Buffer Quota 255
DBCC Per-Thread Buffer Quota 255
Max Blockmap ID found 200
Max Transaction ID found 404注意 报告可指示泄漏的空间。泄漏的空间是按照数据库空闲列表(内部分配映射)分配的块,但 DBCC 发现它不属于任何数据库对象。