之前遇到了一个客户现场问题,支持时发现是数据库报错,导致对应的记录删除,修改操作不能成功,搜索了解决办法,测试成功,方法如下:
报错信息:
**/**/**** 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该存储过程。
执行时间较长建议无业务或业务逻辑较少的时间执行该过程。
有时候数据库在占用时,想做一些操作,无法操作。可以尝试将数据库切换为单用户模式来操作。操作完之后再切换回多用户模式。
命令如下:
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 再修改就好了
当遇到数据库报错如'错误: 605,严重性: 21'导致操作失败时,可以通过执行DBCC CHECKDB进行修复。这类错误可能由硬件故障引起,建议在无业务高峰期进行。此外,可通过切换数据库到单用户模式进行特定操作,再切换回多用户模式。具体命令包括使用ALTER DATABASE或SP_DBOPTION切换。
1万+





