服务器断电,导致数据库出现置疑,那个朋友碰到过
根据网上朋友提供的,操作如下:
1、备份原数据库文件
2、创建一个和原来 DB 名字一样的数据库
3、停止数据库服务
4、把备份的数据库文件复制并覆盖新创建的物理文件
5、启动数据库服务
6、然后运行下面的SQL:
USE MASTER
GO
SP_CONFIGURE 'ALLOW UpdateS ',1 RECONFIGURE WITH OVERRIDE
GO
Update SYSDATABASES SET STATUS =32768 Where NAME= 'JlJLERP '
Go
sp_dboption 'JlJLERP ', 'single user ', 'true '
Go
DBCC CHECKDB( 'JlJLERP ')
Go
update sysdatabases set status =28 where name= 'JlJLERP '
Go
sp_configure 'allow updat es ', 0 reconfigure with override
Go
sp_dboption 'JlJLERP ', 'single user ', 'true '
Go
7、出现错误
------解决方案-------------------- 企业管理器--右键suspect的数据库--所有任务--分离数据库
然后备份你的suspect数据库的文件,再按下面的步骤处理:
1.新建一个同名的数据库
2.再停掉sql server
3.用suspect数据库的文件覆盖掉这个新建的同名数据库
4.再重启sql server
5.此时打开企业管理器时新建的同名数据库会出现置疑,先不管,执行下面的语句(注意修改其中的数据库名)
6.完成后一般就可以访问数据库中的数据了,这时,数据库本身一般还有问题,解决办法是,利用数据库的脚本创建一个新的数据库,并将数据导进去就行了。
如果这样改不加数据库状态,你就把数据库导成一个新库来代替旧库吧:
企业管理器--右键你的数据库--所有任务--导出数据
--目标标数据库选择新建
--选择 "在两个sql数据库之间复制对象和数据 "
--把 "包含扩展属性 "选上,其他的根据需要选择
--最后完成
------解决方案--------------------EXEC sp_resetstatus 'suspect '
然后,停止并重新启动 SQL Server。
不过建议先将日志贴上来,看看日志里数据库报错的原因是什么,这样对症下药就可以药到病除.
------解决方案--------------------不好说,按理说mssql没有这么弱,断一次电就全完了.但是断电确实是致命的.
------解决方案--------------------这种问题见得多了,我想楼主已经把这个数据库置为可操作的单人模式了,只有将这个数据库的数据转移到其它数据库了。
以下代码,可以得到将A库存数据转移到B库存的全部代码,不知对你有没有用,共享给你吧,这种活我也做了不少了,我们的数据库还有时间戳的计数问题,整个就是麻烦啊。
/*将相同数据库结构的A库的全部内容复制到B库 gthlu*/
declare @sql1 varchar(4000)
declare @sql2 varchar(4000)
declare @name varchar(40)
declare @column varchar(40)
declare @database varchar(40)
set @database = 'bs ' --录入更新后的数据库
create table #sql(text varchar(4000))
declare objectname cursor for
select [name] from sysobjects where type = 'u '
open objectname
fetch next from objectname into @name
while @@fetch_status = 0
begin
select @sql1 = 'alter table ' + @database + '.. ' + @name + ' disable trigger all ' + 'insert into ' + @database + '.. ' + @name + '( '
select @sql2 = 'select '
declare objectcolumn cursor for
select name from syscolumns where object_id(@name) = id and xtype <> '189 ' and autoval is null
open objectcolumn
fetch next from objectcolumn into @column
while @@fetch_status = 0
begin
select @sql1 = @sql1 + @column + ', '
select @sql2 = @sql2 + @column + ', '
fetch next from objectcolumn into @column
end
close objectcolumn
deallocate objectcolumn
select @sql1 = left(@sql1,len(@sql1) - 1) + ') '
select @sql2 = left(@sql2,len(@sql2) - 1) + ' from ' + @name + ' alter table ' + @database + '.. ' + @name + ' enable trigger all '