診斷 Oracle 到 PostgreSQL 適用的 Cloud SQL 遷移作業中的問題

本頁面列出以下項目的已知錯誤和建議疑難排解步驟:

遷移工作錯誤

遷移工作程序可能會在執行期間發生錯誤。

  • 部分錯誤 (例如來源資料庫的密碼錯誤) 是可以復原的。這些錯誤修正後,遷移工作會自動恢復。
  • 有些錯誤無法復原,例如資料複製錯誤。必須在修正這些錯誤後重新啟動遷移工作。

發生錯誤時,遷移工作狀態會變更為 Failed,子狀態則會反映失敗前的最後狀態。如要排解錯誤,請前往失敗的遷移工作查看錯誤,然後按照錯誤訊息中列出的步驟操作。如要查看錯誤的詳細資料,請使用遷移工作的連結前往 Cloud Monitoring。系統會將記錄檔篩選為特定遷移工作。

下表列出一些問題範例和解決方法:

問題 可能原因 建議做法
錯誤訊息:Database Migration Service can't set up a tunnel to be connected to the bastion host 資料庫遷移服務無法存取防禦主機,或是防禦主機不接受連線。 請在 來源連線設定檔 SSH 通道伺服器設定中確認轉送安全殼層通道設定,然後再試一次。
錯誤訊息:Database Migration Service can't connect to the databaseDatabase Migration Service private connectivity error, cannot connect to the database 資料庫移轉服務無法與來源 Oracle 資料庫建立連線。

確認您可以從專案存取來源資料庫。 檢查與 來源連線設定方法相關的設定。

如果包含特定 Oracle 錯誤代碼 (例如 ORA-12170: TNS:Connect timeout occurred),請參閱 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 資料庫移轉服務只會讀取已關閉的封存記錄,而來源資料庫中沒有任何記錄。
  1. 在來源資料庫中執行下列指令,關閉目前的記錄檔:ALTER SYSTEM SWITCH LOGFILE
  2. 請再次嘗試尋找記錄。

如果資料庫沒有任何有效的寫入作業,您可能需要執行至少一個 INSERT 作業,才能觸發記錄建立作業。

錯誤訊息:We're missing the necessary permissions to read from the source 來源資料庫中的遷移使用者帳戶沒有必要的權限。

資料庫遷移服務會以您在來源連線設定檔中設定的使用者帳戶,連線至來源。該帳戶需要特定的權限組合 (例如 SELECT ANY TABLE),才能讀取來源資料庫中的資料。

請確認遷移使用者帳戶具備必要權限。詳情請參閱「 設定 Oracle 來源資料庫」。

錯誤訊息:Unable to connect to the destination database 連線至目的地資料庫時發生問題。 確認您可以從專案存取目的地資料庫。 檢查與 目的地連線設定方法相關的設定。
錯誤訊息:The following tables don't exist in the destination database: {table_names} 您嘗試遷移的列出表格不存在於目的地資料庫中。 您轉換來源結構定義時,資料庫遷移服務會建立必要的資料表和定義。
錯誤訊息:password authentication failed for user {username} 目的地資料庫的使用者名稱或密碼設定錯誤。 請確認目的地 PostgreSQL 連線設定檔已正確設定,並使用正確的使用者名稱和密碼。
錯誤訊息:The following tables in the destination database don't have primary keys: {table_names} 錯誤訊息中列出的資料表存在於目的地資料庫中,但缺少主鍵。

資料庫移轉服務轉換工作區會在您轉換結構定義時,自動為沒有主鍵的資料表新增主鍵。

如果您使用舊版轉換工作區,則需要在目的地中手動建立主鍵。詳情請參閱「 舊版轉換工作區」。

警告:The following tables have foreign keys: {table_names} 錯誤訊息中列出的資料表存在於目的地資料庫中,但有外部索引鍵。

資料庫移轉服務不會以交易方式複製資料,因此資料表可能會以不規則的順序遷移。如果有外部關鍵字,且使用外部關鍵字的子項資料表在其父項資料表之前遷移,可能會發生複製錯誤。

為避免發生這類資料完整性問題,請使用遷移使用者的 REPLICATION 選項略過外鍵。詳情請參閱「 外鍵和觸發事件的考量事項」。

錯誤訊息:Unable to resume replication as log position is lost 如果複製程序暫停的時間過長,導致記錄位置遺失,就可能發生這個錯誤。 遷移工作不應暫停超過 (或接近) 記錄保留期間。如果記錄檔位置遺失,您就必須重新建立遷移工作。
錯誤訊息:ORA-00942: table or view does not exist 這項錯誤可能會因為 Oracle 伺服器的快取而發生。 重新建立資料庫使用者,以修正快取問題。
遷移工作仍處於完整傾印階段,不會進到變更資料擷取 (CDC) 階段。 資料庫移轉服務仍在為部分資料表執行完整傾印作業,或是一或多個資料表因錯誤而無法完成完整傾印作業。
  • 檢查遷移工作錯誤,並修正適用於資料表的錯誤,或從工作中移除相關聯的資料表。
  • 查看資料庫移轉服務記錄,瞭解是否有進行中的完整傾印活動,然後等待該活動完成。

連線問題

本節列出並說明可能的網路連線問題疑難排解步驟。

無法連線至目的地資料庫:EOF

執行連線測試時會傳回 [DATABASE] unable to connect to the destination database: EOF 錯誤訊息。

可能原因:服務附件設定有誤。

建議嘗試做法:請確認 服務附件 Terraform 設定檔中的 enable_proxy_protocol 已設為 false。Proxy 通訊協定僅支援 NGINX 和 Apache 等 HTTP 伺服器。

使用 gcloud 建立 Private Service Connect 設定時,Proxy 通訊協定預設為停用。

連線逾時,連線遭拒

執行連線測試失敗或逾時。這很可能是因為 Private Service Connect 設定中的路由設定錯誤。導致這個問題的原因有很多。

可能原因:缺少防火牆規則,無法讓 Private Service Connect NAT CIDR 範圍存取防禦主機所在的 Private Service Connect 子網路,特別是防禦主機 VM nic0 介面。

建議嘗試:請確認貴機構的政策不會限制內部防火牆規則,例如在 為未啟用 PSC 的 Cloud SQL 執行個體設定目的地私人 IP 連線的範例 Terraform 指令碼中定義的 psc_sp_in_fw 防火牆規則。

可能的原因:Proxy 服務已關閉。提供的通訊埠上沒有監聽器,因此連線會中斷。

可嘗試的做法:您可以嘗試建立與堡壘 VM 的 SSH 連線,並使用下列指令搜尋 Proxy:

  • netstat -tunalp | grep PORT

分析指令的回應:

  • 如果收到空白回應,表示 Proxy 服務已關閉。請嘗試執行下列指令:

    sudo su; cd /,然後執行 sudo dpkg -s dante-server 來檢查 Dante 伺服器是否已安裝:

    • 如果已安裝 Proxy,您會收到以下訊息:

      Status: install ok installed

    • 如果未安裝 Proxy,問題可能出在路由器。新增路由器,然後執行 apt-get install dante-server,檢查是否可以下載 Proxy。

  • 如果 Proxy 正在執行並在提供的通訊埠上聽取,請嘗試執行下列操作,開啟與 Proxy 的連線:

    1. 安裝 PostgreSQL 用戶端:

      sudo apt-get install postgresql-client

    2. 連線至 PostgreSQL 資料庫:

      psql -h 127.0.0.1 -p PORT -U DBUSERNAME -W (系統會提示您輸入密碼)。

      更改下列內容:

      • PORT:資料庫通訊埠號碼。
      • DBUSERNAME:用於連線至 PostgreSQL 資料庫的使用者名稱。
    3. 安裝 Telnet 用戶端:

      sudo apt-get install telnet

    4. 連線至 Telnet 用戶端:

      telnet 127.0.0.1 PORT

      PORT 替換為資料庫的連接埠號碼。

    視指令結果而定:

    • 如果指令無法開啟連線,請嘗試查看 Proxy 記錄,找出根本原因。原因可能因 Cloud SQL 執行個體的設定而異。

    • 如果使用 telnet 開啟連線,但在用戶端中掛起,問題可能出在防禦主機 IP 位址路由。在 VM 的終端機中輸入 ip route。請確認是否可以找到路由規則,以便使用次要 nic (nic1,即 DB_SUBNETWORK_GATEWAY IP 位址) 將連線路由至 Cloud SQL 執行個體的私人 IP 位址。

可能原因:服務附件不接受資料庫移轉服務的端點連線。服務附件會保留已接受的專案清單,而資料庫遷移服務專案並未列入清單。

可嘗試的做法:如要解決這個問題,請嘗試下列任一做法:

排解 Oracle SCAN 錯誤

本節說明使用單一客戶端存取名稱 (SCAN) 功能,從 Oracle Real Application Clusters (RAC) 來源遷移時可能遇到的問題。

無法建立 Oracle SCAN 資料庫的連線

執行連線測試失敗或逾時。

可能原因:您可能嘗試直接連線至 Oracle SCAN 來源資料庫。資料庫移轉服務不支援在 Oracle RAC 環境中使用 SCAN 功能,直接連線至資料庫。

可嘗試的做法:如要解決這個問題,請嘗試下列任一做法:

  • 直接連線至其中一個節點。

  • 使用 Oracle 連線管理器

  • 使用 HAProxy 等反向 Proxy 解決方案建立私人連線設定。