排查常见的 Azure 数据库迁移服务(经典版)问题和错误
本文描述了 Azure 数据库迁移服务(经典版)用户可能遇到的一些常见问题和错误。 本文还包含有关如何解决这些问题和错误的信息。
迁移活动处于排队状态
错误:在 Azure 数据库迁移服务项目中创建新活动时,活动保持为排队状态。
原因:如果 Azure 数据库迁移服务实例达到正在运行的任务的最大容量,则会出现此问题。 任何新活动将排队到容量可用为止。
解决方法:验证数据迁移服务实例是否在运行各个项目中的活动。 可以继续创建新活动,这些活动会自动添加到队列中等待执行。 任何一个正在运行的现有活动完成后,下一个排队的活动会立即开始运行,其状态会自动更改为正在运行。 无需采取任何进一步的措施即可开始迁移排队的活动。
选择迁移的数据库数目上限
为要转移到 Azure SQL 数据库或 Azure SQL 托管实例的数据库迁移项目创建活动时发生以下错误:
错误:迁移设置验证错误: "errorDetail": 选择迁移的“数据库”对象数目超过最大数目 '4'。
原因:如果为单个迁移活动选择的数据库数目超过 4 个,则会显示此错误。 目前,每个迁移活动限制为 4 个数据库。
解决方法:为每个迁移活动选择 4 个或更少的数据库。 如果需要同时迁移 4 个以上数据库,请预配 Azure 数据库迁移服务的另一个实例。 目前,每个订阅最多支持两个 Azure 数据库迁移服务实例。
尝试停止 Azure 数据库迁移服务时出错
停止 Azure 数据库迁移服务实例时收到以下错误:
错误:服务无法停止。 错误: {'error':{'code':'InvalidRequest','message': '一个或多个活动当前正在运行。 若要停止服务,请等到这些活动完成,或手动停止这些活动,然后重试。'}}
原因:如果尝试停止的服务实例包含仍在运行的或者存在于迁移项目中的活动,则会显示此错误。
解决方法:确保尝试停止的 Azure 数据库迁移服务实例中没有任何活动正在运行。 在尝试停止该服务之前,还可以删除活动或项目。
以下步骤演示如何通过删除所有正在运行的任务来删除项目,以清理迁移服务实例:
Install-Module -Name AzureRM.DataMigration
Login-AzureRmAccount -Environment AzureChinaCloud
Select-AzureRmSubscription -SubscriptionName <subName>
Remove-AzureRmDataMigrationProject -Name <projectName> -ResourceGroupName <rgName> -ServiceName <serviceName> -DeleteRunningTask
尝试启动 Azure 数据库迁移服务时出错
启动 Azure 数据库迁移服务实例时收到以下错误:
- 错误:服务无法启动。 错误: {'errorDetail':'服务无法启动,请联系 Azure 支持部门'}
原因:上一实例发生内部故障时,会显示此错误。 此错误极少发生,工程团队已了解这一情况。
解决方法:删除无法启动的服务的实例,然后预配一个新的来代替它。
在将 SQL 迁移到 Azure SQL DB 托管实例的过程中还原数据库时出错
从 SQL Server 联机迁移到 Azure SQL 托管实例时,直接转换失败,出现以下错误:
错误:操作 ID 为“operationId”的还原操作失败。 代码“AuthorizationFailed”,消息“对象 ID 为 'objectId' 的客户端 'clientId' 无权执行范围为 '/subscriptions/subscriptionId' 的操作 'Microsoft.Sql/locations/managedDatabaseRestoreAzureAsyncOperation/read'”。
原因:此错误表明,用于从 SQL Server 联机迁移到 SQL 托管实例的应用程序主体在订阅上没有参与权限。 目前,使用 SQL 托管实例进行的某些 API 调用需要在订阅上有此权限才能执行还原操作。
解决方法:将 Get-AzureADServicePrincipal
PowerShell cmdlet 与错误消息中提供的 -ObjectId
配合使用即可列出所用应用程序 ID 的显示名称。
验证此应用程序的权限,确保其在订阅级别有参与者角色。
Azure 数据库迁移服务工程团队会限定从订阅上的当前参与角色进行访问这一必需权限。 如果你的业务要求不允许使用参与角色,请联系 Azure 支持部门。
删除与 Azure 数据库迁移服务关联的 NIC 时出错
尝试删除与 Azure 数据库迁移服务关联的网络接口卡时,该操作失败并出现以下错误:
错误:无法删除与 Azure 数据库迁移服务关联的 NIC,因为 DMS 服务正在使用该 NIC
原因:如果 Azure 数据库迁移服务实例仍然存在并在使用该 NIC,则会出现此问题。
解决方法:若要删除此 NIC,请删除 DMS 服务实例,这会自动删除该服务使用的 NIC。
删除与 Azure 数据库迁移服务实例关联的所有项目和活动后,可以删除服务实例。 在删除服务的过程中,会自动清理服务实例使用的 NIC。
重要
确保要删除的 Azure 数据库迁移服务实例中没有任何正在运行的活动。
使用 ExpressRoute 时的连接错误
当你尝试连接到 Azure 数据库迁移服务项目向导中的源时,如果该源使用 ExpressRoute 进行连接,将在很长时间后超时且连接失败。
原因:使用 ExpressRoute 时,Azure 数据库迁移服务要求在与它关联的虚拟网络子网中预配三个服务终结点:
- Service Bus 终结点
- 存储终结点
- 目标数据库终结点(例如,SQL 终结点、Azure Cosmos DB 终结点)
解决方法:请启用所需的服务终结点,以便在源与 Azure 数据库迁移服务之间建立 ExpressRoute 连接。 |
将 MySQL 数据库迁移到 Azure Database for MySQL 时发生锁定等待超时错误
通过 Azure 数据库迁移服务将 MySQL 数据库迁移到 Azure Database for MySQL 实例时,迁移失败并出现以下锁定等待超时错误:
错误:数据库迁移错误 - 无法加载文件 - 无法针对文件 'n' RetCode 启动加载进程:SQL_ERROR SqlState:HY000 NativeError:1205 消息: [MySQL][ODBC Driver][mysqld] 锁定等待超时;请尝试重启事务
原因:之所以在迁移失败时发生此错误,是因为迁移期间发生锁定等待超时。
解决方法:考虑增大服务器参数 'innodb_lock_wait_timeout' 的值。 允许的最大值为 1073741824。
使用动态端口或命名实例连接到源 SQL Server 时出错
尝试将 Azure 数据库迁移服务连接到在命名实例或动态端口上运行的 SQL Server 源时,连接失败并出现以下错误:
错误:-1 - SQL 连接失败。 建立与 SQL Server 的连接时,出现网络相关或特定于实例的错误。 找不到或无法访问服务器。 请验证实例名称是否正确,SQL Server 是否已配置为允许远程连接。 (提供程序:SQL 网络接口,错误:26 - 定位指定服务器/实例出错)
原因:当 Azure 数据库迁移服务尝试连接到的源 SQL Server 实例有一个动态端口或者使用命名实例时,会发生此问题。 通过传入连接连接到命名实例或者使用动态端口时,SQL Server 浏览器服务会侦听 UDP 端口 1434。 每次 SQL Server 服务重启时,动态端口可能会更改。 可以通过 SQL Server 配置管理器中的网络配置检查分配给实例的动态端口。
解决方案:验证 Azure 数据库迁移服务能否在适用情况下通过动态分配的 TCP 端口连接到 UDP 端口 1434 上的 SQL Server 浏览器服务和 SQL Server 实例。