MSSql数据库恢复过程记录_mssql还原数据库
MSSql数据库恢复过程记录由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“mssql还原数据库”。
信息平台采用RoseHA8.5 for SQL Server 2008双机热备的存储解决方案,在应用过程中,由于roseHa的切换界面简易,操作简单,适用于但应用层的管理,有时候双机切换会造成数据丢失甚至数据库损坏。
最常见的是Msdb损坏出现如下错误
通过百度、google搜索无法打开数据库 'msdb'。恢复操作已将该数据库标记为 SUSPECT。有关详细信息,请参阅 SQL Server 错误日志。(Microsoft SQL Server,错误: 926)解决方式
第一种:把其他电脑中中的msdb数据库的mdf和ldf文件拷贝到自己的目录中,但是这种方法的缺点是:造成一部分数据丢失,尤其是代理的相关作业丢失。msdb是系统数据库,里面记录调度警报和作业以及操作员的信息,如果没有用到这些内容,直接用备份恢复就可以的。在单用户模式下,停掉SQL server服务,在另一台机装同版本sqlserver,把msdb覆盖过来。第二种:执行下面的SQL命令(在单用户模式修复数据库)USE MASTER
GO
SP_CONFIGURE 'ALLOW UPDATES',1 RECONFIGURE WITH OVERRIDE
GO
UPDATE SYSDATABASES SET STATUS =32768 WHERE NAME='置疑的数据库名' Go
sp_dboption '置疑的数据库名', 'single user', 'true'
Go
DBCC CHECKDB('置疑的数据库名')
Go
update sysdatabases set status =28 where name='置疑的数据库名' Go
sp_configure 'allow updates', 0 reconfigure with override
Go
sp_dboption '置疑的数据库名', 'single user', 'false'
Go
其中置疑的数据库名就是有问题的数据库 操作后:
经过测试只有结合两种方案来解决。
首先是停止生产运行的sql服务,拷贝启动正常的MSdb库到生产环境中替换损坏的库,启动生产环境Sql服务,运行上述T-Sql修复msdb数据库执行命令。
第三步分别执行下面T-sql 此步骤同样能解决装完SQL Server后修改计算机名不能执行代理作业
use master go select @@servername select serverproperty('servername')如果这两个结果不一致,说明机器改过名字
--要修复此问题
--执行下面的语句,完成后重新启动SQL服务
if serverproperty('servername')@@servername begin declare @server sysname set @server = @@servername exec sp_dropserver @server = @server set @server = cast(serverproperty('servername')as sysname)exec sp_addserver @server = @server , @local = 'LOCAL' end 最后重新启动服务
第四步,新建维护计划(备份数据库)测试是否能运行。运行前请检查Sql代理服务是否启动。如果不能运行 执行下面T-sql SELECT [subsystem] ,[subsystem_dll]
FROM[msdb].[dbo].[syubsystems] GO
查看原来是配置里的指定Dll文件路径不对,一般共享存储无D盘,一般是E盘
执行命令替换D:为E: Update [msdb].[dbo].[syubsystems] set subsystem_dll=replac(subsystem_dll,’D:’,’E:’);
如果生产环境数据库实例名跟拷贝的msdb数据库实例名不一致 请执行
Update[msdb].[dbo].[syubsystems]setsubsystem_dll=replace(subsystem_dll,'MSSQLSERVER','XXServer')'MSSQLSERVER'为拷贝msdb的数据库实例名 'XXServer'为生产环境的数据库实例名
重启生产环境Sql服务和代理服务即可。