诊断 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} 您尝试导入的备份文件来自于比您在 Cloud SQL for SQL Server 目标实例中使用的 SQL Server 版本更高版本。

只有当您满足跨版本兼容性准则时,Database Migration Service 才支持从较低版本向较高版本的跨版本迁移。请参阅 支持的源数据库和目标数据库

使用较高版本的 SQL Server 重新创建 Cloud SQL for 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 文件的相关时间段重新运行事务日志导出函数。