【问题标题】:Clone database content into an existing database将数据库内容克隆到现有数据库中
【发布时间】:2019-02-18 14:33:42
【问题描述】:

我有两个 AzureSQL 数据库,我们称它们为“A”和“B”。在我们的部署过程中,我想将架构 + 数据从 A 复制到 B。如何使用尽可能少的代码来做到这一点?是否有内置任务或 PowerShell 命令来执行此操作?

我找到了https://docs.microsoft.com/en-us/azure/sql-database/sql-database-copy,但是这个命令会创建一个新的数据库作为目标。我不要那个,目标已经存在了。

【问题讨论】:

  • 很确定您唯一的选择是导入\导出。好吧,显然复制选项是最好的选择
  • 这里似乎有不少想法。 google.com/…
  • @4c74356b41 您有什么样的导入/导出方式?肯定有很多选择?!
  • 是将B的内容替换为A的内容还是将A的内容添加到B中?
  • 使用 MSSQL Management Studio,可以选择将一个数据库转储到另一个数据库(模式 + 数据)

标签: sql sql-server azure-sql-database azure-sql-server


【解决方案1】:

最好的选择是删除数据库 B。

DROP DATABASE [yourdatabaseB];

然后将 A 的副本创建为 B。

CREATE DATABASE yourdatabaseB  
    AS COPY OF yourdatabaseA ( SERVICE_OBJECTIVE = 'P2' ) 

尽管您不希望这是最快的方法。

【讨论】:

  • 很遗憾,我做不到。这 1) 破坏了我们运营部门对 B 的所有监控,2)​​ 是一个性能问题,因为在 Azure 中创建一个新数据库需要几分钟,而我们的停机时间应该只需要几秒钟。
  • 请运行此查询select * from sys.dm_db_resource_stats,您将看到不会影响性能。使用未使用的数据库对其进行测试。你会看到 0% cpu, 0% data_io, 0% log_write。
  • 复制数据库是异步操作。
  • 由于高 I/O 使用率,使用任何其他方法时,B 数据库将有更多时间不可用。这可能会导致任何非高级层的限制。
  • 在任何操作期​​间不要信任门户。始终检查“[sys].[databases].[status_desc]”列。我发现在复制过程中,它的价值总是说“复制”
【解决方案2】:
  1. 为每个表编写 CREATE 语句
  2. 禁用所有外键
  3. 使用 SSIS 向导填充所有表
  4. 重新启用外键

详情... https://richardbriansmith.wordpress.com/2018/10/10/copy-tables-to-new-database/

【讨论】:

    【解决方案3】:

    我会尝试:

    1. 将数据库 A 恢复到 C
    2. 删除数据库 B
    3. 将 C 重命名为 B

    【讨论】:

      【解决方案4】:

      您不能自动执行监控设置吗?您可能可以复制,等待复制完成,然后重命名数据库。重命名应该是足够小的停机时间?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-06-23
        • 2011-07-29
        • 1970-01-01
        • 1970-01-01
        • 2011-03-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多