--方法一:直接附加,产生新的日志文件
USE [master]
GO
CREATE DATABASE [AdventureWorks2014]
ON
(FILENAME = N'D:\database\2014\AdventureWorks2014_Data.mdf')
FOR ATTACH_REBUILD_LOG
GO
/*
文件激活失败。物理文件名称'D:\database\2014\AdventureWorks2014_Log.ldf'可能不正确。
新的日志文件 'D:\database\2014\AdventureWorks2014_log.ldf' 已创建。
*/
--方法二:创建同名新库,停服务后用原mdf覆盖,再开启服务后用 DBCC 修复
--2.1
--注:这个语句是原库上右键生成的
CREATE DATABASE [AdventureWorks2014]
CONTAINMENT = NONE
ON PRIMARY
( NAME = N'AdventureWorks2014_Data', FILENAME = N'D:\database\2014\AdventureWorks2014_Data.mdf' , SIZE = 996608KB , MAXSIZE = UNLIMITED, FILEGROWTH = 16384KB )
LOG ON
( NAME = N'AdventureWorks2014_Log', FILENAME = N'D:\database\2014\AdventureWorks2014_Log.ldf' , SIZE = 504KB , MAXSIZE = UNLIMITED, FILEGROWTH = 10%)
GO
--2.2 停服务,覆盖mdf文件,开启服务
--图形界面显示:AdventureWorks2014(恢复挂起)
USE [master]
GO
alter database [AdventureWorks2014] set EMERGENCY
alter database [AdventureWorks2014] set single_user
DBCC CHECKDB(AdventureWorks2014,REPAIR_ALLOW_DATA_LOSS)
dbcc checkdb(AdventureWorks2014,REPAIR_REBUILD)
alter database [AdventureWorks2014] set multi_user
GO
/*
注:必须先 set EMERGENCY, 否则单用户设置不了, 会提示错误:
消息 5173,级别 16,状态 1,第 27 行
一个或多个文件与数据库的主文件不匹配。如果是尝试附加数据库,请使用正确的文件重试该操作。如果这是现有数据库,则文件可能已损坏,应该从备份进行还原。
*/
两种方法都亲测可行。
方法二做法源自舒老师博客:点击打开链接