使用 DBCC 修复数据库表

服务器非正常关机后突然出现数据库无法访问,但SSMS里看到数据库能正常挂载,只是一个表读取到某条数据后就发生错误,折腾了半天无果,只能用DBCC修复。

语法:

DBCC CHECKTABLE
(
        table_name | view_name
    [ , { NOINDEX | index_id }
     |, { REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD }
    ]
)
    [ WITH
        { ALL_ERRORMSGS ]
          [ , EXTENDED_LOGICAL_CHECKS ]
          [ , NO_INFOMSGS ]
          [ , TABLOCK ]
          [ , ESTIMATEONLY ]
          [ , { PHYSICAL_ONLY | DATA_PURITY } ]
        }
    ]

参数说明:

REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD
指定 DBCC CHECKTABLE 修复发现的错误。若要使用修复选项,数据库必须处于单用户模式。

REPAIR_ALLOW_DATA_LOSS
尝试修复报告的所有错误。这些修复可能会导致一些数据丢失。

REPAIR_FAST
保留语法只是为了向后兼容。未执行修复操作。

REPAIR_REBUILD
既执行次要且不耗时的修复操作(如修复非聚集索引中的额外关键字),也执行耗时的修复操作(如重新生成索引)。执行这些修复时不会有丢失数据的危险。

注意:

仅将 REPAIR 选项作为最后手段使用。若要修复错误,建议您通过备份进行还原。修复操作不会考虑表本身或表之间可能存在的任何约束。如果指定的表与一个或多个约束有关,建议您在修复操作后运行 DBCC CHECKCONSTRAINTS。如果必须使用 REPAIR,则运行不带有修复选项的 DBCC CHECKDB 来查找要使用的修复级别。如果要使用 REPAIR_ALLOW_DATA_LOSS 级别,建议您在运行带有此选项的 DBCC CHECKDB 之前备份数据库。

示例:

EXEC sp_dboption '数据库名', 'single user', 'TRUE' -- 更改数据库选项,获取独占访问权限,每次只能有一个用户访问数据库。
GO
USE 数据库名
GO
DBCC CHECKTABLE('表名', REPAIR_ALLOW_DATA_LOSS)
GO
EXEC sp_dboption '数据库名', 'single user', 'TRUE'
GO

参考链接:http://msdn.microsoft.com/zh-cn/library/ms174338(SQL.90).aspx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值