【问题标题】:"Restoring" a mdf database file to a new database将 mdf 数据库文件“恢复”到新数据库
【发布时间】:2019-12-20 04:14:49
【问题描述】:

我有一个 SQL Server Express 实例,并且每天两次对整个服务器进行文件级备份。我在想文件级备份可以作为表的备份。这可能是一个错误。

我现在需要查看旧的database.mdf 文件中包含的数据。我不想将数据恢复到生产数据库。我看到here about attaching 一个.mdf 文件到服务器。我的.mdf 文件与生产数据库同名,因为它是文件的备份。如果我这样做,我会得到什么结果?

  • 新的同名数据库?
  • 具有自动重命名功能的新数据库?
  • 我的生产数据库被覆盖了吗?
  • 还有别的吗?

将与生产数据库同名的.mdf 文件“恢复”为新数据库名称以便我不会覆盖生产数据库的最佳方法是什么?

【问题讨论】:

  • 抱歉,在另一个 SQL Server 实例上测试它的作用怎么样?也许在您的本地机器或基础设施中的测试机器上。如果您唯一的选择是将其命名为原始文件,我希望附加过程在已经有一个类似这样的数据库的服务器上失败
  • 这可能是个错误。 是的。您需要充分了解可用的灾难恢复选项,并制定已定义、记录并经过测试的恢复计划。大概你从来没有备份过你的 sql server 实例中的任何东西。
  • @SMor - 你是对的。我只用 Unitrends 在文件级别备份了整个服务器。您是对的,我没有使用 SQL 服务器本身提供的备份。 IIRC 我唯一的选择是手动选项,我不认为手动选项是足够的,因为人们忘记/延迟按时进行手动备份,因此 Unitrends 选项。我们测试了文件级别的恢复,只是没有使用 SQL Server 数据库。我也没有预料到需要恢复到不同数据库名称的这种情况。对于 SQL Server,什么是好的自动备份选项?
  • 不,您需要定义您对灾难恢复的要求。这将引导您选择适当的恢复模式。反过来,这将引导您确定需要执行的备份任务以及用于它们的计划。一旦你决定并实施了它,你记录它,你实践它,并确保至少有 2 人知道这一切。
  • Express 版本不支持代理 - 这是一种通常用于自动执行 sql server 任务的功能。 MS 有讨论为 express 版本做类似的事情here

标签: sql-server


【解决方案1】:

您可以将文件附加为数据库,在同一实例上使用不同的名称,或在不同的实例上使用相同的名称。例如,将文件复制到 SQL Server 实例可以访问它们的位置并运行类似:

CREATE DATABASE AdventureWorks_copy  
    ON (FILENAME = 'C:\temp\AdventureWorks_Data.mdf'),   
    (FILENAME = 'C:\temp\AdventureWorks_Log.ldf')   
    FOR ATTACH; 

https://docs.microsoft.com/en-us/sql/relational-databases/databases/attach-a-database?view=sql-server-2017

【讨论】:

  • 如果我更改 mdf 文件的名称并附加该文件,SQL 服务器将使用文件名而不是文件内的内容附加?
  • 您在CREATE DATABASE ... FOR ATTACH 语句中指定新数据库和所有文件的名称。物理文件名并不重要。
【解决方案2】:

使用 Microsoft SQL Server Management Studio V18.0 时。

  1. 数据库上的 RBC 并选择“附加”。
  2. 浏览到要附加的文件。
  3. 当您选择文件时,您可以在其中更改您希望数据库在附加时具有的名称:

在上面的示例中附加后,数据库将被命名为“WhateverYouWant”。

如果已经有同名的数据库,则附加将失败,您将获得一个链接,告诉您原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-28
    • 2011-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多