重新附加SQL数据库以替换原始数据(而不是备份/恢复)

时间:2018-02-01 14:45:09

标签: sql-server database

我们在Windows Server 2008R2上有一个SQL 2012数据库,我们的基础架构团队将其作为一种备份形式分离。我们现在需要恢复数据库,并且没有"正确的"备份数据库。我想我们需要做这样的事情:

  1. 使当前的实时数据库脱机
  2. 从文件系统中删除当前数据库
  3. 将先前已分离的数据库从其备份位置文件复制到\ Data文件夹
  4. 重新附加数据库
  5. 复制时,我们会将.MDF和.LDF文件复制到原始的\ Data位置。

    我错过了什么吗?

    (也欢迎评论使用" detach"作为备份方法的可行性或其他方面。)

2 个答案:

答案 0 :(得分:0)

如果您要附加数据库,则需要考虑以下先决条件:

  1. 首先必须分离数据库。尝试附加尚未分离的数据库将返回错误
  2. 附加数据库时,所有数据文件(MDF和LDF文件)都必须可用。如果任何数据文件具有与首次创建数据库或上次连接数据库时不同的路径,则必须指定文件的当前路径
  3. 附加数据库时,如果MDF和LDF文件位于不同的目录中,其中一个路径包含\?\ GlobalRoot,则操作将失败。
  4. 如果在预先请求中没有重要的事项要考虑,那么您可以使用以下步骤分离/附加数据库:

    1. 分离当前数据库
    2. USE master;   
      GO   
      EXEC sp_detach_db @dbname = N'AdventureWorks2012'; 
      GO
      
      1. 将所需的数据库文件复制到其位置

      2. 附加数据库

      3. USE master;  
        GO  
        CREATE DATABASE YourDBName
            ON (FILENAME = 'location to mdf file\YourDBName.mdf'),  
            (FILENAME = 'location to ldf file\YourDBName.ldf')  
            FOR ATTACH;  
        GO
        

        请注意,您可能需要在上述查询中包含.ndf文件(如果它们也存在)。

        您也可以使用SQL Server Management Studio分离/ atach向导执行以下步骤。

        最后使用detach / attach不是备份和恢复的好方法。您可以阅读更多相关信息here

答案 1 :(得分:0)

您可以使用这些T-SQL语句分离数据库:

USE [master]
GO
EXEC master.dbo.sp_detach_db @dbname = N'stellar'
GO

为了附加,您可以使用以下T-SQL语句:

USE [master]
GO
CREATE DATABASE [stellar] ON
( FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\stellar.mdf' ),
( FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\stellar_log.ldf' )
FOR ATTACH
GO

附加数据库的另一种方法是使用create database

CREATE DATABASE Stellar  
ON (FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\stellar.mdf')  
FOR ATTACH ;

如果您没有日志文件,可以使用以下T-SQL命令生成新的日志文件:

CREATE DATABASE Stellar
ON (FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\stellar.mdf')
FOR ATTACH_REBUILD_LOG ;

检查参考here