SQL数据库管理—DBCC数据库修复

 

概述

Transact-SQL 编程语言提供 DBCC语句作为 Microsoft SQL Server的数据库控制台命令。这些语句对数据库的物理和逻辑一致性进行检查。许多 DBCC 语句能够对检测到的问题进行修复。

一 基本步骤

1.1数据库简单检测

检测出问题点,在具体修复

 dbcc checkdb (RMS_APP_NLH)

WITH ROLLBACK IMMEDIATE 是做设置单用户总是不成功的时候,加入WITH ROLLBACK IMMEDIATE 选项可以快速回滚事务,变成单用户模式。

 

 

use RMS_APP_NLH

go

alter database RMS_APP_NLHset single_user  WITH ROLLBACK IMMEDIATE;

go

dbcc checktable('R_Traffic_Record',REPAIR_ALLOW_DATA_LOSS)

go

dbcc checktable('R_Traffic_Record',REPAIR_REBUILD)

go

dbcc checktable('S_103_Quarter',REPAIR_ALLOW_DATA_LOSS)

go

dbcc checktable('S_103_Quarter',REPAIR_REBUILD)

alter database RMS_APP_NLHset multi_user

go

 

 

二 出现复杂情况

2.1 DBCC 检测的时候出现

DBCC检测的时候不能定位表或者对象。

SQL数据库管理—DBCC数据库修复

2.2 使用语句定位表

-----------------------游标循环 check table------------------

 

DECLARE NYCURSOR CURSOR

 

--声明游标

FOR

    SELECT  name

    FROM    sys.tables

    WHERE   is_ms_shipped = 0; 

 

 

OPEN NYCURSOR;

 

DECLARE @TAB_NAME VARCHAR(1000);

 

FETCH NEXT FROM NYCURSOR INTO @TAB_NAME;

 

WHILE @@FETCH_STATUS = 0

    BEGIN 

 

        SELECT  @TAB_NAME = 'THIS4.dbo.' + @TAB_NAME;

 

        DBCC CHECKTABLE (@TAB_NAME);

 

--DBCC CHECKTABLE运行

 

        FETCH NEXT FROM NYCURSOR INTO @TAB_NAME;

 

    END;

 

CLOSE NYCURSOR;

 

DEALLOCATE NYCURSOR;

 

2.3 修复表

 

use RMS_APP_NLH

go

alter database RMS_APP_NLHset single_user

go

dbcc checktable('R_Traffic_Record',REPAIR_ALLOW_DATA_LOSS)

go

dbcc checktable('R_Traffic_Record',REPAIR_REBUILD)

go

dbcc checktable('S_103_Quarter',REPAIR_ALLOW_DATA_LOSS)

go

dbcc checktable('S_103_Quarter',REPAIR_REBUILD)

alter database RMS_APP_NLHset multi_user

go

 

 

三 无日志还原数据库

alter database t_branch set emergency

alter database t_branch set single_user

 

dbcc checkdb ('t_branch',repair_allow_data_loss)

dbcc checkdb ('t_branch',repair_rebuild)

 

alter database t_branch set multi_user

相关文章: