MSSQL 怎么修复 表 发布时间: 2012-01-08 22:48:50 作者: rapoo
MSSQL 如何修复 表 表坏了,不知道哪里坏了。 怎么确认表是否坏了,以及怎么修复?? 急待解决中。[解决办法]
SQL codeUSE MASTERGOsp_dboption '数据库名', 'single user', 'true' GoDBCC CHECKDB('数据库名', REPAIR_ALLOW_DATA_LOSS) GoUSE 数据库名goexec sp_msforeachtable 'DBCC CHECKTABLE("表名",REPAIR_ALLOW_DATA_LOSS)' exec sp_msforeachtable 'DBCC DBREINDEX("表名")' gosp_dboption '数据库名', 'single user', 'false' Go[解决办法] 怎么确认表是否坏了 ----- 那你怎么知道表坏了?[解决办法] DBCC CHECKTABLE 检查指定表或索引视图的数据、索引及 text、ntext 和 image 页的完整性。 语法 DBCC CHECKTABLE ( 'table_name' | 'view_name' [ , NOINDEX | index_id | { REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD } ] ) [ WITH { [ ALL_ERRORMSGS | NO_INFOMSGS ] [ , [ TABLOCK ] ] [ , [ ESTIMATEONLY ] ] [ , [ PHYSICAL_ONLY ] ] } ] 参数 'table_name' | 'view_name' 是要对其数据页完整性进行检查的表或索引视图。表名和视图名必须符合标识符的规则。有关更多信息,请参见使用标识符。 NOINDEX 指定不检查非系统表的非聚集索引。 REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD 指定 DBCC CHECKTABLE 修复发现的错误。数据库必须在单用户模式下以使用修复选项,可以是下列值之一。 值 描述 REPAIR_ALLOW_DATA_LOSS 执行由 REPAIR_REBUILD 完成的所有修复,包括对行和页进行分配和取消分配以改正分配错误、结构行或页的错误,以及删除已损坏的文本对象。这些修复可能会导致一些数据丢失。修复操作可以在用户事务下完成以允许用户回滚所做的更改。如果回滚修复,则数据库仍会含有错误,应该从备份进行恢复。如果由于所提供修复等级的缘故遗漏某个错误的修复,则将遗漏任何取决于该修复的修复。修复完成后,备份数据库。 REPAIR_FAST 进行小的、不耗时的修复操作,如修复非聚集索引中的附加键。这些修复可以很快完成,并且不会有丢失数据的危险。 REPAIR_REBUILD 执行由 REPAIR_FAST 完成的所有修复,包括需要较长时间的修复(如重建索引)。执行这些修复时不会有丢失数据的危险。 index_id 是要对其数据页完整性进行检查的索引标识 (ID) 号。如果指定 index_id,DBCC CHECKTABLE 只会对该索引进行检查。 WITH 指定有关下列内容的选项:返回错误信息的数量、获得的锁或估计的 tempdb 要求。如果 ALL_ERRORMSGS 和 NO_INFOMSGS 都未指定,则 Microsoft® SQL Server? 将返回全部错误信息。 ALL_ERRORMSGS 显示所有错误信息。如果未指定,SQL Server 就按每个表最多 200 条错误信息进行显示。错误信息按对象 ID 进行排序。 NO_INFOMSGS 禁止显示所有信息性消息和关于所用空间的报告。 TABLOCK 导致 DBCC CHECKTABLE 获得共享表锁。 ESTIMATE ONLY 显示估计的 tempdb 空间大小,要运行带有所有其它指定选项的 DBCC CHECKTABLE 则需要该空间。 PHYSICAL_ONLY 仅限于检查页和记录标题物理结构的完整性,以及页对象 ID 和索引 ID 与分配结构之间的一致性。该检查旨在以较低的开销检查数据库的物理一致性,同时还检测会危及用户数据安全的残缺页和常见的硬件故障。PHYSICAL_ONLY 始终意味着 NO_INFOMSGS,并且不能与任何修复选项一起使用。 注释 DBCC CHECKTABLE 对表和索引视图执行物理一致性检查。只用于向后兼容性的 NOINDEX 选项也适用于索引视图。 对于指定的表,DBCC CHECKTABLE 检查其: 索引和数据页是否已正确链接。 索引是否按照正确的顺序排列。 各指针是否一致。 每页上的数据是否均合理。 页面偏移量是否合理。 DBCC CHECKTABLE 对指定表的 text、ntext 和 image 页的链接及大小进行检查。然而,DBCC CHECKTABLE 不验证数据库中所有分配结构的一致性。使用 DBCC CHECKALLOC 进行此验证。 默认情况下,DBCC CHECKTABLE 不获取表锁。但它获取架构锁,该锁阻止对元数据进行更改,但允许更改数据。DBCC 语句收集信息,然后扫描任何日志以查找其它所做的任何更改,在扫描的结尾将两组信息合并在一起以产生数据的一致视图。 如果指定 TABLOCK 选项,DBCC CHECKTABLE 获取共享表锁。这样可允许某些类别的错误有更详细的错误信息,并通过避免使用事务日志数据而将所要求的 tempdb 空间大小降为最低。 若要对数据库中每个表执行 DBCC CHECKTABLE,请使用 DBCC CHECKDB。 默认情况下,DBCC CHECKTABLE 对对象执行并行检查。并行度由查询处理器自动确定。最大并行度的配置方式与并行查询相同。使用 sp_configure 系统存储过程限制可用于 DBCC 检查的最大处理器数。有关更多信息,请参见 max degree of parallelism 选项。 使用跟踪标记 2528 可禁用并行检查。有关更多信息,请参见跟踪标记。 结果集 DBCC CHECKTABLE 返回以下结果集(如果只指定表名或如果提供任意选项,都返回与之相同的结果集);下例指定 pubs 数据库中的 authors 表(值可能会有变化): DBCC results for 'authors'. There are 23 rows in 1 pages for object 'authors'. DBCC execution completed. If DBCC printed error messages, contact your system administrator. 如果指定 ESTIMATEONLY 选项,DBCC CHECKTABLE 将返回以下结果集。 Estimated TEMPDB space needed for CHECKTABLES (KB) -------------------------------------------------- 2 (1 row(s) affected) DBCC execution completed. If DBCC printed error messages, contact your system administrator. 权限 DBCC CHECKTABLE 权限默认授予 sysadmin 固定服务器角色、db_owner 固定数据库角色的成员或表的所有者且不可转让。 示例 A. 检查特定表 下例检查 authors 表的数据页完整性。 DBCC CHECKTABLE ('authors') GO B. 检查表,但不检查非聚集索引 下例对 authors 表的数据页完整性进行检查,但不检查非聚集索引。 DBCC CHECKTABLE ('authors') WITH PHYSICAL_ONLY GO C. 检查特定索引 下例对通过访问 sysindexes 获得的特定索引进行检查。 USE pubs DECLARE @indid int SELECT @indid = indid FROM sysindexes WHERE id = OBJECT_ID('authors') AND name = 'aunmind' DBCC CHECKTABLE ('authors', @indid)[解决办法]
探讨 怎么确认表是否坏了 ----- 那你怎么知道表坏了?[解决办法] 探讨 DBCC CHECKTABLE 检查指定表或索引视图的数据、索引及 text、ntext 和 image 页的完整性。 语法 DBCC CHECKTABLE     ( 'table_name' | 'view_name'         [ , NOINDEX             | index_id             | { REPAIR_ALLOW_DATA_LOSS                 | REPAIR_FAST                 | REPAIR_REBUILD }         ]     )    [ WITH { [ ALL_ERRORMSGS | NO_INFOMSGS ]                     [ , [ TABLOCK ] ]                     [ , [ ESTIMATEONLY ] ]                     [ , [ PHYSICAL_ONLY ] ]                 }         ] 参数 'table_name' | 'view_name' 是要对其数据页完整性进行检查的表或索引视图。表名和视图名必须符合标识符的规则。有关更多信息,请参见使用标识符。 NOINDEX 指定不检查非系统表的非聚集索引。 REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD 指定 DBCC CHECKTABLE 修复发现的错误。数据库必须在单用户模式下以使用修复选项,可以是下列值之一。 值 描述 REPAIR_ALLOW_DATA_LOSS 执行由 REPAIR_REBUILD 完成的所有修复,包括对行和页进行分配和取消分配以改正分配错误、结构行或页的错误,以及删除已损坏的文本对象。这些修复可能会导致一些数据丢失。修复操作可以在用户事务下完成以允许用户回滚所做的更改。如果回滚修复,则数据库仍会含有错误,应该从备份进行恢复。如果由于所提供修复等级的缘故遗漏某个错误的修复,则将遗漏任何取决于该修复的修复。修复完成后,备份数据库。 REPAIR_FAST 进行小的、不耗时的修复操作,如修复非聚集索引中的附加键。这些修复可以很快完成,并且不会有丢失数据的危险。 REPAIR_REBUILD 执行由 REPAIR_FAST 完成的所有修复,包括需要较长时间的修复(如重建索引)。执行这些修复时不会有丢失数据的危险。 index_id 是要对其数据页完整性进行检查的索引标识 (ID) 号。如果指定 index_id,DBCC CHECKTABLE 只会对该索引进行检查。 WITH 指定有关下列内容的选项:返回错误信息的数量、获得的锁或估计的 tempdb 要求。如果 ALL_ERRORMSGS 和 NO_INFOMSGS 都未指定,则 Microsoft® SQL Server? 将返回全部错误信息。 ALL_ERRORMSGS 显示所有错误信息。如果未指定,SQL Server 就按每个表最多 200 条错误信息进行显示。错误信息按对象 ID 进行排序。 NO_INFOMSGS 禁止显示所有信息性消息和关于所用空间的报告。 TABLOCK 导致 DBCC CHECKTABLE 获得共享表锁。 ESTIMATE ONLY 显示估计的 tempdb 空间大小,要运行带有所有其它指定选项的 DBCC CHECKTABLE 则需要该空间。 PHYSICAL_ONLY 仅限于检查页和记录标题物理结构的完整性,以及页对象 ID 和索引 ID 与分配结构之间的一致性。该检查旨在以较低的开销检查数据库的物理一致性,同时还检测会危及用户数据安全的残缺页和常见的硬件故障。PHYSICAL_ONLY 始终意味着 NO_INFOMSGS,并且不能与任何修复选项一起使用。 注释 DBCC CHECKTABLE 对表和索引视图执行物理一致性检查。只用于向后兼容性的 NOINDEX 选项也适用于索引视图。 对于指定的表,DBCC CHECKTABLE 检查其: 索引和数据页是否已正确链接。 索引是否按照正确的顺序排列。 各指针是否一致。 每页上的数据是否均合理。 页面偏移量是否合理。 DBCC CHECKTABLE 对指定表的 text、ntext 和 image 页的链接及大小进行检查。然而,DBCC CHECKTABLE 不验证数据库中所有分配结构的一致性。使用 DBCC CHECKALLOC 进行此验证。 默认情况下,DBCC CHECKTABLE 不获取表锁。但它获取架构锁,该锁阻止对元数据进行更改,但允许更改数据。DBCC 语句收集信息,然后扫描任何日志以查找其它所做的任何更改,在扫描的结尾将两组信息合并在一起以产生数据的一致视图。 如果指定 TABLOCK 选项,DBCC CHECKTABLE 获取共享表锁。这样可允许某些类别的错误有更详细的错误信息,并通过避免使用事务日志数据而将所要求的 tempdb 空间大小降为最低。 若要对数据库中每个表执行 DBCC CHECKTABLE,请使用 DBCC CHECKDB。 默认情况下,DBCC CHECKTABLE 对对象执行并行检查。并行度由查询处理器自动确定。最大并行度的配置方式与并行查询相同。使用 sp_configure 系统存储过程限制可用于 DBCC 检查的最大处理器数。有关更多信息,请参见 max degree of parallelism 选项。 使用跟踪标记 2528 可禁用并行检查。有关更多信息,请参见跟踪标记。 结果集 DBCC CHECKTABLE 返回以下结果集(如果只指定表名或如果提供任意选项,都返回与之相同的结果集);下例指定 pubs 数据库中的 authors 表(值可能会有变化): DBCC results for 'authors'. There are 23 rows in 1 pages for object 'authors'. DBCC execution completed. If DBCC printed error messages, contact your system administrator. 如果指定 ESTIMATEONLY 选项,DBCC CHECKTABLE 将返回以下结果集。 Estimated TEMPDB space needed for CHECKTABLES (KB) -------------------------------------------------- 2 (1 row(s) affected) DBCC execution completed. If DBCC printed error messages, contact your system administrator. 权限 DBCC CHECKTABLE 权限默认授予 sysadmin 固定服务器角色、db_owner 固定数据库角色的成员或表的所有者且不可转让。 示例 A. 检查特定表 下例检查 authors 表的数据页完整性。 DBCC CHECKTABLE ('authors') GO B. 检查表,但不检查非聚集索引 下例对 authors 表的数据页完整性进行检查,但不检查非聚集索引。 DBCC CHECKTABLE ('authors') WITH PHYSICAL_ONLY GO C. 检查特定索引 下例对通过访问 sysindexes 获得的特定索引进行检查。 USE pubs DECLARE @indid int SELECT @indid = indid FROM sysindexes WHERE id = OBJECT_ID('authors') AND name = 'aunmind' DBCC CHECKTABLE ('authors', @indid)