根据网上朋友提供的,操作如下:
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、出现错误
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、出现错误
扩展盘区 (1:275320)(属于数据库 ID 8)在 GAM 中标记为已分配,但没有 SGAM 或 IAM 分配过该盘区。
服务器: 消息 8944,级别 16,状态 1,行 1
表错误: 对象 ID 304108224,索引 ID 0,页 (1:262940),行 1。测试(ColumnOffsets <= (nextRec - pRec))失败。值为 28 和 0。
服务器: 消息 8928,级别 16,状态 1,行 1
表错误: 对象 ID 304108224,索引 ID 1。索引节点页 (1:275702),槽 48 指向子页 (1:144308) 和上一子页 (1:133858),但未遇到这些页。
服务器: 消息 8980,级别 16,状态 1,行 1
表错误: 对象 ID 304108224,索引 ID 1。索引节点页 (1:275702),槽 49 指向子页 (1:193996) 和上一子页 (1:144308),但未遇到这些页。
服务
企业管理器--右键suspect的数据库--所有任务--分离数据库
然后备份你的suspect数据库的文件,再按下面的步骤处理:
1.新建一个同名的数据库
2.再停掉sql server
3.用suspect数据库的文件覆盖掉这个新建的同名数据库
4.再重启sql server
5.此时打开企业管理器时新建的同名数据库会出现置疑,先不管,执行下面的语句(注意修改其中的数据库名)
6.完成后一般就可以访问数据库中的数据了,这时,数据库本身一般还有问题,解决办法是,利用数据库的脚本创建一个新的数据库,并将数据导进去就行了。
如果这样改不加数据库状态,你就把数据库导成一个新库来代替旧库吧:
企业管理器--右键你的数据库--所有任务--导出数据
--目标标数据库选择新建
--选择"在两个sql数据库之间复制对象和数据"
--把"包含扩展属性"选上,其他的根据需要选择
--最后完成
然后,停止并重新启动 SQL Server。不过建议先将日志贴上来,看看日志里数据库报错的原因是什么,这样对症下药就可以药到病除.
然后,停止并重新启动 SQL Server。然后按楼上的一样,执行 DBCC DBRECOVER(数据库)运行恢复操作。 执行 sp_detach_db 分离数据库。
执行 sp_attach_db 附加数据库,指向被移动的文件。
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 objectnamefetch next from objectname into @namewhile @@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' insert into #sql select @sql1 + @sql2
fetch next from objectname into @name
endclose objectname
deallocate objectnameselect * from #sqldrop table #sqlgo