如何解决关于表结构的报错?

本文介绍如何解决DTS实例运行过程中,关于表结构报错的问题。

目标库为MySQL

报错:Specified key was too long; max key length is 767 bytes

可能原因:MySQL的InnoDB引擎支持的表索引字段最大长度为767字节。

解决方法:对于5.6和5.7版本的RDS MySQL,您可以将目标实例innodb_large_prefix参数的值修改为ON,然后重新启动任务。修改参数的方法,请参见修改实例参数

报错:Unknown collation: 'XXX'

可能原因:当前MySQL版本数据库不支持的字符集排序。

解决方法:手动修改字符集排序订正DDL语句。

报错:Unknown database 'XXX'

可能原因1:DTS任务使用的数据库账号权限不足,无法在目标端创建该数据库。

解决方法1:手动在目标端创建报错信息中的数据库,然后重新启动任务。

可能原因2:同步或迁移对象中,有与报错数据库相关联的对象。

解决方法2:确认报错信息中的数据库是否需要同步或迁移。

  • 需要:将报错信息中的数据库,添加为待同步或迁移对象。

  • 不需要:忽略报错信息中的数据库。

报错:Access denied for user 'XXXX'@'%' to database 'XXXX'

可能原因:DTS任务使用的数据库账号,没有访问报错信息中的数据库的权限。

解决方法:

  • 方法一:使用权限足够的数据库账号,创建DTS任务。

  • 方法二:给报错信息中的账号,授予足够的权限。

报错:Table ' XXX' doesn't exist

可能原因:创建VIEW等对象时,依赖的对象不存在。

解决方法:确认源库中是否存在依赖的对象。

  • 存在:将依赖的对象,添加为待同步或迁移对象。

  • 不存在:可以选择忽略对象。

报错:Unknown column 'xx.xxx' in 'field list'

可能原因:查询的VIEW已经失效,字段已经不在所属表中。

解决方法:确认是否继续使用此对象。

  • 是:可以选择忽略对象。

  • 否:修改DDL订正表的结构,然后重新启动任务。

报错:This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable).

可能原因:目标库开启了Binlog,对于开启Binlog的实例,创建的函数有条件限制。

解决方法:确认是否继续使用此对象。

  • 是:手动执行set log_bin_trust_function_creators = 1后,再执行修改对象的DDL。

  • 否:可以选择忽略对象。

目标库为PostgreSQL

报错:relation "XXX" does not exist

可能原因:报错信息中的对象依赖的对象不存在。

解决方法:

  • 方法一:重新配置任务,将依赖的对象加入待同步或迁移的对象中。

  • 方法二:手动将依赖的对象迁移到目标库,再重新启动任务。

报错:type XXX does not exist

可能原因:待同步或迁移对象依赖的自定义类型不存在。

解决方法:

  • 方法一:重新配置任务,将依赖的自定义类型加入待同步或迁移的对象中。

  • 方法二:手动在目标库创建依赖的自定义类型或插件,然后重新启动任务。

报错:permission denied to create extension "XXXX" Hint: Must be superuser or user with all of rds_superuser to create this extension.

可能原因:DTS任务使用的数据库账号权限不足,无法执行报错信息中的插件。

解决方法:

  • 方法一:使用权限足够的数据库账号,创建DTS任务。

  • 方法二:手动在目标库创建报错信息中的插件,然后重新启动任务。

目标库为云原生数据仓库 AnalyticDB MySQL 版

报错:XXXX=> db not found. use `show databases` to see all dbs.

可能原因:目标库中不存在报错信息中的数据库。

解决方法:手动在目标库创建报错信息中的数据库,然后重新启动任务。

目标库为SQL Server

报错:列名 'XXX' 无效

可能原因:待同步或迁移的表结构发生变化,删除了部分列,导致VIEW、PROC或FUNC不可用。

解决方法:

  • 方法一:可以选择忽略对象。

  • 方法二:请根据报错信息修正DDL语句,然后重新启动任务。

报错:The server principal "XXX" is not able to access the database "XXX" under the current security context.

可能原因:DTS任务使用的数据库账号权限不足。

解决方法:

  • 方法一:使用权限足够的数据库账号,创建DTS任务。

  • 方法二:给报错信息中的账号,授予足够的权限。

报错:VIEW、PROC或FUNC中的DDL语句报错

可能原因:依赖的对象没有迁移或者已经不存在。

解决方法:

  • 方法一:可以选择忽略对象。

  • 方法二:请根据报错信息修正DDL语句,然后重新启动任务。