USE MASTER
GO
SP_CONFIGURE 'ALLOW UPDATES',1 RECONFIGURE WITH OVERRIDE
GO
UPDATE SYSDATABASES SET STATUS =32768 WHERE NAME='msdb'
Go
sp_dboption 'msdb', 'single user', 'true'
Go
DBCC CHECKDB('msdb')
Go
update sysdatabases set status =28 where name='msdb'
Go
sp_configure 'allow updates', 0 reconfigure with override
Go
sp_dboption 'msdb', 'single user', 'false'
Go
数据库出现置疑、可疑、脱机、单用户、紧急模式主要是因为数据库的日志文件除了问题,2000和2008修复方式不一样,2008的修复脚本在2000中不适用,主要是不被2000识别。
假设数据库名为:eisdoc:
sqlserver2000数据库置疑的处理方式:
1.设置数据库允许直接操作系统表。
此操作可以在SQL Server Enterprise Manager里面选择数据库服务器,按右键,选择“属性”,在“服务器设置”页面中将“允许对系统目录直接修改”一项选中。
2.设置eisdoc为紧急修复模式
update sysdatabases set status=-32768 where dbid=DB_ID('eisdoc') 关闭打开企业管理器,此时可以在SQL Server Enterprise Manager里面看到该数据库处于“只读\置疑\脱机\紧急模式”可以看到数据库里面的表,但是仅仅有系统表
3.重建数据库日志文件
dbcc rebuild_log('eisdoc','E:\Microsoft SQL Server\Data\eisdoc_log.ldf') 执行过程中,如果遇到下列提示信息: 服务器: 消息 5030,级别 16,状态 1,行 1 未能排它地锁定数据库以执行该操作。 DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。 说明您的其他程序正在使用该数据库,如果刚才您在F步骤中使用SQL Server Enterprise Manager打开了eisdoc库的系统表,那么退出SQL Server Enterprise Manager就可以了。(关闭企业管理器,如果别的机器从网络访问数据库,也把网络关闭) 正确执行完成的提示应该类似于: 警告: 数据库 'eisdoc' 的日志已重建。已失去事务的一致性。应运行 DBCC CHECKDB 以验证物理一致性。将必须重置数据库选项,并且可能需要删除多余的日志文件。 DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。 此时打开在SQL Server Enterprise Manager里面会看到数据库的状态为“只供DBO使用”。此时可以访问数据库里面的用户表了。
4.验证数据库一致性(可省略)
dbcc checkdb('iBusinessWork') 一般执行结果如下: CHECKDB 发现了 0 个分配错误和 0 个一致性错误(在数据库 'eisdoc' 中)。 DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
5.设置数据库为正常状态
sp_dboption 'eisdoc','dbo use only','false' 如果没有出错,那么现在就可以正常的使用恢复后的数据库啦。
6.关闭“允许对系统目录直接修改”一项。
因为平时直接操作系统表是一件比较危险的事情。当然,我们可以在SQL Server Enterprise Manager里面恢复。
sqlserver2008数据库可疑文件的修复方式:
1.设置数据库状态,脚本:EXEC sp_resetstatus 'eisdoc'
2.设置数据库为紧急模式,脚本:ALTER DATABASE eisdoc SET EMERGENCY
3.设置数据库为单用户模式(对数据库检查修复只能在单用户模式下),脚本:ALTER DATABASE eisdoc SET SINGLE_USER
4.检查并修复数据库,会提示你修复数据库可能丢失数据,正常应该不会丢失数据库数据,但是数据库日志的完整性将受到破坏,脚本:DBCC CheckDB (eisdoc, REPAIR_ALLOW_DATA_LOSS)
5.恢复数据库为多用户模式,脚本:ALTER DATABASE eisdoc SET MULTI_USER
-- 恢复数据库状态
ALTER
DATABASE
dbName
SET
ONLINE
1、停止数据库服务。
2、将安装路径下服务器下data下的ldf和mdf文件拷贝到其他磁盘
3、启动数据库服务。
4、确认要恢复的数据库文件已经成功复制到另外的位置,然后在SQL Server Management Studio中删除要恢复的数据库。
5、新建同名的数据库(数据库文件名、路径也要相同)。
6、停止数据库服务。
7、用第2步中备份的.mdf和.ldf文件覆盖新数据库的同名文件。
8、启动数据库服务。
9、运行alter database dbname set emergency,将数据库设置为emergency mode
10、运行下面的命令就可以恢复数据库:
declare @databasename varchar(255) -------申明变量@databasename
set @databasename=‘数据库名’ --------你的.mdf文件文件名将你的数据库名这个值赋予变量
exec sp_dboption @databasename, N’single‘, N’true’ ------将目标数据库置为单用户状态使用(执行sp_dboption,参数值为@databasename(刚才赋予的数据库名), N’single‘, N’true’ )
dbcc checkdb(@databasename,REPAIR_ALLOW_DATA_LOSS) ----快速修复数据库
dbcc checkdb(@databasename,REPAIR_REBUILD) ----重建索引并修复
exec sp_dboption @databasename, N’single‘, N’false’—将目标数据库置为多用户状态
11、数据库这时候就回复正常了
作者:敏讷知
链接:https://www.jianshu.com/p/346db76e6dbd
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
发表评论