【问题标题】:copy a database within SQL Server Express?在 SQL Server Express 中复制数据库?
【发布时间】:2010-11-24 17:02:33
【问题描述】:

我想制作一个我拥有的数据库的副本,但将它保存在与测试数据库相同的服务器上。但是,我发现的一切都是使用复制数据库向导(我使用的是 MS SQL Server Express)。

说明总是说:在 SQL Server Management Studio 中,在对象资源管理器中,展开数据库,右键单击数据库,指向任务,然后单击复制数据库。

我没有复制数据库选项。我以管理员身份运行,所以不知道为什么它对我来说丢失了 - 我必须单独安装它吗?我无法进行分离/附加,因为它正在复制到同一台服务器。我尝试了分离、复制 MDF/LDF、重命名、附加,但你可以想象这搞砸了 :) 我不擅长使用 SQL 以编程方式完成所有操作。有没有我可以使用的工具?

【问题讨论】:

标签: sql-server sql-server-express


【解决方案1】:

在 SSMS 2008 中,您可以这样做:

  1. 创建要复制的数据库的备份

  2. 在 SSMS 中,右键单击“数据库”并选择“恢复数据库”

  3. 从“还原源”部分的“从数据库”下拉列表中选择要复制的数据库

  4. 在“还原目标”部分的“至数据库”字段中输入新数据库的名称 - 这不能是现有数据库的名称。

  5. 点击确定

你已经完成了! :)

【讨论】:

  • 对我来说这会导致很多问题,因为它仍然尝试使用与复制的数据库相同的 MDF 和 LDF 文件。您可以更改要使用的 MDF 和 LDF 文件,但它仍然以某种方式经常尝试使用原始数据库中的文件。
  • @krzychu 我遇到了类似的问题。你有没有设法解决它?
  • 我做到了——经过几次尝试,在恢复数据库的同时更改了 MDF 和 LDF 路径。不知何故。我不记得我是否在那里做了什么特别的事情来让它发挥作用。
  • 设置新的 .mdf 和 .ldf 文件成功了,在“恢复数据库”弹出窗口,“文件”选项卡,参数“恢复为”;感谢您的提示@krzychu
  • 似乎已由 SSMS 17.4 (2017) 修复。我至少根据自动建议的新数据库名称获得了新文件名。
【解决方案2】:

在 SQL Server Express 2012 中,您可以执行以下步骤:

  1. 创建要复制的数据库的备份
  2. 右键单击“数据库”并选择“恢复文件和文件组”
  3. 在“至数据库”字段中输入新数据库的名称。
  4. 选择“从设备”,然后选择您在第一步中备份的文件
  5. 点击“确定”

这将使用正确的表设置“克隆”数据库,例如“默认值”和“自动增加”等。

【讨论】:

  • 这也适用于 SQL Server Express 2008 R2。谢谢!
  • 要备份和恢复数据库,我需要以管理员身份登录吗?
  • 在我注意到答案建议“恢复文件和文件组”之前,我使用了“恢复数据库”。我收到了我想要的,但我想知道有什么不同。
  • 注意:这仅在您尚未创建目标数据库时才有效(即,在第 3 步中,它必须是不存在的新数据库名称)。
【解决方案3】:

SQL Express 数据库有一个导出按钮,我只是将数据库导出到同一台服务器上的新数据库,它正在复制数据库。只需右键单击数据库名称即可。

【讨论】:

  • 比备份/恢复慢,但提供了最轻松、最简单的答案,尤其是在迁移大量小型数据库时。
  • 其实我觉得比较快,因为需要一半的读写。用户帐户也被复制了。
  • 它不复制存储过程。不确定索引。
  • 它还将我的视图复制为表格。
  • 我遇到了与@Druid 相同的问题——即视图被复制为表格。我最终通过备份现有数据库并将其还原到新数据库来解决此问题。但是,有一个问题,您无法将数据库还原到 现有 数据库,因为它会抛出“备份集包含现有 数据库以外的数据库的备份。 "错误。删除 new 数据库并重新执行恢复过程,同时在 Destination 数据库字段中手动键入新数据库名称,这对我来说非常有效! :)
【解决方案4】:

按照这些步骤在 SQL Express 中制作数据库副本

  1. 停止 SQL
  2. 将 db 的 mdf、ldf 和任何其他文件复制到新位置(确保获取日志文件)
  3. 更改每个复制文件的名称
  4. 启动 SQL
  5. 在 SSMQ 中右键单击数据库并选择附加
  6. 确保更改“附加为”列中的名称
  7. 将“数据库详细信息”下部窗格中的文件位置更新为您复制的文件(尤其是该日志文件)的位置

我能够使用这种方法在我的 SQL Express 系统上复制数据库

【讨论】:

  • 我这样做了,但无法让它工作。当我用新名称附加新数据库时,它破坏了我的原始数据库。因此,我使用新名称对这个新数据库使用的所有代码都运行良好,但我使用旧数据库名称的旧代码被破坏了。我需要能够同时使用这两个数据库。
  • 仅供参考 - 它显示为两个不同的数据库。但不知何故并没有按照我想象的方式工作(以及你所说的方式)。我会再试一次,以防万一,完全按照你的指示......
【解决方案5】:

我在使用 SQL Express 2012 创建数据库副本时遇到问题。 我已经通过备份和恢复的方法解决了。 进行备份后,我使用:恢复 -> 文件和文件组

下一步是为新数据库编写一个新名称并设置源:

指向源文件

最后,必须选择用替换覆盖现有数据库 并为扩展名为 mdf 和 ldf 的新文件设置名称,这些文件不同于现有 where is: Restore as

这个方法对我有用

【讨论】:

    【解决方案6】:

    如果您使用的是 SQL Server Express 2012,请注意转到选项文件并确保目标文件(还原为列)与原始文件 *.mdf 和 *.log 不同

    (我尝试放一张图片,但需要 10 个声望:p)

    【讨论】:

      【解决方案7】:

      我认为管理器的 Express 版本不会具有复制数据库功能。您是否考虑过通过备份和恢复方法进行复制?

      http://msdn.microsoft.com/en-us/library/ms190436.aspx

      【讨论】:

      • 这样做但不起作用,因为想要恢复到该数据库已经存在的同一台服务器上:(
      • 如果您恢复到具有不同名称的数据库,您还应该包括重命名数据文件的选项 (LDF/NDF/MDF)。这可以防止 Sql 尝试覆盖原始数据库中的数据文件。
      • @DanPuzey 你能详细说明一下吗?具体流程应该是怎样的?
      【解决方案8】:

      我发现了问题!单击数据库,还原,然后执行以下操作: 在选择从哪里恢复,并写入目标数据库名称后,转到文件 [图片上的注释 1] 并将最右边的列文件名更改为不同于原始 [图片上的注释 2] 然后就可以了 :)

      【讨论】:

        【解决方案9】:

        我只是想到了一个非常好的方法来解决这个问题:) 所以我想我应该发布我的想法。请注意,这是“未经测试”,但我认为它会起作用。

        1. 做一个“备份...”数据库(理论上这是在您的 生产服务器,但不是必须的)
        2. 将备份文件(从您的 prod 服务器)复制到您的开发机器上
        3. 假设您在开发中使用 SSMS Developer Edition 机器,然后您可以在您的开发机器上进行“恢复”, 然后在你的开发中也做一个“复制数据库” 机器(创建数据库的新副本)
        4. 现在在您刚刚创建的新数据库上执行“备份...”,复制备份文件(到您的生产服务器)并在 sql server express 服务器上执行“恢复”:)

        希望这可以帮助一些人:)

        干杯,

        杰夫

        【讨论】:

          【解决方案10】:

          解决方案肯定是创建备份并恢复它,但要确保恢复的副本指向不同的 .mdf 和 .ldf 文件。

          以下是使用 SSMS 2014 和 SQL Server 12 安装进行检查的方法:假设您正在本地磁盘上创建和恢复备份。

          • 创建现有数据库的备份
            • 右键单击数据库,然后在“任务”下选择“备份...”。
            • (如果您将位置保留为默认位置,则在下一步还原时无需寻找备份。)
          • 将备份恢复到新数据库:
            • 右击数据库,选择“恢复数据库”
            • 选择“设备”
            • 单击省略号按钮(“...”)打开“选择备份设备”对话框。
            • 选择“文件”作为备份媒体类型,然后单击“添加”按钮
            • 选择刚才的备份,点击确定(两次)
            • 现在,回到“恢复数据库”对话框,为您的目标数据库输入一个新名称
            • 单击“选择页面”下的“文件”,并确保“还原为”指向尚不存在的 .mdf 和 .ldf 文件名
            • 点击确定!

          【讨论】:

            【解决方案11】:

            尝试备份您的数据库,然后将其恢复到全新的数据库中。

            • 创建新数据库。
            • 对原始文件进行完整备份。
            • 右键单击新数据库,点击恢复。
            • 导航到您的 .BAK,并确保 .mdf 和 .ldf 与新的匹配。

            【讨论】:

              【解决方案12】:

              我认为您可以尝试将数据导入新数据库。

              1. 在本地 sql server 中创建一个空数据库
              2. 右键新建数据库->任务->导入数据
              3. 在 SQL Server 导入和导出向导中,选择产品环境的服务器名称作为数据源。并选择您的新数据库作为目标数据。

              【讨论】:

                【解决方案13】:

                至于您问题的第一部分(为什么在您的 dbs 的任务下看不到此复制数据库向导选项),答案确实在于 您正在运行SQL Server Express。 SQL Server Express 不支持此 Copy DB 功能所依赖的 SQL Server Agent 功能,因此未显示 Copy DB 功能(但许多在线资源未能做到这一点)。

                幸运的是,大多数其他人都解决了您问题的第二部分(否则如何完成任务),并且几乎所有人都指出使用现有的备份和恢复选项(在 Express 中确实存在),或导出/导入(这也存在于 Express 中,我可以确认)。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2011-03-18
                  • 2016-10-16
                  • 1970-01-01
                  相关资源
                  最近更新 更多