SQL SERVER 2005 数据库可疑状态修复

今天有个客户的用友U8数据库出现问题,可能是他电脑的问题,偿试了多种办法没有成功,但是最终成功帮助客户将数据恢复了,现在记录一下过程。

1、将SQL SERVER 服务进程关闭重启;

2、打开管理器,打开查询窗口,在【可疑】数据库上点右键点【分离】看一下有没有活动联接;

3、输入以下命令:

SP_CONFIGURE 'ALLOW UPDATES', 1 RECONFIGURE WITH OVERRIDE
GO

ALTER DATABASE [UFDATA_016_2019] SET EMERGENCY
GO

SP_DBOPTION 'UFDATA_016_2019', 'single user', 'true'
GO

DBCC CHECKDB('UFDATA_016_2019','REPAIR_ALLOW_DATA_LOSS')
GO

DBCC CHECKDB('UFDATA_016_2019', 'REPAIR_REBUILD')
GO

SP_CONFIGURE 'ALLOW UPDATES', 0 RECONFIGURE WITH OVERRIDE
GO

SP_DBOPTION 'UFDATA_016_2019', 'single user', 'false'
GO

第一次,修复时在ALTER DATABASE SET SINGLEUSER TRUE中耗费2个小时也没有成功,可能是因为有活动链接的原因。

以上数据库语句部分不适合SQL SERVER 2000数据库,今天修复了一个2000数据库补充如下 :

USE MASTER
GO

SP_CONFIGURE 'ALLOW UPDATES', 1 
GO

RECONFIGURE WITH OVERRIDE 
GO 

SELECT * FROM sysdatabases WHERE name LIKE 'UFDATA_019_%'

--将数据库状态设置为只读/紧急状态
UPDATE sysdatabases SET status=-32768 WHERE name = 'UFDATA_019_2021'

--重建日志文件
DBCC REBUILD_LOG('UFDATA_019_2021', 'D:\UFSMART\Admin\ZT019\2021\UFDATA23.LDF')
DBCC CHECKDB('UFDATA_019_2021')
SP_DBOPTION 'UFDATA_019_2021', 'dbo use only', 'false'

ALTER DATABASE UFDATA_019_2021 SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO

DBCC CHECKDB('UFDATA_019_2021','REPAIR_ALLOW_DATA_LOSS') 
GO 

DBCC CHECKDB('UFDATA_019_2021', 'REPAIR_REBUILD') 
GO 

--将数据库恢复为正常状态
UPDATE sysdatabases SET status=28 WHERE name = 'UFDATA_019_2021'

ALTER DATABASE UFDATA_019_2021 SET MULTI_USER
GO

SP_CONFIGURE 'ALLOW UPDATES', 0 
GO

RECONFIGURE WITH OVERRIDE 
GO