恢复只有MDF文件的MS SQL数据库

恢复只有MDF文件的MS SQL数据库.

从 SQL Server 
7.0 或 SQL Server 2000 恢复或升级到更高版本。
如果你的SQL数据库,只保留有
*.mdf文件,怎么恢复呢?下面的两个方法帮你解决这个难题.

writer:furenjun  
2007.11.13

方法一
=================================================
  在 SQL Server 
2005 中,通过使用"分离和附加操作"将用户数据库(只有一个*.mdf文件或两个文件都存在)
  从 SQL Server 
7.0 或 SQL Server 2000 升级到更高版本。也实现了只有一个*.mdf文件附加/还原成功的目的.
  哈哈,不错吧.步骤还挺简单的.

操作步骤:
   
1.将复制的 CarDriManage 数据库和(可选的)日志文件附加到 SQL Server 2005 的实例(此示例使用了相同的数据库名称)。
   
2.在 SQL Server Management Studio 中,打开新的查询编辑器查询并连接到要附加该数据库的服务器实例。 
   
3.执行以下 CREATE DATABASE 语句:

 复制代码 
USE master;
GO
CREATE DATABASE [CarDriManage] ON PRIMARY 
   (FILENAME 
= 'D:\MSSQL\DATA\CarDriManage.mdf')
   
FOR ATTACH;
GO
--如果两个文件都存在,则执行下面的代码.
 USE master;
 
GO
 
CREATE DATABASE pubs ON PRIMARY 
   FILENAME 
= 'D:\MSSQL\DATA\CarDriManage.mdf')
   
LOG ON (FILENAME = 'D:\MSSQL\DATA\CarDriManage_log.LDF')
   
FOR ATTACH;
 
GO

 
***注意:***
在 SQL Server Management Studio 中,新附加的数据库在对象资源管理器中不是立即可见的。若要查看数据库,请单击“对象资源管理器”窗口,并选择“视图”
>“刷新”。如

果展开“数据库”节点,新附加的数据库现在就会显示在数据库列表中。 

--下面是执行后的报告(没有CarDriManage_log.LDF文件)
--
相信你看到下面的消息也会很高兴,失而复得啊!

文件激活失败。物理文件名称
'C:\Program Files\Microsoft SQL Server\MSSQL\data\CarDriManage_log.LDF'可能不正确。
新的日志文件 
'D:\MSSQL\DATA\CarDriManage_log.LDF' 已创建。
正在将数据库 
'CarDriManage' 从版本 539 转换为当前版本 611
数据库 
'CarDriManage' 正在从版本 539 升级到版本 551
数据库 
'CarDriManage' 正在从版本 551 升级到版本 552
数据库 
'CarDriManage' 正在从版本 552 升级到版本 553
数据库 
'CarDriManage' 正在从版本 553 升级到版本 554
数据库 
'CarDriManage' 正在从版本 554 升级到版本 589
数据库 
'CarDriManage' 正在从版本 589 升级到版本 590
数据库 
'CarDriManage' 正在从版本 590 升级到版本 593
数据库 
'CarDriManage' 正在从版本 593 升级到版本 597
数据库 
'CarDriManage' 正在从版本 597 升级到版本 604
数据库 
'CarDriManage' 正在从版本 604 升级到版本 605
数据库 
'CarDriManage' 正在从版本 605 升级到版本 606
数据库 
'CarDriManage' 正在从版本 606 升级到版本 607
数据库 
'CarDriManage' 正在从版本 607 升级到版本 608
数据库 
'CarDriManage' 正在从版本 608 升级到版本 609
数据库 
'CarDriManage' 正在从版本 609 升级到版本 610
数据库 
'CarDriManage' 正在从版本 610 升级到版本 611


更为详细的介绍就参见:
====================
SQL Server 
2005 联机丛书   
如何使用分离和附加来升级数据库 (Transact
-SQL) 
ms
-help://MS.SQLCC.v9/MS.SQLSVR.v9.zh-CHS/udb9/html/99f66ed9-3a75-4e38-ad7d-6c27cc3529a9.htm



方法二: 
=============================================================

使用系统存储过程 (Transact
-SQL) 之 数据库引擎存储过程 (Transact-SQL) 
sp_attach_single_file_db

--使用示例
--
将"D:\MSSQL\DATA\database.mdf" 这个数据库文件,附加至sql2005数据库中,
--
附加的新数据库名为:DataBase2

USE master;
GO
EXEC sp_detach_db @dbname = 'DataBase2';
EXEC sp_attach_single_file_db @dbname = 'DataBase2'
    
@physname = N'D:\MSSQL\DATA\database.mdf';
go
===================
消息 
15010,级别 16,状态 1,过程 sp_detach_db,第 34 行
数据库 
'DataBase2' 不存在。请使用 sp_helpdb 来显示可用的数据库。
文件激活失败。物理文件名称
'C:\DotNetNuke_Build\Website\App_Data\Database2_log.ldf'可能不正确。
新的日志文件 
'D:\MSSQL\DATA\DataBase2_log.LDF' 已创建。

===========================
请注意(摘自sql2005帮助文档)
===========================
将只有一个数据文件的数据库附加到当前服务器。sp_attach_single_file_db 不能用于多个数据文件。
重要事项:  
========
后续版本的 Microsoft SQL Server 将删除该功能。请避免在新的开发工作中使用该功能,并应着手修改当前还在使用该功能的应用程序。,我们建议您改用 
CREATE DATABASE 

database_name 
FOR ATTACH。有关详细信息,请参阅 CREATE DATABASE (Transact-SQL)。不要针对复制数据库使用此过程。
语法:
====
sp_attach_single_file_db 
[ @dbname= ] 'dbname'[ @physname= ] 'physical_name'


===========附常规附加数据库方法(有*.mdf 和*_log.ldf两个文件) ===============

1.在 SQL Server Management Studio 对象资源管理器中,连接到 Microsoft SQL Server 数据库引擎,然后展开该实例。

2.右键单击“数据库”,指向“任务”,然后单击“附加”。将显示“附加数据库”对话框。

3.若要指定要附加的数据库,请单击“添加”,然后在“定位数据库文件”对话框中选择该数据库所在的磁盘驱动器,展开目录树以查找和选择该数据库的 .mdf 文件;例如:

  C:\Program Files\Microsoft SQL Server\MSSQL.
1\MSSQL\DATA\AdventureWorks_Data.mdf

  
***重要事项:***
  本示例假设 AdventureWorks 数据库以前已分离。有关分离数据库的信息,请参阅如何分离数据库 (SQL Server Management Studio)。
 
4.或者,若要指定以其他名称附加数据库,请在“附加数据库”对话框的“附加为”列中输入名称。

5.或者,通过在“所有者”列中选择其他项来更改数据库的所有者。

6.准备好附加数据库后,单击“确定”。

***注意:***
   新附加的数据库在视图刷新后才会显示在对象资源管理器的“数据库”节点中。若要随时刷新视图,请在对象资源管理器中单击,再单击“视图”菜单中的“刷新”。 
 


原文地址:https://www.cnblogs.com/furenjun/p/sql2005Attach.html