checkari与repari_allow_data_loss需要花费很多时间

时间:2013-09-20 21:06:48

标签: sql sql-server database sql-server-2012

我不确定最新情况 但是,
我跑的时候

alter database myDatabase set emergency  
ALTER DATABASE myDatabase SET SINGLE_USER WITH ROLLBACK IMMEDIATE  
dbcc checktable ('myTable', repair_allow_data_loss)  
alter database myDatabase set multi_user    

花了这么多时间 (运行最后30分钟仍在运行)
任何人都可以告诉我,是出了什么问题,或者这是检查表的正常行为。

我正在使用sql server 2012.

感谢。

2 个答案:

答案 0 :(得分:1)

这是正常行为。请检查SQL服务器日志。应该有%完成记录。

请运行它。

SELECT r.session_id,r.command,CONVERT(NUMERIC(6,2),r.percent_complete)
AS [Percent Complete],CONVERT(VARCHAR(20),DATEADD(ms,r.estimated_completion_time,GetDate()),20) AS [ETA Completion Time],
CONVERT(NUMERIC(10,2),r.total_elapsed_time/1000.0/60.0) AS [Elapsed Min],
CONVERT(NUMERIC(10,2),r.estimated_completion_time/1000.0/60.0) AS [ETA Min],
CONVERT(NUMERIC(10,2),r.estimated_completion_time/1000.0/60.0/60.0) AS [ETA Hours],
CONVERT(VARCHAR(1000),(SELECT SUBSTRING(text,r.statement_start_offset/2,
CASE WHEN r.statement_end_offset = -1 THEN 1000 ELSE (r.statement_end_offset-r.statement_start_offset)/2 END)
FROM sys.dm_exec_sql_text(sql_handle)))
FROM sys.dm_exec_requests r WHERE command = ('DBCC TABLE CHECK')

此时你可以查看它在做什么。请输入DBCC语句的session_id。

SELECT session_id,command,(SELECT text
FROM sys.dm_exec_sql_text(sql_handle))
FROM sys.dm_exec_requests 
WHERE session_id = 

答案 1 :(得分:0)

使用 DBCC CHECKDB 选项运行 REPAIR_ALLOW_DATA_LOSS 尝试修复所有数据库一致性错误。但是,数据库对象的完整性并没有得到保证,因为一旦执行命令,某些数据可能会受到损害或发现丢失。

尽管 REPAIR_ALLOW_DATA_LOSS 受到高度支持,但它并不总是被认为是使数据库达到一致状态的最佳选择。如果命令成功,可能会导致数据丢失。

如果 DBCC CHECKDB REPAIR_ALLOW_DATA_LOSS 不起作用或导致数据丢失,使用 Stellar Repair for MS SQL