你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure Cosmos DB(预览版)中的复制作业
可以使用容器复制作业在 Azure Cosmos DB 中执行数据复制。
如果要实现以下任一方案,可能需要从 Azure Cosmos DB 帐户复制数据:
- 将所有项从一个容器复制到另一个容器。
- 更改从数据库到容器预配吞吐量的粒度,反之亦然。
- 更改容器的分区键。
- 更新容器的唯一键。
- 重命名容器或数据库。
- 将帐户的容量模式从无服务器更改为已预配,反之亦然。
- 采用仅支持新容器的新功能,例如分层分区键。
可使用 Azure CLI 命令创建和管理复制作业。
开始使用
要开始使用 Azure Cosmos DB for NoSQL API 帐户的脱机容器复制,请在 Azure 门户的预览功能中注册“脱机容器复制(NoSQL)”预览功能标志。 注册完成后,预览版将对订阅中的所有 NoSQL API 帐户生效。
先决条件
- 在源 Azure Cosmos DB 帐户上启用连续备份。
- 在源帐户的订阅上注册所有版本和删除更改源模式预览功能。
重要
对源容器执行的所有写入操作都将收取双倍的 RU 费用,以便保留对容器中项的以前版本和当前版本的更改。 这项 RU 费用的增加将来可能会发生变化。
复制容器数据
- 通过你想要使用的设置(分区键、吞吐量粒度、请求单位、唯一键等)创建目标 Azure Cosmos DB 容器。
- 创建容器复制作业。
- 监视复制作业的进度。
- 复制所有文档后,停止源容器上的更新,然后调用完成 API 将作业标记为已完成。
- 通过按预期将应用程序或客户端适当地指向源或目标容器来恢复操作。
容器复制的工作原理是什么?
- 平台为目标 Azure Cosmos DB 帐户分配服务器端计算实例,以运行容器复制作业。
- 一个作业在任何时候都跨所有实例执行。
- 联机复制作业利用所有版本和删除更改源模式来复制数据,并将增量更改从源容器复制到目标容器。
- 一旦完成作业,平台会在处于非活动状态 15 分钟后取消分配这些实例。
可以执行脱机集合复制作业,以在同一 Azure Cosmos DB for Mongo DB 帐户中复制数据。
复制集合的数据
- 通过你想要使用的设置(分区键、吞吐量粒度、请求单位、唯一键等)创建目标 Azure Cosmos DB 集合。
- 通过暂停应用程序实例或连接到它的任何客户端,停止对源集合的操作。
- 创建复制作业。
- 监视复制作业的进度并等待完成。
- 通过按预期将应用程序或客户端适当地指向源或目标集合来恢复操作。
注意
强烈建议在开始脱机集合复制作业之前停止对源集合执行任何操作。 开始复制作业后,可能无法捕获源集合上完成的项删除和更新。 如果在复制作业进行期间继续对源集合执行操作,可能会导致目标集合上出现重复数据或缺失数据。
集合复制的工作原理是什么?
- 平台为目标 Azure Cosmos DB 帐户分配服务器端计算实例。
- 在帐户中创建一个或多个集合复制作业时,会分配这些实例。
- 复制作业在这些实例上运行。
- 一个作业在任何时候都跨所有实例执行。
- 这些实例由在同一帐户中运行的所有复制作业共享。
- 联机复制作业利用更改流来复制数据,并将增量更改从源集合复制到目标集合。
- 如果实例空闲超过 15 分钟,平台可能会取消分配这些实例。
可以执行脱机表复制,以将一个表的数据复制到同一 Azure Cosmos DB for Apache Cassandra 帐户中的另一个表。
复制表的数据
- 通过你想要使用的设置(分区键、吞吐量粒度、请求单位等)创建目标 Azure Cosmos DB 表。
- 通过暂停应用程序实例或连接到它的任何客户端,停止对源源的操作。
- 创建复制作业。
- 监视复制作业的进度并等待完成。
- 通过按预期将应用程序或客户端适当地指向源或目标表来恢复操作。
注意
强烈建议在开始脱机表复制作业之前停止对源表执行任何操作。 开始复制作业后,可能无法捕获源表上完成的项删除和更新。 如果在复制作业进行期间继续对源表执行操作,可能会导致目标表上出现重复数据或缺失数据。
表复制的工作原理是什么?
- 平台为目标 Azure Cosmos DB 帐户分配服务器端计算实例。
- 在帐户中创建一个或多个表复制作业时,会分配这些实例。
- 复制作业在这些实例上运行。
- 一个作业在任何时候都跨所有实例执行。
- 这些实例由在同一帐户中运行的所有复制作业共享。
- 联机复制作业利用更改源来复制数据,并将增量更改从源表复制到目标表。
- 如果实例空闲超过 15 分钟,平台可能会取消分配这些实例。
影响复制作业速率的因素
容器复制作业的进度由以下因素决定:
源容器或数据库吞吐量设置。
目标容器或数据库吞吐量设置。
提示
将目标容器吞吐量设置为至少是源容器吞吐量的两倍。
分配给 Azure Cosmos DB 帐户用于执行数据传输的服务器端计算实例。
重要
默认 SKU 为每个帐户提供两个 4-vCPU 16-GB 服务器端实例。
限制
预览版资格条件
容器复制作业不适用于启用了以下功能的帐户。 在运行容器复制作业之前禁用这些功能:
帐户配置
未在目标容器中调整生存时间 (TTL) 设置。 因此,如果文档在源容器中未过期,它会在目标容器中重新开始其倒计时。
常见问题解答
容器复制作业是否有服务级别协议?
目前,我们尽量支持容器复制作业。 关于完成作业所需的时间,我们不提供任何服务级别协议 (SLA)。
是否可以在一个帐户中创建多个容器复制作业?
是的,可以在同一帐户中创建多个作业。 作业会连续运行。 可列出在帐户中创建的所有作业并监视其进度。
是否可以在 Azure Cosmos DB 帐户中复制整个数据库?
必须为数据库中的每个容器创建一个作业。
我有一个包含多个区域的 Azure Cosmos DB 帐户。 容器复制作业将在哪个区域运行?
容器复制作业将在写入区域中运行。 在配置了多区域写入的帐户中,作业在写入区域列表中的一个区域中运行。
当帐户的写入区域发生变化时,容器复制作业会发生什么情况?
如果区域中断(此情况很罕见)或手动故障转移,帐户的写入区域可能会发生变化。 在这种情况下,在帐户中创建的不完整容器复制作业会失败。 你将需要重新创建这些失败的作业。 然后,重新创建的作业会在新的(当前)写入区域中运行。
支持的区域
目前,以下区域支持容器复制:
美洲 | 欧洲和非洲 | 亚太区 |
---|---|---|
巴西南部 | 法国中部 | 澳大利亚中部 |
加拿大中部 | 法国南部 | 澳大利亚中部 2 |
加拿大东部 | 德国北部 | 澳大利亚东部 |
美国中部 | 德国中西部 | 印度中部 |
美国中部 EUAP | 北欧 | 日本东部 |
美国东部 | 挪威东部 | 韩国中部 |
美国东部 2 | 挪威西部 | 东南亚 |
美国东部 2 EUAP | 瑞士北部 | 阿联酋中部 |
美国中北部 | 瑞士西部 | 印度西部 |
美国中南部 | 英国南部 | 东亚 |
美国中西部 | 英国西部 | 马来西亚南部 |
美国西部 | 西欧 | 日本西部 |
美国西部 2 | 以色列中部 | 澳大利亚东南部 |
不支持 | 南非北部 | 不支持 |
已知和常见问题
错误 - 所有者资源不存在。
如果作业创建失败,并显示“所有者资源不存在”错误(错误代码 404),这表示目标容器尚未创建,或者用于创建作业的容器名称与实际容器名称不匹配。
请确保在运行作业之前已创建目标容器,并确保作业中的容器名称与实际容器名称匹配。
"code": "404", "message": "Response status code does not indicate success: NotFound (404); Substatus: 1003; ActivityId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx; Reason: (Message: {\"Errors\":[\"Owner resource does not exist\"]
错误 - 请求未经授权。
如果请求失败并显示“未经授权”错误(错误代码 401),这表示可能禁用了本地授权。
容器复制作业使用主密钥进行身份验证。 如果禁用本地授权,作业创建会失败。 必须启用本地授权,这样容器复制作业才能正常工作。
"code": "401", "message": " Response status code does not indicate success: Unauthorized (401); Substatus: 5202; ActivityId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx; Reason: Local Authorization is disabled. Use an AAD token to authorize all requests."
错误 - 获取作业的资源时出错。
此错误可能是由于内部服务器问题导致的。 要解决此问题,请在 Microsoft Azure 门户中打开新的支持请求来联系 Microsoft 支持部门。 对于“问题类型”,选择“数据迁移”。 对于“问题子类型”,选择“帐户内容器复制”。
"code": "500" "message": "Error while getting resources for job, StatusCode: 500, SubStatusCode: 0, OperationId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx, ActivityId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
后续步骤
- 了解如何使用 CLI 命令在 Azure Cosmos DB 帐户中创建、监视和管理容器复制作业。