诊断 SQL Server 问题

排查错误

迁移作业进程在运行时可能会出错。

  • 对于某些错误,Database Migration Service 会自动重试有问题的操作 以继续执行迁移进程并避免中断。 迁移作业状态会更改为正在运行,但有错误 。此状态 表示 Database Migration Service 会继续迁移不受 错误影响的数据。
  • 某些错误是无法恢复的。当 Database Migration Service 遇到无法恢复的 错误时,迁移作业状态会更改为 失败。 在这种情况下,需要先修复问题,然后重启迁移作业。

如需排查错误,请前往受影响的迁移作业,查看错误,然后按照错误消息中列出的步骤操作。您还可以通过查看 Cloud SQL 目标实例的 Cloud Monitoring 日志来获取更多详细信息。使用迁移作业详情页面上的 Cloud Monitoring 链接。

在下表中,您可以找到一些问题示例以及解决这些问题的方法:

针对此问题… 可能的原因… 请尝试以下操作…
错误消息:The BAK file's database major version number {backup_version_num} must not be higher than the current database major version number {your Cloud SQL for SQL Server version number} 您尝试从 SQL Server 的更高版本导入备份文件,但您的 Cloud SQL for SQL Server 目标实例使用的是较低版本。

如果您符合跨版本兼容性 准则,Database Migration Service 仅支持从较低版本到 较高版本的跨版本迁移。请参阅 支持的源数据库和目标数据库

重新创建 Cloud SQL for SQL Server 目标实例,以使用 更高版本的 SQL Server,然后使用新实例重试迁移过程 。
错误消息: The following database already exists in destination: {database_name}. 您的 Cloud SQL 目标实例已包含一个数据库 ,该数据库使用的名称与迁移 作业中包含的某个数据库的名称相同。 解决命名冲突。请参阅 错误:目标中已存在数据库
错误消息: Permission denied for {cloudsql.databases.get} on the Database Migration Service service account. Database Migration Service 服务帐号缺少权限。 向 Database Migration Service 服务帐号添加缺少的权限。 请参阅 访问权限控制(使用 IAM)。
错误消息: Missing WAL file at Log Sequence Number (LSN) {log_number_here} 您的事务日志文件可能使用了不正确的纪元时间戳 ,这与它们包含的更新顺序有关。 Database Migration Service 使用日志序列号和纪元时间戳来控制 事务日志文件复制到 Cloud SQL 目标实例的顺序。 检查并调整最新 事务日志文件的文件名中使用的纪元时间戳。请参阅 调整有问题的事务日志名称
当您迁移所选数据库,但迁移作业无法将数据复制到一个或多个数据库时,数据库列表中会显示失败 状态。 各种迁移作业错误。

错误 列中,点击查看错误 并修复这些错误。修复错误后,点击重启

错误:目标中已存在数据库

您会看到以下错误消息:The following database already exists in destination: {database_name}

可能的原因

您的 Cloud SQL 目标实例已包含一个数据库,该数据库使用的名称与迁移作业中包含的某个数据库的名称相同。

可以尝试的操作

根据您的迁移场景,您可以通过不同的方式解决数据库重复问题。请尝试执行以下操作之一:

重命名源 Cloud Storage 存储桶,以使用不同的名称迁移 数据库。

Database Migration Service 在 Cloud SQL 目标实例中创建的数据库的名称源自 Cloud Storage 中存储备份文件的文件夹名称。如果您有两个不同的数据库共享名称,并且您需要在 Cloud SQL 目标实例中同时使用这两个数据库,则可以重命名文件夹并重新创建迁移作业,以避免命名冲突。

执行以下步骤:

  1. 为受命名 冲突影响的源数据库创建新文件夹。请参阅 将备份文件存储在 Cloud Storage 存储桶中
  2. 重新创建迁移作业。请参阅 创建迁移作业

    您可以向现有迁移作业添加新数据库,但无法 移除数据库。因此,您需要重新创建 整个迁移作业。

从 Cloud SQL for SQL Server 实例中删除重复的数据库。

如果 Cloud SQL 目标实例中的数据库是重复的, 您可以从实例中删除该数据库,然后继续执行迁移作业。 请参阅 删除数据库在 Cloud SQL for SQL Server 文档中。


调整事务日志文件名以处理顺序错误的 WAL 文件

可能的原因

您的事务日志文件可能使用了不正确的纪元时间戳 ,这与它们包含的更新顺序有关。 Database Migration Service 使用日志序列号和纪元时间戳来控制 事务日志文件复制到 Cloud SQL 目标实例的顺序。

可以尝试的操作

您的文件上传可能会延迟或顺序错误。请等待几分钟,让问题自行解决,或者检查 Cloud Storage 存储桶中是否有缺失的文件。

如果问题未解决,请验证并调整 事务日志文件名中的纪元时间戳

执行以下步骤:

  1. 检查目标 Cloud SQL for SQL Server 实例上的事务日志导入操作列表。在 Google Cloud 控制台中,前往 Cloud SQL 实例 页面。

    前往 Cloud SQL 实例

  2. 依次点击查看所有操作 > 查看 SQL Server 错误日志
  3. 查看事务日志文件的所有导入操作,并验证 其文件名是否包含正确的纪元时间戳。
  4. 如果您发现最近的事务日志文件使用的名称包含顺序错误的 纪元时间戳,请前往 Cloud Storage 存储桶并重命名该文件。 Database Migration Service 会自动检测更改并尝试导入 相关的事务日志文件。
  5. 仅限 Amazon RDS:在导出到 S3 的过程中,可能会遗漏一些事务日志文件 。请尝试重新运行缺失 WAL 文件附近时间段的事务 日志导出功能。