【问题标题】:Migrate multiple databases into one Azure SQL database?将多个数据库迁移到一个 Azure SQL 数据库?
【发布时间】:2020-02-28 22:20:50
【问题描述】:

我想将我的所有数据库迁移到一个 Azure SQL 数据库中。

我所有的数据库都有相同的架构,我想生成一些通用的方法或代码来自动完成。

对于每个数据库,它将在 Azure SQL 中创建一个新架构,并将所有数据库创建到该架构中并将所有数据复制到其中。

数据库非常小,所以一开始我在考虑 DMA (https://www.microsoft.com/en-us/download/details.aspx?id=53595),但它不能帮助我将多个数据库合并为一个。

我正在考虑尝试编写一个动态查询以在实例中的每个数据库上运行并生成相关代码并通过链接服务器或 OpenQuery/OpenRowSet 将其提取到 Azure SQL。

也许我可以使用 Powershell dbaTools?

我对此不是很熟悉,但我听说它可以变魔术(:-))

你怎么看?

谢谢 内森

【问题讨论】:

  • 您的最终问题是什么?你说你正在考虑使用 PoSh,这是否意味着你已经编写了一个脚本但它不起作用,或者你被困在一个特定的点上?
  • 我正在考虑最好的通用方法。
  • 询问什么是“最好的”对于 Stack Overflow 来说是题外话;这是一个询问特定编程问题的地方,而不是抽象的问题。如果你写了一些东西但它失败了,我们当然可以帮助你,但这里不适合问“我可以使用什么”或“什么是最好的”。
  • 我的立场是正确的
  • 如何将 SQL 数据库迁移到 Azure:google.com.au/… 如何更改数据库的架构:stackoverflow.com/questions/17571233/… 注意:多个数据库的“点击即忘记”解决方案将非常复杂。

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


【解决方案1】:

我终于在 powershell 脚本(和 DBATools 模块)和 SQLCMD 脚本的帮助下完成了。

我一开始尝试进行数据库合并,但它不适用于我正在处理的架构。诀窍是每个数据库本身必须是唯一的,因此我必须将每个表/视图/过程/函数转移到一个新模式,并且所有对象引用都与这个新模式相关。 没有表格合并或数据合并的空间。每个对象都必须通过自己的数据保持唯一性,才能将其传输到一个 Azure SQL 数据库。

所以我不得不制定一些规则。 一种模式。不应更改数据库架构。所有数据库都具有相同的架构,因此我可以使用相同的 DDL 脚本在新数据库中创建每个对象。
我使用了 SQLCMD 并在脚本中使用了一个参数($(NewSchema)),我可以为每组对象创建一个新架构,并可以控制每个对象与同一架构中的其他对象相关联。

对于数据传输,我想使用INSERT INTO [LinkedServer]...[Tablename],但是由于表中的标识列,它并没有很好地工作。 我无法使用“Set Identity On”对其进行操作,因为您必须在服务器上的同一会话中才能执行此操作。使用链接服务器无法做到这一点。 我面临的另一个问题是对数据库和外键的一系列限制。

所以我不得不以不同的方式解决这个问题。 PowerShell 模块 DBATools 来救援。 在数据库中的每个表上运行,在 Export-DbaScript 的帮助下仅将数据导出为脚本,将其存储到变量中,替换模式名称并在远程服务器上运行它。 已为每个表使用 SET IDENTITY_INSERT On 创建的脚本。 对于约束,我再次使用 SQLCMD 脚本 ALTER TABLE NOCHECK CONSTRAINT 当前模式的所有约束,然后使用它重新打开它(在复制所有数据之后)。

我在一个 PowerShell 脚本中执行了所有操作,该脚本获取所有连接和数据库的参数,然后就完成了这项工作。

我很确定有更好的方法来实现这个目标,但是这个对我有用。

我很乐意从你这里, 您如何看待我提出的解决方案?

如果有人也问我,我很乐意分享脚本。

内森

【讨论】:

    【解决方案2】:

    根据我的经验,我搜索了很多:

    由于您的所有数据库都具有相同的架构,您应该首先考虑将这些数据合并到一个数据库中,然后再考虑deploy the database to Azure SQL Server。 Azure SQL Server 将帮助您创建数据库。

    DMA、DMS 或其他工具暂时不支持合并数据库。

    您可以参考这些对您很有帮助的博客:

    1. How to merge two databases in SQL Server?
    2. Merge Multiple Databases into a Single Database
    3. Transfer data from one database to another database

    希望这会有所帮助。

    【讨论】:

    • 非常感谢,我肯定会测试这种方法。我仍在尝试找到某种方法来自动化它,但这是一个非常好的主意。谢谢你:-)
    • @NathanL 不客气。我也希望你能找到一种自动化的好方法。这是许多案例提出的要求。您能否接受(标记)它作为答案(单击答案旁边的复选标记将其从灰色切换为已填充。)?这对其他社区成员可能是有益的。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-11
    相关资源
    最近更新 更多