前天 第三方公司安装sqlserver数据库 把默认数据库 路径改了,造成默认数据库无法启动,阿里云服务器进行了回滚切片的操作。 昨天 同事把sqlserver数据库复制出来然后进行了 阿里云服务器 重新的分区,之后进行了数据库 数据重新导入结果遇到异常。
1,异常提示 无法开启 sqlserver服务
经过查询之后在服务中---点击属性---设置登录账号 ,修改为 本地账号登录后,就可启动数据库服务,猜测原因是由于重新设置了默认windows登录账号后造成的异常
2,数据库 启动后 有数据库 提示 (可疑)
数据库提示 可疑,根据网上的提示进行处理后 修复
https://www.cnblogs.com/hai-ping/articles/3573095.html
1、修改数据库为紧急模式
ALTER DATABASE jd13dafa SET EMERGENCY
2、使数据库变为单用户模式
ALTER DATABASE jd13dafa SET SINGLE_USER
3、修复数据库日志重新生成,此命令检查的分配,结构,逻辑完整性和所有数据库中的对象错误。当您指定“REPAIR_ALLOW_DATA_LOSS”作为DBCC CHECKDB命令参数,该程序将检查和修复报告的错误。但是,这些修复可能会导致一些数据丢失。
DBCC CheckDB (jd13dafa , REPAIR_ALLOW_DATA_LOSS)
4、使数据库变回为多用户模式
ALTER DATABASE jd13dafa SET MULTI_USER
5、开始->运行->输入cmd->打开DOS命令窗口,输入以下命令重启数据库服务(此处可以直接到服务列表里,重新启动数据库服务,为了方便我直接用DOS命令了)
PS:现场 出现问题,在转换为 单用户操作模式后,一直提示 "此数据库处于单用户模式,当前某个用户已与其连接",怀疑是 由于 有系统一直在 连接访问数据库,所以在根据此博客操作前 ,又搜了另一个博客
https://www.cnblogs.com/zqh-/p/7412663.html
USE [master]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--建一个存储过程,断开所有用户连接。
create proc [dbo].[killspid] (@dbname varchar(20))
as
begin
declare @sql nvarchar(500)
declare @spid int
set @sql='declare getspid cursor for
select spid from sysprocesses where dbid=db_id('''+@dbname+''')'
exec (@sql)
open getspid
fetch next from getspid into @spid
while @@fetch_status<>-1
begin
exec('kill '+@spid)
fetch next from getspid into @spid
end
close getspid
deallocate getspid
end
GO
创建存储过程
use master
exec killspid '出问题的数据库名'
之后再每次 执行语句会提示 “此数据库处于单用户模式,当前某个用户已与其连接”的地方 前加这些操作语句有进行关闭占用线程
3,备份库无法进行 修复 "无法使用闩锁类型 SH 读取并闩锁页数据恢复"
猜测可能由于同事进行备份的时候 提示异常,并且没有关闭其他服务造成
之后删除了老的数据库,然后重建一个同名数据库后 进行备份还原操作,然后 再根据2中的顺序进行sqlserver修复 可疑库操作,最后执行完成。提示600+数据异常,但是至少可以将数据库运行起来...
------------------------------------至此问题先告一段落,后续问题后续更新----------------------------------------------------------
来源:oschina
链接:https://my.oschina.net/u/4384777/blog/3695850