SqlServer数据库修复(dbcc checkdb)

之前遇到了一个客户现场问题,支持时发现是数据库报错,导致对应的记录删除,修改操作不能成功,搜索了解决办法,测试成功,方法如下:

报错信息:

**/**/**** 14:17:25,spid59,未知,Attempt tofetch logical page (3:509) in database 11 failed. It belongs to allocation unit72057594611695616 not to 72057594041991168.

**/**/**** 14:17:25,spid59,未知,错误: 605,严重性: 21,状态: 3。

数据库损坏错误。

严重级别为 21 表示可能存在数据损坏。 可能的原因包括损坏的页链、损坏的 IAM 或该对象的 sys.objects目录视图中存在无效条目。 这些错误通常由硬件或磁盘设备驱动程序故障而引起。

--修复方案:
--执行如下过程:
use master
declare @databasename varchar(255)  
set @databasename='****_db'
alter database ****_db set Single_user  --单用户
--exec sp_dboption @databasename, N'single', N'true'  --将目标数据库置为单用户状态  sql08
dbcc checkdb(@databasename,REPAIR_ALLOW_DATA_LOSS)  
dbcc checkdb(@databasename,REPAIR_REBUILD)  
alter database ****_db set multi_user   --多用户
-- exec sp_dboption @databasename, N'single', N'false'  --将目标数据库置为多用户状态 sql08,12版不存在sp_dboption该存储过程。

执行时间较长建议无业务或业务逻辑较少的时间执行该过程。

SQLSERVER 切换数据库为单用户和多用户模式

有时候数据库在占用时,想做一些操作,无法操作。可以尝试将数据库切换为单用户模式来操作。操作完之后再切换回多用户模式。

命令如下:

alter database 数据库名 set Single_user  --单用户
alter database
数据库名 set multi_user   --多用户

或者

sp_dboption 数据库名,"single user",true  --单用户

sp_dboption 数据库名,"single user",false  --多用户

如果使用 ALTER DATABAS 或者是使用 SP_DBOPTION 都没有办法更改到多用户或者单用户模式下
解决办法是
在活动和监视器中的进程,把与目的库有关的 KILL 掉,然后刷新一下。
使用
ALTER DATABASE DB_TYZ
再修改就好了





你可能感兴趣的:(数据库)