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

本頁列出已知錯誤和建議的疑難排解步驟,適用於:

遷移工作錯誤

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

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

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

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

問題 可能原因 推薦主題
錯誤訊息:Database Migration Service can't set up a tunnel to be connected to the bastion host。 資料庫遷移服務無法存取堡壘主機,或堡壘主機不接受連線。 請驗證 來源連線設定檔和 SSH 通道伺服器設定中的轉送 SSH 通道設定,然後再試一次。
錯誤訊息:Database Migration Service can't connect to the database 或 Database 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 伺服器快取所致。 重新建立資料庫使用者,修正快取問題。
遷移工作會停留在完整 dump 階段,不會進入變更資料擷取 (CDC) 階段。 資料庫遷移服務仍在對部分資料表執行完整轉儲作業,或是一或多個資料表因錯誤而無法完成完整轉儲作業。
  • 查看遷移工作錯誤,並修正適用於資料表的錯誤,或從工作中移除相關聯的資料表。
  • 請查看資料庫遷移服務記錄,瞭解是否有進行中的完整轉儲活動,並等待活動完成。

連線問題

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

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

執行 Connectivity Tests 時,傳回 [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 介面。

建議做法:確認組織政策未限制內部防火牆規則,例如 Terraform 指令碼範例中定義的 psc_sp_in_fw 防火牆規則,用於 為未啟用 PSC 的 AlloyDB for PostgreSQL 執行個體設定目的地私人 IP 連線。

可能原因: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 正在執行並監聽提供的通訊埠,請嘗試開啟連線,步驟如下:

    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 記錄,找出根本原因。根本原因可能因 AlloyDB for PostgreSQL 執行個體設定而異。

    • 如果連線是使用 telnet 開啟,但在用戶端中停止運作,問題可能出在堡壘 IP 位址轉送。在 VM 的終端機中輸入 ip route。看看能否找到一項路由規則,可使用次要 nic (nic1,即 DB_SUBNETWORK_GATEWAY IP 位址),將連線轉送至 AlloyDB for PostgreSQL 執行個體私人 IP 位址。

可能原因:服務連結不接受來自資料庫遷移服務的端點連線。服務連結會保留已接受的專案清單,而資料庫遷移服務專案不在清單中。

建議做法:如要解決問題,請嘗試下列任一做法:

排解 Oracle SCAN 錯誤

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

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

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

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

建議做法:如要解決問題,請嘗試下列任一做法:

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

  • 使用 Oracle Connection Manager。

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