如何解決關於表結構的報錯?
本文介紹如何解決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 for 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語句,然後重新啟動任務。