全部產品
Search
文件中心

Data Transmission Service:遷移時源庫為PolarDB PostgreSQL版(相容Oracle)的注意事項及限制

更新時間:Feb 04, 2026

如果遷移的源叢集為PolarDB PostgreSQL版(相容Oracle),您需要在配置具體的遷移任務前,參考本文的注意事項及限制,以保障資料移轉任務的正常運行。

源庫為PolarDB PostgreSQL版(相容Oracle)的遷移方案概覽

根據如下遷移方案,查看遷移任務的注意事項及限制:

PolarDB PostgreSQL版(相容Oracle)間遷移

具體注意事項及限制如下:

類型

說明

源庫限制

  • 頻寬要求:源庫所屬的伺服器需具備足夠出口頻寬,否則將影響資料移轉速率。

  • 待遷移的表需具備主鍵或唯一約束,且欄位具有唯一性,否則可能會導致目標資料庫中出現重複資料。

  • 如遷移對象為表層級,且需進行編輯(如表列名映射),則單次遷移任務僅支援遷移至多1000張表。當超出數量限制,任務提交後會顯示請求報錯,此時建議您拆分待遷移的表,分批配置多個任務,或者配置整庫的遷移任務。

  • 如需進行增量遷移,WAL日誌:

    • 需開啟。

    • 如為增量遷移任務,DTS要求來源資料庫的WAL日誌儲存24小時以上,如為全量遷移和增量遷移任務,DTS要求來源資料庫的WAL日誌至少保留7天以上(您可在全量遷移完成後將WAL日誌儲存時間設定為24小時以上),否則DTS可能因無法擷取WAL日誌而導致任務失敗,極端情況下甚至可能會導致資料不一致或丟失。由於您所設定的WAL日誌儲存時間低於DTS要求的時間進而導致的問題,不在DTS的SLA保障範圍內。

  • 源庫的操作限制:

    • 在庫表結構遷移和全量遷移階段,請勿執行庫或表結構變更的DDL操作,否則資料移轉任務會失敗。

    • 如僅執行全量資料移轉,請勿向源執行個體中寫入新的資料,否則會導致源和目標資料不一致。為即時保持資料一致性,建議選擇結構遷移、全量資料移轉和增量資料移轉。

    • 為保障遷移任務的正常進行,避免主備切換導致的邏輯訂閱中斷,需要PolarDB PostgreSQL版(相容Oracle)支援並開啟邏輯複製槽容錯移轉(Logical Replication Slot Failover)

      說明

      若源PolarDB PostgreSQL版(相容Oracle)叢集不支援邏輯複製槽容錯移轉功能(例如叢集的資料庫引擎Oracle文法相容 2.0時),當源庫觸發HA切換機制時,可能會導致遷移執行個體運行失敗且無法恢複。

    • 由於源庫的邏輯訂閱本身存在使用限制,在包含增量任務的遷移執行個體運行期間,若源庫待遷移的單條資料在增量變更後超過256 MB,則可能會導致遷移執行個體運行失敗且無法恢複,您需要重新設定遷移執行個體。

  • 若源庫有長事務,且執行個體包含增量遷移任務,則可能會導致源庫長事務提交前的預寫記錄檔WAL(Write-Ahead Logging)無法清理而堆積,從而造成源庫磁碟空間不足。

其他限制

  • 單個資料移轉任務只能遷移一個資料庫,如需遷移多個資料庫,您需要為每個資料庫配置資料移轉任務。

  • 不支援遷移TimescaleDB外掛程式表、包含跨Schema繼承關係的表與包含基於運算式的唯一索引的表。

  • 通過安裝外掛程式建立的Schema不支援遷移。在配置任務時,您將無法在控制台擷取相關資訊。

  • 如果待遷移的表中包含SERIAL類型的欄位,源庫會自動為該欄位建立一個Sequence。因此在配置源庫對象時,若遷移類型選中了庫表結構遷移,則建議您同時選中Sequence或整Schema遷移,否則可能會導致遷移執行個體運行失敗。

  • 若遷移執行個體包含增量資料移轉任務,在如下兩個情境中,您需要在源庫待遷移的表寫入資料前,對其執行ALTER TABLE schema.table REPLICA IDENTITY FULL;命令,以保障該表資料移轉的一致性。執行該命令期間,建議您不要有鎖表操作,否則會導致表鎖死。若在預檢查中跳過了相關檢查,DTS會在該執行個體初始化時自動化執行該命令。

    • 執行個體初次運行時。

    • 遷移對象的選擇粒度為Schema,且在待遷移的Schema中建立了新的表或使用RENAME命令重建了待遷移的表時。

    說明
    • 命令中的schematable需要替換為待遷移資料所屬的Schema名和表名。

    • 建議您在業務低峰期進行操作。

  • DTS會在源庫中建立以下暫存資料表,用於擷取增量資料的DDL、增量表的結構、心跳資訊等。在遷移期間,請勿刪除源庫中的暫存資料表,否則會導致DTS任務異常。暫存資料表會在DTS執行個體釋放後自動刪除。

    public.dts_pg_classpublic.dts_pg_attributepublic.dts_pg_typepublic.dts_pg_enumpublic.dts_postgres_heartbeatpublic.dts_ddl_commandpublic.dts_args_sessionpublic.aliyun_dts_instance

  • 為保障增量資料移轉延遲時間展示的準確性,DTS會在源庫中新增一個名為dts_postgres_heartbeat的心跳錶。

  • 增量資料移轉期間,DTS會在源庫建立首碼為dts_sync_的replication slot用於複製資料。通過該replication slot,DTS可以擷取源庫15分鐘內的增量日誌。當資料移轉失敗或釋放遷移執行個體時,DTS會嘗試主動清理該replication slot。

    說明
    • 如果您在資料移轉期間修改了任務使用的源庫帳號密碼,或者刪除了源庫中DTS的IP白名單等,則會導致該replication slot無法自動清理。此時,您需要在源庫手動清理replication slot,以避免其持續累積佔用磁碟空間導致源庫不可用。

    • 如果源庫發生了主備切換,則您需要登入備庫進行手動清理。

  • 執行資料移轉前需評估源庫和目標庫的效能,同時建議業務低峰期執行資料移轉。否則全量資料移轉時DTS佔用源和目標庫一定讀寫資源,可能會導致資料庫的負載上升。

  • 由於全量資料移轉會並發執行INSERT操作,導致目標資料庫的表產生片段,因此全量遷移完成後目標資料庫的表格儲存體空間會比源執行個體的表格儲存體空間大。

  • 請確認DTS對資料類型為FLOAT或DOUBLE的列的遷移精度是否符合業務預期。DTS會通過ROUND(COLUMN,PRECISION)來讀取這兩類列的值。如果沒有明確定義其精度,DTS對FLOAT的遷移精度為38位,對DOUBLE的遷移精度為308位。

  • DTS會嘗試恢複七天之內遷移失敗任務。因此業務切換至目標執行個體前,請務必結束或釋放該任務,或者將DTS訪問目標執行個體帳號的寫入權限用revoke命令回收掉。避免該任務被自動回復後,源端資料覆蓋目標執行個體的資料。

  • DTS的校正對象為資料內容,暫不支援Sequence等中繼資料的校正,您需要自行校正。

  • 由於業務切換到目標端後,新寫入的Sequence不會按照源庫的Sequence最大值作為初始值去遞增,您需要在業務切換前,更新目標庫的Sequence值。更多資訊,請參見更新目標庫的Sequence值

  • 若為全量遷移或增量遷移任務,且來源資料庫中要遷移的表包含外鍵、觸發器、事件觸發程序,如果目標庫帳號為高許可權帳號或者super許可權帳號,全量或增量遷移時DTS會以Session層級暫時將session_replication_role的參數值設定為replica;如果目標庫帳號沒有該許可權,您需要手動將目標資料庫中session_replication_role的參數值設定為replica。在此期間(全量遷移或增量遷移過程中session_replication_role的參數值為replica),若源庫存在串聯更新、刪除操作,則可能會導致資料不一致。在DTS遷移任務釋放後,您可以將session_replication_role的參數值改回origin。

  • 若執行個體運行失敗,DTS技術支援人員將在8小時內嘗試恢複該執行個體。在恢複失敗執行個體的過程中,可能會對該執行個體進行重啟、調整參數等操作。

    說明

    在調整參數時,僅會修改DTS執行個體的參數,不會對資料庫中的參數進行修改。可能修改的參數,包括但不限於修改執行個體參數中的參數。

  • 在遷移分區表時,需將分區子表與父表同時納入同步對象,否則可能導致該分區表的資料出現不一致情況。

    說明

    PolarDB PostgreSQL版(相容Oracle)分區表的父表不直接儲存資料,所有資料實際儲存於分區子表中。同步任務需同時包含分區父表及其所有分區子表,否則可能會遺漏同步子表的資料,從而導致目標端與源端的資料不一致。

PolarDB PostgreSQL版(相容Oracle)遷移至自建Oracle

具體注意事項及限制如下:

類型

說明

源庫限制

  • 頻寬要求:源庫所屬的伺服器需具備足夠出口頻寬,否則將影響資料移轉速率。

  • 待遷移的表需具備主鍵或唯一約束,且欄位具有唯一性,否則可能會導致目標資料庫中出現重複資料。

  • 如遷移對象為表層級,且需進行編輯(如表列名映射),則單次遷移任務僅支援遷移至多1000張表。當超出數量限制,任務提交後會顯示請求報錯,此時建議您拆分待遷移的表,分批配置多個任務,或者配置整庫的遷移任務。

  • 如需進行增量遷移,WAL日誌:

    • 需開啟。

    • 如為增量遷移任務,DTS要求來源資料庫的WAL日誌儲存24小時以上,如為全量遷移和增量遷移任務,DTS要求來源資料庫的WAL日誌至少保留7天以上(您可在全量遷移完成後將WAL日誌儲存時間設定為24小時以上),否則DTS可能因無法擷取WAL日誌而導致任務失敗,極端情況下甚至可能會導致資料不一致或丟失。由於您所設定的WAL日誌儲存時間低於DTS要求的時間進而導致的問題,不在DTS的SLA保障範圍內。

  • 源庫的操作限制:

    • 在全量遷移階段,請勿執行庫或表結構變更的DDL操作,否則資料移轉任務會失敗。

    • 如僅執行全量資料移轉,請勿向源執行個體中寫入新的資料,否則會導致源和目標資料不一致。為即時保持資料一致性,建議選擇全量資料移轉和增量資料移轉。

    • 為保障遷移任務的正常進行,避免主備切換導致的邏輯訂閱中斷,需要PolarDB PostgreSQL版(相容Oracle)支援並開啟邏輯複製槽容錯移轉(Logical Replication Slot Failover)

      說明

      若源PolarDB PostgreSQL版(相容Oracle)叢集不支援邏輯複製槽容錯移轉功能(例如叢集的資料庫引擎Oracle文法相容 2.0時),當源庫觸發HA切換機制時,可能會導致遷移執行個體運行失敗且無法恢複。

    • 由於源庫的邏輯訂閱本身存在使用限制,在包含增量任務的遷移執行個體運行期間,若源庫待遷移的單條資料在增量變更後超過256 MB,則可能會導致遷移執行個體運行失敗且無法恢複,您需要重新設定遷移執行個體。

  • 若源庫有長事務,且執行個體包含增量遷移任務,則可能會導致源庫長事務提交前的預寫記錄檔WAL(Write-Ahead Logging)無法清理而堆積,從而造成源庫磁碟空間不足。

其他限制

  • 暫不支援結構遷移,在配置遷移任務前,您需要在目標執行個體中建立對應的庫和表。

  • 單個資料移轉任務只能遷移一個資料庫,如需遷移多個資料庫,您需要為每個資料庫配置資料移轉任務。

  • 不支援遷移TimescaleDB外掛程式表、包含跨Schema繼承關係的表與包含基於運算式的唯一索引的表。

  • 通過安裝外掛程式建立的Schema不支援遷移。在配置任務時,您將無法在控制台擷取相關資訊。

  • 若遷移執行個體包含增量資料移轉任務,在如下兩個情境中,您需要在源庫待遷移的表寫入資料前,對其執行ALTER TABLE schema.table REPLICA IDENTITY FULL;命令,以保障該表資料移轉的一致性。執行該命令期間,建議您不要有鎖表操作,否則會導致表鎖死。若在預檢查中跳過了相關檢查,DTS會在該執行個體初始化時自動化執行該命令。

    • 執行個體初次運行時。

    • 遷移對象的選擇粒度為Schema,且在待遷移的Schema中建立了新的表或使用RENAME命令重建了待遷移的表時。

    說明
    • 命令中的schematable需要替換為待遷移資料所屬的Schema名和表名。

    • 建議您在業務低峰期進行操作。

  • DTS會在源庫中建立以下暫存資料表,用於擷取增量資料的DDL、增量表的結構、心跳資訊等。在遷移期間,請勿刪除源庫中的暫存資料表,否則會導致DTS任務異常。暫存資料表會在DTS執行個體釋放後自動刪除。

    public.dts_pg_classpublic.dts_pg_attributepublic.dts_pg_typepublic.dts_pg_enumpublic.dts_postgres_heartbeatpublic.dts_ddl_commandpublic.dts_args_sessionpublic.aliyun_dts_instance

  • 為保障增量資料移轉延遲時間展示的準確性,DTS會在源庫中新增一個名為dts_postgres_heartbeat的心跳錶。

  • 增量資料移轉期間,DTS會在源庫建立首碼為dts_sync_的replication slot用於複製資料。通過該replication slot,DTS可以擷取源庫15分鐘內的增量日誌。當資料移轉失敗或釋放遷移執行個體時,DTS會嘗試主動清理該replication slot。

    說明
    • 如果您在資料移轉期間修改了任務使用的源庫帳號密碼,或者刪除了源庫中DTS的IP白名單等,則會導致該replication slot無法自動清理。此時,您需要在源庫手動清理replication slot,以避免其持續累積佔用磁碟空間導致源庫不可用。

    • 如果源庫發生了主備切換,則您需要登入備庫進行手動清理。

  • 由於全量資料移轉會並發執行INSERT操作,導致目標資料庫的表產生片段,因此全量遷移完成後目標資料庫的表格儲存體空間會比源執行個體的表格儲存體空間大。

  • 請確認DTS對資料類型為FLOAT或DOUBLE的列的遷移精度是否符合業務預期。DTS會通過ROUND(COLUMN,PRECISION)來讀取這兩類列的值。如果沒有明確定義其精度,DTS對FLOAT的遷移精度為38位,對DOUBLE的遷移精度為308位。

  • DTS會嘗試恢複七天之內遷移失敗任務。因此業務切換至目標執行個體前,請務必結束或釋放該任務,或者將DTS訪問目標執行個體帳號的寫入權限用revoke命令回收掉。避免該任務被自動回復後,源端資料覆蓋目標執行個體的資料。

  • 若執行個體運行失敗,DTS技術支援人員將在8小時內嘗試恢複該執行個體。在恢複失敗執行個體的過程中,可能會對該執行個體進行重啟、調整參數等操作。

    說明

    在調整參數時,僅會修改DTS執行個體的參數,不會對資料庫中的參數進行修改。可能修改的參數,包括但不限於修改執行個體參數中的參數。

  • 在遷移分區表時,需將分區子表與父表同時納入同步對象,否則可能導致該分區表的資料出現不一致情況。

    說明

    PolarDB PostgreSQL版(相容Oracle)分區表的父表不直接儲存資料,所有資料實際儲存於分區子表中。同步任務需同時包含分區父表及其所有分區子表,否則可能會遺漏同步子表的資料,從而導致目標端與源端的資料不一致。

特殊情況

如自建Oracle為RAC結構,且需接入阿里雲VPC,為保證DTS任務成功運行,您需要將Oracle RAC的SCAN IP和每個節點的VIP均接入至阿里雲VPC,並且配置路由。具體步驟,請參見本地IDC接入至阿里雲方案概覽通過VPN網關實現本地IDC與DTS雲端服務互連

重要

在DTS控制台上配置源Oracle資料庫資訊時,在資料庫地址或者網域名稱或IP地址只需輸入Oracle RAC的SCAN IP。