SQL 2005/2008置疑修复
SQL 2005 置疑修复
1.停止SQL服务管理器,将原数据文件(sql根目录下的.mdf .ldf文件)拷贝出来进行备份,然后将原数据库删除,使用思迅数据库安装包程序创建一个新的数据库。
use master
go
alter database 置疑数据库 set emergency
go
alter database 置疑数据库 set single_user with rollback immediate
go
2.停止sql server服务,用备份出来的老数据库的MDF文件替换新数据库相应的MDF文件,并把(新的)LDF文件删除。
3.开启sql server服务,依次实现如下语句:
alter database 置疑数据库 Rebuild Log on
(name=SuspectDB_log,filename='D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\置疑数据库_log.LDF')
go
alter database hbposv10 set multi_user
go
4.检查是否仍有损坏
DBCC CHECKDB('置疑数据库')
go
----简略版
alter database 置疑数据库 set emergency
go
alter database 置疑数据库 set single_user with rollback immediate
go
use master
go
alter database 置疑数据库 Rebuild Log on (name=SuspectDB_log,filename=’D:/Log/置疑数据库_log.LDF’)
go
alter database 置疑数据库 set multi_user
go
DBCC CHECKDB('置疑数据库')
go
SQL 2008 置疑疑修复
一、备份“置疑”数据库的数据文件,因为日志文件.ldf出错,可以只备份.mdf文件。
二、打开SQL Server Management Studio,删除“置疑”数据库,如果提示删除错误,可以重启数据库服务器,然后再试。
三、重新使用server包创建hbposv10空库
四、停止数据库服务器
五、将刚才新建数据库生成的数据库的日志文件hbposv10_log.ldf删除,用要恢复的数据库.mdf文件覆盖刚才生成的数据库数据文件hbposv10_data.mdf。
六、启动数据库服务器。此时会看到数据库hbposv10的状态为“置疑”。这时候不能对此数据库进行任何操作。
七、更改库状态
use master
alter database hbposv10 set emergency
alter database hbposv10 set single_user with rollback immediate
go
use master
go
--重建log日志
alter database hbposv10 Rebuild Log on
(name=SuspectDB_log,filename='C:\Program Files\Microsoft SQL Server\MSSQL10_50.MYSQLSERVER\MSSQL\DATA\hbposv10_log.ldf')
go
alter database hbposv10 set multi_user
go
八、检查并修复数据库
--检查数据库,如没有错误就不用执行下面语句
DBCC CHECKDB('hbposv10')
go
--切换单用户模式
EXEC sp_dboption 'hbposv10', 'single user', 'TRUE'
go
--修复数据库,修复完后再检查数据库
DBCC CHECKDB ('hbposv10','repair_rebuild')
Go
--上面修复不行,再执行下面修复
DBCC CHECKDB ('hbposv10','repair_allow_data_loss')
Go
--修复完成切换多用户模式
EXEC sp_dboption 'hbposv10', 'single user','FALSE'
go
--修复索引自增列
use hbposv10----门店用 use hbposv10_branch
go
declare @tablename varchar(100)
declare test_cur cursor for
select object_name(id) from syscolumns
where status=128
open test_cur
fetch test_cur into @tablename
while @@fetch_status=0
begin
DBCC CHECKIDENT (@tablename, RESEED)
fetch test_cur into @tablename
end
close test_cur
DEALLOCATE testdb_cur
use hbposv10----门店用 use hbposv10_branch
go
declare @tablename varchar(100)
declare test_cur cursor for
select object_name(id) from syscolumns
where status=128
open test_cur
fetch test_cur into @tablename
while @@fetch_status=0
begin
DBCC CHECKIDENT (@tablename, RESEED)
fetch test_cur into @tablename
end
close test_cur
deallocate test_cur
go