Sybase ASE12.5dbcc
数据库一致性检查程序 (dbcc) 检查数据库的逻辑和物理一致性,并提供
统计信息、计划和修复功能。
语法
dbcc addtempdb( dbid |databbase_name )
dbcc checkalloc [(database_name [,fix | nofix])]
dbcc checkcatalog [(database_name)]
dbcc checkdb [(database_name [,skip_ncindex])]
dbcc checkstorage [(database_name)]
dbcc checktable({table_name |table_id}[, skip_ncindex])
dbcc checkverify [(database_name)]
dbcc complete_xact (xid,{"commit" | "rollback"})
dbcc forget_xact (xid)
dbcc dbrepair (database_name,dropdb)
dbcc engine( {offline , [enginenum]| "online" })
dbcc fix_text ({table_name |table_id})
dbcc indexalloc ({table_name |table_id}, index_id[, {full | optimized | fast | null}[, fix | nofix]])
dbcc pravailabletempdbs
dbcc rebuild_text (table [, column[,text_page_number]])
dbcc reindex ({table_name |table_id})
dbcc tablealloc ({table_name |table_id}[, {full | optimized | fast | null}[, fix | nofix]])
dbcc { traceon | traceoff } (flag [,flag ... ])
dbcc tune ( { ascinserts, {0 | 1 } ,tablename |cleanup, {0 | 1 } |cpuaffinity, start_cpu {, on| off }|des_greedyalloc, dbid, object_name," { on | off }" |deviocharvdevno,"batch_size" |doneinproc { 0 | 1 }})
addtempdb
将一个临时数据库添加到可用临时数据库的全局列表。如果数据库不
存在或不是临时数据库,则会产生错误。如果数据库已经是列表的成
员,则会显示信息性消息。
dbid
是数据库 ID。
database_name
是要检查的数据库名。如果不提供数据库名,则 dbcc 使用当前数
据库。
checkalloc
检查指定数据库,来确定正确分配了所有页,且使用了所有分配
的页。
如果不提供数据库名,则 checkalloc 检查当前数据库。它通常使用
optimized 报告选项(请参见 tablealloc)。
checkalloc 报告分配和使用的空间量。
fix | nofix
确定 dbcc 是否修正发现的分配错误。checkalloc 的缺省模式是 nofix。
必须将数据库设置为单用户模式才能使用 fix 选项。
有关 Adaptive Server 中页分配的讨论,请参见系统管理指南。
checkcatalog
在系统表中和系统表之间检查一致性。例如, checkcatalog 确认
syscolumns 中的每一个类型在 systypes 中都有一个匹配的条目,
sysobjects 中的每个表和视图在 syscolumns 中都至少有一列,且
syslogs 中的最后一个检查点是有效的。checkcatalog 还报告所有定义
的段。如果不提供数据库名,则 checkcatalog 检查当前数据库。
checkdb
运行与 checktable 相同的检查,但是检查指定数据库中的每个表,包
括 syslogs。如果不提供数据库名,则 checkdb 检查当前数据库。
skip_ncindex
导致 dbcc checktable 或 dbcc checkdb 跳过对用户表上非聚簇索引的检
查。缺省情况下是检查所有索引。
checkstorage
检查指定数据库的分配、OAM 页条目、页一致性、文本值列、文本值
列的分配以及文本列链。每个 dbcc checkstorage 操作的结果都存储在
dbccdb 数据库中。有关使用 dbcc checkstorage 的详细信息,以及有关从
dbccdb 创建、维护和生成报告的详细信息,请参见系统管理指南。
checktable
检查指定的表,来查看索引和数据页是否正确链接,索引的排序顺序
是否正确,所有指针是否一致,每页上的数据信息是否合理,以及页
偏移是否合理。如果日志段在其自己的设备上,那么在 syslogs 表上
运行 dbcc checktable 来报告已用的日志和可用空间。例如:
Checking syslogs
The total number of data pages in this table is 1.
*** NOTICE: Space used on the log segment is 0.20 Mbytes, 0.13%.
*** NOTICE: Space free on the log segment is 153.4 Mbytes, 99.87%.
DBCC execution completed. If dbcc printed error messages, see your System
Administrator.
如果日志段不在自己的设备上,就会显示以下消息:
*** NOTICE: Notification of logspace used/free cannot be reported because the
log segment is not on its own device.
table_name | table_id
是要检查的表的名称或对象 ID。
checkverify
检验针对指定的数据库最后一次运行 dbcc checkstorage 的结果。有关
使用 dbcc checkverify 的详细信息,请参见系统管理指南。
complete_xact
通过提交或回退其工作尝试完成一个事务。Adaptive Server 保留
master.dbo.systransactions 表中关于所有尝试完成的事务的信息,因此
外部事务协调器能够知道事务是如何完成的。
警告!尝试完成处于就绪状态的事务时,可能会在整个分布式事务中造
成不一致的结果。系统管理员尝试提交或回退事务的决定可能会与协调
Adaptive Server 或协议的决定相矛盾。
forget_xact
删除来自 master.dbo.systransactions 的尝试完成事务的提交状态。
forget_xact 可以在系统管理员不希望协调服务以知道正尝试完成事务
时,或者是当外部协调器不可用于清除 systransactions 中的提交状态
时使用。
警告!切勿在常规 DTP 环境中使用 dbcc forget_xact,因为应该允许外部
事务协调器检测尝试完成的事务。X/Open XA 兼容的事务管理器和
Adaptive Server 事务协调服务可自动清除 systransactions 中的提交状态。
xid
是 systransactions.xactname 列中的事务名称。也可以用 sp_transactions
确定有效的 xid 值。
dbrepair (database_name, dropdb)
删除损坏的数据库。不能对损坏的数据库执行 drop database。
发出此 dbcc 语句时用户(包括发出此语句的用户)不能使用正在删
除的数据库。
fengine
将 Adaptive Server 引擎脱机或联机。如果未指定 enginenum,则 dbcc
engine (offline) 会将编号最高的引擎脱机。有关详细信息,请参见系统
管理指南 的第 8 章“管理多处理器服务器”。
fix_text
当 Adaptive Server 的字符集从任意字符集更改为新的多字节字符集后
应升级 text 值。
更改为多字节字符集会使 text 数据的管理更为复杂。由于 text 值可以
大到占据多页,所以 Adaptive Server 必须能够处理跨越页边界的字
符。为此,服务器需要有关每个 text 页的其它信息。系统管理员或表
的所有者必须在每个包含 text 数据的表上运行 dbcc fix_text,来计算所
需的新值。有关详细信息,请参见系统管理指南。
indexalloc
检查指定索引,来确定正确分配了所有页,且使用了所有分配的页。
这是 checkalloc 的较小版本,可对单个索引进行相同的完整性检查。
indexalloc 产生与 tablealloc 相同的三种报告类型:full、optimized 和 fast。
如果未指定任何类型或者使用 null,Adaptive Server 将使用 optimized。
fix | nofix 选项也可用于 indexalloc,就像用于 tablealloc 一样。
注释 只有包括报告的类型值(full、optimized、fast 或 null)时才可以指
定 fix 或 nofix。
table_name | table_id, index_id
是表名或表的对象 ID (sysobjects 的 id 列)加上来自 sysindexes 的索
引的 indid。
full
报告所有类型的分配错误。
optimized
根据索引的对象分配映射 (OAM) 中列出的分配页生成报告。它不报
告也无法修正 OAM 页中未列出的分配页中的未引用扩充。optimized
选项是缺省选项。
fast
不生成分配报告,但对已引用而未在扩充中分配的页生成例外报告
(2521 级别错误)。
pravailabletempdbs
显示可用临时数据库的全局列表。
fix | nofix
确定 indexalloc 是否修正表中发现的错误。对除系统表中的索引外的
所有索引来说缺省值是 fix,系统表中的索引的缺省值是 nofix。若要将
fix 选项和系统表一起使用,必须先将数据库设置为单用户模式。
只有包括报告的类型值(full、optimized、fast 或 null)时才可以指定
fix 或 nofix。
rebuild_text
为 text 或 image 数据重建或创建内部 Adaptive Server 12.x 数据结构。
此数据结构在数据查询期间启用 Adaptive Server 来进行随机访问或同
步预取。
reindex
通过运行 dbcc checktable 的快速版本,检查用户表索引的完整性。它
可以和表名或表的对象 ID (来自 sysobjects 的 id 列)一起使用。
reindex 发现第一个与索引相关的错误时会显示消息,然后删除并重新
创建可疑索引。当 Adaptive Server 的排序顺序已经更改,且索引由
Adaptive Server 标上了“可疑”的标签时,系统管理员或表的所有者
必须运行 dbcc reindex。
当 dbcc 发现损坏的索引时,它会删除并重新创建相应的索引。如果
表的索引已经是正确的,或者如果表没有索引,dbcc reindex 不重建索
引,而是输出信息性消息。
如果怀疑表包含损坏的数据,则 dbcc reindex 会中止。发生这种情况时,
错误消息会指示用户运行 dbcc checktable。dbcc reindex 不允许重新索引
系统表。如果有必要,在排序顺序更改后重新启动 Adaptive Server,然
后作为恢复操作的一个自动执行的部分检查并重建系统索引。
tablealloc
检查指定表,来确定正确分配了所有页,且使用了所有分配的页。这
是 checkalloc 的较小版本,可对单个表进行相同的完整性检查。它可
以和表名或表的对象 ID (来自 sysobjects 的 id 列)一起使用。有关
tablealloc 输出的示例,请参见系统管理指南。
由 tablealloc 可生成三种报告类型:full、optimized 和 fast。如果未指定
任何类型或者使用 null, Adaptive Server 将使用 optimized。
full
等同于表级 checkalloc,它报告所有类型的分配错误。
optimized
根据表的对象分配映射 (OAM) 页中列出的分配页生成报告。它不报
告也无法修正 OAM 页中未列出的分配页中的未引用扩充。optimized
选项是缺省选项。
fast
不生成分配报告,但对已引用而未在扩充中分配的页生成例外报告
(2521 级别错误)。
fix | nofix
确定 tablealloc 是否修正表中发现的错误。除系统表外的所有表的缺省
值是 fix,系统表的缺省值是 nofix。若要将 fix 选项和系统表一起使用,
必须先将数据库设置为单用户模式。
只有包括报告的类型值(full、optimized、fast 或 null)时才可以指定
fix 或 nofix。
traceon | traceoff
在查询优化期间(flag 值为 302、310 和 317)切换诊断显示。值 3604
和 3605 分别切换对用户会话和错误的日志发送跟踪输出。有关详细信
息,请参见性能和调优指南 中的第 37 章“用 dbcc traceon 调优”。
tune
启用或禁用在特殊性能情况下使用的调优标志。有关各选项的详细信
息,请参见性能和调优指南。
示例 1
检查 pubs2 查找页分配错误:
dbcc checkalloc(pubs2)
示例 2
检查 pubs2 的数据库一致性并将信息放入 dbccdb 数据库:
dbcc checkstorage(pubs2)
示例 3
检查 salesdetail 表:
dbcc checktable(salesdetail)
Checking salesdetail
The total number of pages in partition 1 is 3.
The total number of pages in partition 2 is 1.
The total number of pages in partition 3 is 1.
The total number of pages in partition 4 is 1.
The total number of data pages in this table is 10.
Table has 116 data rows.
DBCC execution completed. If DBCC printed error
messages, contact a user with System Administrator (SA)
role.
示例 4
尝试中止事务“distributedxact1”:
dbcc complete_xact (distributedxact1, "rollback")
示例 5
更改字符集后升级 blurbs 的文本值:
dbcc fix_text(blurbs)
示例 6
从 master.dbo.systransactions 中删除事务“distributedxact1”的信息:
dbcc forget_xact (distributedxact1)
示例 7
Adaptive Server 返回有关索引(其 titleauthor 表上的 indid 值为 2)
的分配的完整报告,并修正所有分配错误:
dbcc indexalloc ("pubs..titleauthor", 2, full)
示例 8
显示可用临时数据库的全局列表:
dbcc pravailabletempdbs
Available temporary databases are:
Dbid: 2
Dbid: 4
Dbid: 5
Dbid: 6
Dbid: 7
DBCC execution completed. If DBCC printed error
messages, contact a user with System Administrator (SA)
role.
示例 9
为 blurbs 表的所有 text 和 image 列重建或创建内部 Adaptive Server
12.x 数据结构:
dbcc rebuild_text (blurbs)
示例 10
dbcc reindex 在 titles 表中发现了一个或多个损坏的索引:
dbcc reindex(titles)
One or more indexes are corrupt. They will be rebuilt.
示例 11
Adaptive Server 为此表返回分配的 optimized 报告,但不修复任
何分配错误:
dbcc tablealloc(publishers, null, nofix)
数据库活动时,除 dbrepair (database_name 和 dropdb)选项和带 fix
选项的 dbcc checkalloc 之外,可以运行数据库一致性检查程序 dbcc。
· dbcc 在检查数据库对象时会锁定它们。有关使用 dbcc 时的最小化性
能问题的信息,请参见系统管理指南 中的 dbcc 讨论。
· 若要用用户名或数据库名限定表或索引的名称,请将限定的名称用
单引号或双引号引起来。例如:
dbcc tablealloc("pubs2.pogo.testtable")
· dbcc reindex 不能在用户定义的事务中运行。
· dbcc fix_text 可以生成大量的日志记录,这些记录可能会填满事务日
志。dbcc fix_text 设计为在一系列小事务中进行更新:日志空间失败
时只会丢失少量工作。如果日志空间已用完,则清除日志并使用初
始 dbcc fix_text 失败时升级的同一个表重新启动 dbcc fix_text。
· 如果试图在更改为多字节字符集后在 text 值上使用 select、readtext
或 writetext,且没有运行 dbcc fix_text,则命令会失败,并会有一个
错误消息指示您在表上运行 dbcc fix_text。但是,更改了字符集之
后,即使不运行 dbcc fix_text,您也可以删除 text 行。
· dbcc 输出是作为消息或错误而不是作为结果行发送的。客户端程序
和脚本应该检查相关的错误处理程序。
· 如果表是分区的, dbcc checktable 返回有关每个分区的信息。
· 升级到 Adaptive Server 版本 12.x 的 text 和 image 数据并不 自动升级
到新的存储格式。若要改进查询性能并启用这些数据的预取,请对
升级的 text 和 image 列使用 rebuild_text 关键字。
符合 ANSI SQL 的级别:Transact-SQL 扩展。
只有表所有者可以用 checktable、fix_text、rebuild_text 或 reindex 关键字来
执行 dbcc。
只有数据库所有者可以使用 checkstorage、checkdb、checkcatalog、
checkalloc、indexalloc、 和 tablealloc 关键字。
只有系统管理员可以使用 dbrepair、complete_xact 和 forget_xact 关键字。
只有系统管理员可以使用 dbcc traceon 和 dbcc traceoff 命令。
只有系统管理员可以使用 dbcc engine。