修改日期 | 修改人 | 备注 |
2020-11-29 17:05:32[当前版本] | 吴翔宇 | 其他原因... |
2020-11-29 17:02:15 | 吴翔宇 | 20201129 |
数据库置疑修复方法(适用所有软件)
先停止数据库,复制备份LDF和MDF文件并删除数据库目录下LDF文件,然后依次执行下方七条语句
--1.设置数据库为可更新状态
use master
go
sp_configure 'allow updates',1
go
reconfigure with override
go
--2.将数据库模式改为紧急
ALTER DATABASE 数据库名称 SET EMERGENCY --注意空格分隔
--3.更改数据库单用户使用模式
alter database 数据库名称 set Single_user --单用户(若执行失败,看下方附录1,手动改单用户)
--4.重建日志文件
dbcc checkdb('数据库名称',REPAIR_ALLOW_DATA_LOSS)
--(若执行失败,提示“数据库XXX已打开,并且一次只能有一个用户访问”执行下方附录2语句)
--5.修复数据库状态 (如果有报错就多查几遍)
DBCC CHECKDB('数据库名称')
DBCC CHECKDB ('数据库名称','repair_rebuild')
DBCC CHECKDB ('数据库名称','repair_allow_data_loss')
Go
--6.取消单用户使用模式
sp_dboption '数据库名称','single user','false'
go
--7.改变数据库可更新状态
sp_configure 'allow updates', 0
reconfigure with override
Go
————————————————————————
附录1
右键相应的数据库——属性——选项——限制访问改为SINGLE_USER,即为单用户模式
附录2
DECLARE @DBName SYSNAME;
SET @DBName = '数据库名称'; --这个是要删除的数据库库名
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