看看里面有没有关于磁盘或者IO之类的警告、报错信息

 

错误提醒:

消息 829,级别 21,状态 1,第 1 行
数据库 ID 15,页 (1:21826) 已标记为 RestorePending,可能表明磁盘已损坏。要从此状态恢复,请执行还原操作。

引起原因:

RestorePending日常是在进展页复苏的进度中现身的,正是在开展了restore操作之后但还并未有进展recovery操作之前页的气象。

现身那样的主题材料能够断定那几个表是磨损了,但是在询问数据的时候要是不会询问到损坏页面包车型客车数据话是不会报错的,也正是说能够有法规的运用这些表。

若是破坏的页唯有三个以来,那删除掉那个坏表故障确定就从未了,因为一个页里面只会放二个表的多寡。

破坏的直接原因正是放在磁盘下面的数码被意外的改造了依然写入的时候出错这么些,恐怕是磁盘难题,可是IO系统只怕更加大。

能够好好的自己商量系统日志和SQLServer的LOG,看看里面有未有关于磁盘或然IO之类的警报、报错音信,以越来越鲜明原因。

至于管理办法,假使表首要那就选用备份做页面还原恢复生机数据,不重大的话就删掉重新建立,

仍然使用以下方式实行修复,在处理完坏页之后再对全部数据库做一回DBCC
CHECKDB操作,确定保障未有其余的坏页。

肃清办法:

快速修复
DBCC CHECKDB ('数据库名', REPAIR_FAST) 

重建索引并修复
DBCC CHECKDB ('数据库名', REPAIR_REBUILD)

如果必要允许丢失数据修复
DBCC CHECKDB ('数据库名'', REPAIR_ALLOW_DATA_LOSS)

 


 

谬误提醒:

实行修复命令时,大概会冒出以下错误:

未处理修复语句。数据库需处于单用户模式下解决

消弭办法:

这儿我们供给将数据库设置成单顾客情势:

右键点击数据库 -> 属性 -> 选项 -> 状态 -> 限制访问 -> 选择Single-> 确定。

不当指示:

当我们修复完数据库后,需求将其东山复起为多客商格局,那个时候或者现身

数据库 'xxx' 已打开,并且一次只能有一个用户访问

 消灭办法:

在设置多客商方式的时候或者会因为还会有其余进度的总是引致设置不恐怕开展,所以必要杀掉全部连接的长河。

方式一

USE master;   
GO   
DECLARE @SQL VARCHAR(3000);  
SET @SQL = '';  
SELECT @SQL = @SQL+'; KILL ' + RTRIM(SPID)  
FROM [sys].[sysprocesses] AS sps  
WHERE [sps].[dbid] = DB_ID('test');   
SET @SQL = SUBSTRING(@SQL, 2, LEN(@SQL));  
EXEC(@SQL);  
GO  

方式二

DECLARE @DBName SYSNAME;  
SET @DBName = 'BI_Monitor'; --这个是要删除的数据库库名      

DECLARE @KSQL NVARCHAR(1000)  
DECLARE tb CURSOR LOCAL  
FOR    
SELECT  
    KSQL = 'KILL ' + CAST([sps].[spid] AS NVARCHAR(10))  
FROM [sys].[sysprocesses] AS sps  
WHERE dbid = DB_ID(@DBName)--查询@DBName相关的线程  

--循环杀掉要删除数据的相关线程  
OPEN tb  
FETCH NEXT FROM tb INTO @KSQL  
WHILE @@FETCH_STATUS = 0    
BEGIN    
    EXECUTE(@KSQL);  
    FETCH NEXT FROM tb INTO @KSQL  
END   
CLOSE tb      
DEALLOCATE tb  

终极再将相应数据库设置为多客商格局就能够。

ALTER DATABASE [test] SET MULTI_USER;--设置为多用户模式  

 

相关文章