将数据移到 SQL 托管实例
许多迁移都有一个本地数据库和云数据库必须保持同步的时期。 例如,可能有一段时间客户端对两个数据库都进行了更改。
你已将体育零售产品数据库迁移到 Azure SQL 托管实例中。 网站已在使用云数据库。 你要开始重新配置客户端以使用新数据库。 你已决定将用户分批迁移到新系统。 对于每个团队,你都需要花一些时间来解决所有问题,然后再迁移下一批用户。 这种方法让你可以在不会同时影响所有用户的情况下排查和解决问题。 接下来,你将重新配置数据分析系统以使用 Azure 中的新数据库。 在此期间,你需要确保云数据库和本地数据库每小时同步一次。
你将探索实现数据同步的各种方法。 如果只需要迁移表的子集,也可以使用这些方法选择性地迁移数据。 这种灵活性允许采用更加量身定制的数据迁移方法。
本地服务器的连接选项
通常,你希望将本地数据库中的数据与 Azure SQL 托管实例保持同步。 例如,你可能希望将客户端应用程序分阶段迁移到新数据库,这意味着,有一段时间客户端会同时连接到这两个数据库。
在选择数据同步方法之前,请务必确保你的连接安全无虞。 可通过三种不同的连接选项在本地计算机和 Azure 中的资源之间建立通信。
- 点到站点。 点到站点 (P2S) VPN 网关连接用于创建从单个客户端计算机到虚拟网络的安全连接。
- 站点到站点。 站点到站点 VPN 网关用于将整个本地站点连接到 Azure 网络。
- ExpressRoute。 使用 Azure ExpressRoute,可在 Azure 数据中心与本地基础结构或共同租用环境中的基础结构之间创建专用连接。 ExpressRoute 连接不经过公共 Internet,并且与典型 Internet 连接相比,可靠性更高、速度更快、延迟时间更短且安全性更高。
公共终结点
SQL 托管实例的公共终结点可帮助你在不使用 VPN 的情况下从 Internet 连接到数据库,并且它仅适用于数据通信。 数据的公共终结点可以与专用终结点同时共存。 出于安全原因,启用公共终结点时,该实现允许在数据库管理员和网络管理员之间进行职责分离 (SoD)。
若要为托管实例启用公共终结点,需要执行两个步骤。 对于 SoD,需要具有以下数据库和网络权限的两个不同角色来完成这些步骤:
- 在 Microsoft.Sql/managedInstances/* 范围内具有基于角色的访问控制权限的数据库管理员必须运行 PowerShell 脚本,以便为托管实例启用公共终结点。
- 在 Microsoft.Network/* 范围内具有基于角色的访问控制权限的网络管理员必须对网络安全组 (NSG) 打开公共终结点使用的端口 3342,并提供 UDR 路由以避免非对称路由。
选择同步方法
可以使用许多方法将数据从 SQL 数据库托管实例同步到本地服务器,然后再同步回去。
本机备份和还原
可以使用共享访问签名 (SAS) 从 Azure Blob 存储文件还原 Azure SQL 托管实例中的数据库。
这涉及到创建有权访问 Azure Blob 存储的凭据,然后使用具有 COPY_ONLY
选项的 BACKUP DATABASE
命令。 如果数据库大于 200 GB,可以通过提供多个 URL 位置来使用条带备份。
BACKUP DATABASE YourDatabase TO URL = 'https://youraccount.blob.core.windows.net/yourcontainer/yourdatabase.bak' WITH COPY_ONLY
若要还原 SQL 托管实例中的数据库,请执行以下操作:
RESTORE DATABASE YourDatabase FROM URL = 'https://youraccount.blob.core.windows.net/yourcontainer/yourdatabase.bak'
使用 SqlPackage 的 BACPAC 文件
BACPAC 文件实质上是数据库的元数据和数据的压缩版本。 虽然此部署方法与 SQL 数据库兼容,但 SQL 托管实例不支持在 Azure 门户内通过 BACPAC 进行迁移。 作为一种备选方法,SQLPackage 实用工具应当用于该 BACPAC 文件。
大容量复制程序 (BCP)
BCP 实用工具是一种命令行工具,可以将表导出到文件中,以便你可以导入它们。 你可以使用此方法从单个 SQL 数据库迁移到 SQL 托管实例,然后再迁移回来。
Azure 数据工厂 (ADF)
Azure 数据工厂专为数据移动和编排而构建,并且侧重于引入。 ADF 为 SSIS 包的运行提供集成运行时支持,为 SQL 托管实例提供公共 Internet 支持。
事务复制
事务复制是在连续连接的数据库服务器之间移动数据的一种方法。
该过程首先是获取发布数据库对象和数据的快照。 获取初始快照后,对发布服务器上的数据或架构的任何后续更改通常都会在发生时近乎实时地传送到 Azure SQL 托管实例。
SQL 托管实例非常灵活,因为它可以是发布者、分配者和订阅者。
复制功能是允许你复制表格各部分的少数几种技术之一。 我们将表的这些部分称为“项目”。 这些数据随后被发送到分配者,即,任意数量订阅者的数据提供者。
要求
- 连接时,在复制参与者之间使用 SQL 身份验证。
- 复制功能使用的工作目录的 Azure 存储帐户共享。
- 在托管实例子网的安全规则中打开端口 445(TCP 出站),以访问 Azure 文件共享。
- 如果发布者或分配者在托管实例上,而订阅者在本地,则打开端口 1433(TCP 出站)。
将应用程序连接到 SQL 托管实例
必须将 SQL 托管实例放置在专用于托管实例的 Azure 虚拟网络子网内。 此部署提供安全的专用 IP 地址和连接到本地网络的功能。
用户和客户端应用程序可以通过 Azure 门户、PowerShell、Azure CLI 和 REST API 连接到托管实例数据库。
所有通信都使用证书进行加密和签名。 为了检查通信方的可信度,托管实例会不断地通过证书吊销列表来验证这些证书。 如果证书被撤销,则 SQL 托管实例会关闭连接以保护数据。