sqlserver 数据库文件损坏、数据库可疑修复处理

数据库文件损坏、数据库可疑了首先不要往数据库文件所在的磁盘写入任何数据文件,此电脑暂时先不要往磁盘写入任何东西,也不要在sql编辑器里去删除数据库。

一、先停止sqlsever服务,将数据库MDF文件和LOG文件复制到C盘系统盘下,然后压缩复制到另一台数据库机上,如果出现无法复制,将该数据库所在盘,右键,属性,检查文件系统错误(勾上修复磁盘文件错误),修复完成后,再复制。

二、数据库文件复制过来后,用以下方法进行修复

sqlserver 数据只有mdf文件,如何附加

1、新建一个同名的数据库

2、停止sql服务,删除新建数据库.ldf文件,将拷贝过来的原mdf文件直接覆盖新建数据库的mdf文件,并重启服务

3、 这时数据库DATA目录下只有一个.mdf文件,启动sql server Management studio --新建查询

use master
Go

alter database 数据库名 set emergency
go
--置数据库为单用户模式
alter database  db_name set SINGLE_USER
go
--重建数据库日志文件,路径存放在DATA所在目录底下
alter database 数据库名 Rebuild Log on (name=数据库名_log,filename='D:\..\data\数据库名_log.ldf')
go
--最后设置数据库为多用户模式。
alter database 数据库名 set multi_user

--通过以上方法修复数据库后,可以dbcc checkdb一下数据库,如果发现页级错误,可以通过以下命令修复。
--这两个命令要在单用户的情况下使用

Use master
go
alter database [数据库名] SET SINGLE_USER --设置为单用户模式
dbcc checkdb(数据库名,REPAIR_ALLOW_DATA_LOSS) 
dbcc checkdb(数据库名,REPAIR_REBUILD)

--最后设置为多用户模式
alter database 数据库名 set multi_user


--这样数据库就修复回来了 OK


4、修复好数据库后运行卡慢的话也可以DBCC修复一下表,重建一下索引

--DBCC前同样要改成单用户模式
DBCC checktable ('students', REPAIR_ALLOW_DATA_LOSS)
DBCC DBREINDEX('students')
.....
--DBCC完后要改回多用户模式

--表重建索引
IF  EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[students]') AND name = N'students_Index')
  DROP INDEX [students_Index] ON [dbo].[students] WITH ( ONLINE = OFF )
CREATE NONCLUSTERED INDEX [students_Index] ON [dbo].[students] 
(
  [id] ASC
)WITH (SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF) ON [PRIMARY]

5、如果有的表insert失败时,提示主键重复冲突,可以重置一下表的最大值

select max(id) from students  --取出最大id值32584.
dbcc checkident(students, reseed, 32585) --重置最大值.

你可能感兴趣的:(SQL,数据库,sqlserver,sql)