日期:2014-05-19  浏览次数:20605 次

服务器断电,导致数据库出现置疑,那个朋友碰到过
根据网上朋友提供的,操作如下:
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 '