如何解決關於表結構的報錯?

更新時間:
Copy as MD

本文介紹如何解決DTS執行個體運行過程中,關於表結構報錯的問題。

目標庫為MySQL

報錯:Specified key was too long; max key length is 767 bytes

可能原因:MySQLInnoDB引擎支援的表索引欄位最大長度為767位元組。

解決方案:對於5.65.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 for MySQL

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

可能原因:目標庫中不存在報錯資訊中的資料庫。

解決方案:手動在目標庫建立報錯資訊中的資料庫,然後重新啟動任務。

目標庫為SQL Server

報錯:列名 'XXX' 無效

可能原因:待同步或遷移的表結構發生變化,刪除了部分列,導致VIEW、PROCFUNC不可用。

解決方案:

  • 方法一:可以選擇忽略對象。

  • 方法二:請根據報錯資訊修正DDL語句,然後重新啟動任務。

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

可能原因:DTS任務使用的資料庫帳號許可權不足。

解決方案:

  • 方法一:使用許可權足夠的資料庫帳號,建立DTS任務。

  • 方法二:給報錯資訊中的帳號,授予足夠的許可權。

報錯:VIEW、PROCFUNC中的DDL語句報錯

可能原因:依賴的對象沒有遷移或者已經不存在。

解決方案:

  • 方法一:可以選擇忽略對象。

  • 方法二:請根據報錯資訊修正DDL語句,然後重新啟動任務。