本页面列出了以下各项的已知错误和建议的问题排查步骤:
迁移作业错误
迁移作业过程在运行时可能会发生错误。
- 某些错误(例如源数据库上的密码错误)是可恢复的。这些错误修复后,迁移作业会自动恢复。
- 有些错误是不可恢复的,例如数据复制中的错误。修复这些错误后,您必须重启迁移作业。
发生错误时,迁移作业状态会更改为 Failed,子状态会反映失败前的最后一个状态。如需排查错误,请前往失败的迁移作业以查看错误,然后按照错误消息中所述的步骤操作。如需查看有关错误的更多详细信息,请使用迁移作业中的链接导航到 Cloud Monitoring。系统会过滤日志,仅显示特定迁移作业的日志。
下表列举了一些问题示例及其解决方法:
| 症状 | 可能的原因 | 可以尝试的操作 |
|---|---|---|
出错提示:Database Migration Service can't set up a tunnel to be
connected to the bastion host。 |
Database Migration Service 无法访问堡垒主机,或者堡垒主机不接受连接。 | 请验证 源连接配置文件和 SSH 隧道服务器配置中的转发 SSH 隧道设置,然后重试。 |
出错提示:Database Migration Service can't connect to the database 或 Database Migration Service private connectivity error, cannot connect to the database。 |
Database Migration Service 无法与源 Oracle 数据库建立连接。 |
验证您是否可以从项目中访问源数据库。 检查与 来源连接配置方法相关的设置。 如果包含特定的 Oracle 错误代码(例如 |
错误消息:Archiving mode is not ARCHIVELOG。 |
您的源数据库未以 ARCHIVELOG 模式运行。 |
将源数据库配置为使用 ARCHIVELOG 模式。
如需了解详情,请参阅
配置 Oracle 源数据库。
|
出错提示:Supplemental logging ("ALL COLUMN LOGGING") isn't turned
on for the tables listed below。 |
您的源数据库未启用补充日志数据。 | 启用补充日志数据,并将其模式设置为 ALL。
如需了解详情,请参阅
配置 Oracle 源数据库。
|
错误消息:No Archive Log Files were found in the source。 |
Database Migration Service 仅读取已关闭的归档日志,但在源数据库中未找到任何日志。 |
如果数据库没有任何活跃的写入操作,您可能需要执行至少一个 |
出错提示:We're missing the necessary permissions to read
from the source。 |
源数据库中的迁移用户账号没有所需的权限。 |
Database Migration Service 会以您在源连接配置文件中配置的用户账号身份连接到源。该账号需要一组特定权限(例如 确保迁移用户账号拥有必要的权限。 如需了解详情,请参阅 配置 Oracle 源数据库。 |
错误消息:Unable to connect to the destination database。 |
连接到目标数据库时出现问题。 | 验证您是否可以从项目中访问目标数据库。 检查与 目标连接配置方法相关的设置。 |
错误消息:The following tables don't exist in the destination database: {table_names}。 |
您尝试迁移的列出的表在目标数据库中不存在。 | 当您转换源架构时,Database Migration Service 会创建必要的表和定义。 |
错误消息:password authentication failed for user {username}。 |
目标数据库的用户名或密码配置不正确。 | 确保目标 PostgreSQL 连接配置文件已正确配置,并使用了正确的用户名和密码。 |
出错提示:The following tables in the destination database
don't have primary keys: {table_names}。 |
出错提示中列出的表存在于目标数据库中,但缺少主键。 |
当您转换架构时,Database Migration Service 转换工作区会自动为没有主键的表添加主键。 如果您使用旧版转换工作区,则需要在目标中手动创建主键。如需了解详情,请参阅 旧版转换工作区。 |
警告:The following tables have foreign keys: {table_names}。 |
出错提示中列出的表存在于目标数据库中,但具有外键。 |
Database Migration Service 不会以事务方式复制数据,因此表可能会不按顺序迁移。如果存在外键,并且使用外键的子表在其父表之前迁移,则可能会遇到复制错误。 为避免此类数据完整性问题,请为迁移用户使用 |
错误消息:Unable to resume replication as log position is lost。 |
如果复制过程长时间暂停,导致日志位置丢失,则可能会发生此错误。 | 迁移作业的暂停时间不应超过(或接近)日志保留期限。如果日志位置丢失,您需要重新创建迁移作业。 |
错误消息:ORA-00942: table or view does not exist。 |
此错误可能是由于 Oracle 服务器上的缓存所致。 | 重新创建数据库用户以解决缓存问题。 |
| 迁移作业会保持在完整转储阶段,不会进入变更数据捕获 (CDC) 阶段。 | Database Migration Service 仍在对某些表执行完整转储,或者由于错误,一个或多个表无法完成完整转储。 |
|
连接问题
本部分列出并介绍了潜在网络连接问题的问题排查步骤。
无法连接到目标数据库:EOF
运行 Connectivity Tests 会返回 [DATABASE] unable to connect to the destination database: EOF 出错提示。
可能的原因:服务连接配置不正确。
可尝试的操作:确保在
服务连接 Terraform 配置文件中将 enable_proxy_protocol 设置为 false。仅 NGINX 和 Apache 等 HTTP 服务器支持代理协议。
使用 gcloud 创建 Private Service Connect 设置时,代理协议默认处于停用状态。
连接超时,连接被拒绝
运行 Connectivity Tests 失败或超时。这很可能是由于 Private Service Connect 设置中的路由配置不正确所致。 造成此问题的原因可能有多种。
可能的原因:缺少防火墙规则,该规则允许 Private Service Connect NAT CIDR 范围访问堡垒机所在的 Private Service Connect 子网,特别是堡垒机虚拟机 nic0 接口。
解决方法:确保您的组织政策不会限制内部防火墙规则,例如在 Terraform 示例脚本中定义的 psc_sp_in_fw 防火墙规则,该脚本用于
为未启用 PSC 的 AlloyDB for PostgreSQL 实例配置目标专用 IP 连接。
可能的原因:代理已关闭。所提供的端口上没有监听器,因此连接会挂起。
可尝试的操作:您可以尝试与堡垒虚拟机建立 SSH 连接,并使用以下命令搜索代理:
netstat -tunalp | grep PORT
分析对该命令的响应:
如果您收到空响应,则表示代理已关闭。请尝试运行以下命令:
sudo su; cd /,然后运行sudo dpkg -s dante-server检查是否已安装 Dante 服务器:如果已安装代理,您会收到以下消息:
Status: install ok installed如果未安装代理,则可能缺少路由器。添加路由器,然后运行
apt-get install dante-server检查是否可以下载代理。
如果代理正在运行并监听提供的端口,请尝试通过执行以下操作来打开与该代理的连接:
安装 PostgreSQL 客户端:
sudo apt-get install postgresql-client。连接到 PostgreSQL 数据库:
psql -h 127.0.0.1 -p PORT -U DBUSERNAME -W(系统会提示您输入密码)。替换以下内容:
PORT:数据库端口号。DBUSERNAME:用于连接到 PostgreSQL 数据库的用户名。
安装 telnet 客户端:
sudo apt-get install telnet连接到 telnet 客户端:
telnet 127.0.0.1 PORT将
PORT替换为数据库端口号。
根据命令的结果,执行以下操作:
如果命令无法打开连接,请尝试查看代理日志以找出根本原因。根本原因可能因 AlloyDB for PostgreSQL 实例设置而异。
如果连接是使用 telnet 打开的,但在客户端中挂起,则可能的问题是堡垒 IP 地址路由。在虚拟机上,在终端中输入
ip route。查看您是否可以找到一条路由规则,该规则使用辅助nic(nic1,即DB_SUBNETWORK_GATEWAYIP 地址)将连接路由到 AlloyDB for PostgreSQL 实例专用 IP 地址。
可能的原因:服务连接不接受来自 Database Migration Service 的端点连接。服务连接包含已接受的项目列表,而 Database Migration Service 项目不在此列表中。
解决方法:如需解决此问题,请尝试以下任一方法:
在 Google Cloud 控制台中,前往 Private Service Connect。
在已发布的服务标签页上,接受来自 Database Migration Service 的服务连接(如果处于待处理状态)。
将请求项目添加到服务连接上的许可清单项目(如果被拒绝)。
如需详细了解如何在 Terraform 中添加许可清单项目,请参阅 Terraform 文档。
如需详细了解如何在
gcloud中添加许可清单项目,请参阅 Google Cloud CLI 参考文档。
如果上述操作未能解决问题,请重新创建连接配置文件。
排查 Oracle SCAN 错误
本部分介绍了使用单一客户端访问名称 (SCAN) 功能从 Oracle Real Application Clusters (RAC) 来源迁移时可能会遇到的潜在问题。
无法与 Oracle SCAN 数据库建立连接
运行 Connectivity Tests 失败或超时。
可能的原因:您可能正在尝试直接与 Oracle SCAN 源数据库建立连接。Database Migration Service 不支持在 Oracle RAC 环境中使用 SCAN 功能直接连接到数据库。
解决方法:如需解决此问题,请尝试以下任一方法:
直接连接到其中一个节点。
使用 HAProxy 等反向代理解决方案创建专用连接配置。