本文為您介紹如何使用數據傳輸遷移 RDS PostgreSQL 實例的數據至 OceanBase 數據庫 Oracle 租戶。
如果數據遷移任務長期處于非活躍狀態(任務狀態為 失敗、已暫停 或 已完成),受增量日志保留時長等影響,任務可能無法恢復。數據傳輸將主動釋放處于非活躍狀態超過 3 天的數據遷移任務,以回收相關資源,建議您為任務配置告警并及時處理任務相關異常。
前提條件
數據傳輸已具備云資源訪問權限。詳情請參見 數據傳輸遷移角色授權。
已為源端 RDS PostgreSQL 實例創建專用于數據遷移任務的高權限賬號。詳情請參見 PostgreSQL 數據源。
已為目標端 OceanBase 數據庫 Oracle 租戶創建專用于數據遷移任務的數據庫用戶,并為其賦予了相關權限。詳情請參見 創建數據庫用戶。
如果您需要進行增量同步,請完成以下前置操作:
增量同步時,數據傳輸不支持 DDL 的自動同步。如果待遷移的表需要進行 DDL,請先手動在目標端執行該 DDL 語句,再在源端 RDS PostgreSQL 實例中執行。
為確保執行 DDL 語句后的增量 DML 能夠正確解析,您需要創建對應的觸發器和記錄 DDL 語句的表。詳情請參見 創建觸發器。
勾選增量同步后,
wal_level
參數必須設置為 logical。詳情請參見 修改 RDS PostgreSQL 實例的日志級別。
使用限制
源端數據庫的操作限制
請勿在結構遷移和全量遷移階段執行庫或表結構變更的 DDL 操作,否則可能造成數據遷移任務中斷。
目前支持的 RDS PostgreSQL 實例版本為 V11.x 和 V12.x。
數據傳輸不支持遷移 RDS PostgreSQL 實例的分區表、unlogged 表和臨時表。
目標端是數據庫的情況下,數據傳輸不支持目標端存在觸發器(Trigger)。如果存在觸發器,可能導致數據遷移失敗。
數據傳輸僅支持遷移庫名、表名和列名為 ASCII 碼且不包含特殊字符(包括換行、空格,以及 .|"'`()=;/&\)的對象。
增量同步僅支持從主庫進行同步。
注意事項
勾選增量同步后,表級復制標識
REPLICA IDENTITY
的要求如下:如果您通過 指定對象 入口選擇遷移對象,則指定的表需要具備主鍵,或者表級復制標識
REPLICA IDENTITY
為 FULL,否則將導致業務數據的更新、刪除操作失敗。如果您通過 匹配規則 入口選擇遷移對象,RDS PostgreSQL 實例需要訂閱已選數據庫的所有表 (包括已選表、未選表和新增表),且所有表均需要包含主鍵,或者表級復制標識
REPLICA IDENTITY
為 FULL,否則將導致業務數據的更新、刪除操作失敗。
修改表級復制標識
REPLICA IDENTITY
為 FULL 的命令如下。ALTER TABLE table_name REPLICA IDENTITY FULL;
RDS PostgreSQL 實例的數據遷移(結構遷移或增量 DDL)至 OceanBase 數據庫 Oracle 租戶時,表名、字段名將根據數據傳輸的默認策略轉為大寫。例如,源端的表名為 a,則目標端默認轉為 A。您可以通過 a、A 或 “A” 的方式使用表名、字段名,但不支持以 “a” 的方式使用表名、字段名。
RDS PostgreSQL 實例的增量組件會自動創建 publication 和 slot,但需要您對 RDS PostgreSQL 實例日志文件的磁盤使用情況進行監控。數據傳輸默認每 10 分鐘通知更新一次 slot 的
confirmed_flush_lsn
為 10 分鐘以前的 lsn,因此每個增量組件至少會保存 10 分鐘以上的 RDS PostgreSQL 實例日志文件。說明如果您需要修改通知的間隔周期,或修改通知 RDS PostgreSQL 實例可以清理多久之前的日志文件,請聯系技術支持人員。
數據遷移過程中,如果因為存在 slot 而無法清理 RDS PostgreSQL 實例的日志文件,則需要徹底刪除數據遷移任務后,再清理 RDS PostgreSQL 實例的日志。RDS PostgreSQL 實例的日志文件是否能被回收,取決于所有 slot 中最早的
slot restart_lsn
是否在日志文件范圍內。如果表沒有主鍵或所有列具備 Not Null 的唯一鍵,則遷移數據至目標端時,可能出現重復數據。
在反向增量場景中,對于 UPDATE、DELETE 采用全列匹配的方式遷移數據,可能出現以下問題。
可能會出現性能問題。
由于缺少主鍵索引,每次的 UPDATE 和 DELETE 操作都會在全表掃描之后進行。
可能會出現數據一致性問題。
由于 UPDATE 和 DELETE 操作在 RDS PostgreSQL 中不支持 LIMIT 語法,當全列匹配時匹配到多條數據,可能會出現 UPDATE 或 DELETE 數據比目標端多的情況。例如,無主鍵表 t1 中存在 c1 和 c2 兩列,在源端有兩條 c1=1 和 c2=2 的數據。當源端刪除其中一條數據時,由于匹配條件是 where c1 = 1 and c2 = 2,會導致目標端的兩條 c1=1 和 c2=2 的數據均被刪除,導致源端和目標端的數據不一致。
對于 tsvector 類型字段的遷移,如果涉及反向增量至 RDS PostgreSQL 實例,在 OceanBase 數據庫寫入對應字段的數據,需要符合 tsvector 的格式。例如:
OceanBase 數據庫寫入 'a b c' 至 RDS PostgreSQL 實例會轉換為 "'a' 'b' 'c'"。
OceanBase 數據庫寫入 'a:1 b:2 c:3' 至 RDS PostgreSQL 實例會轉換為 "'a':1 'b':2 'c':3"。
如果 OceanBase 數據庫寫入非 tsvector 格式的數據 "'a':cccc",則 RDS PostgreSQL 實例將寫入異常導致失敗。更多 tsvector 格式說明請參見 PostgreSQL 官方文檔。
如果源端字符集為 UTF-8,建議目標端使用兼容源端的字符集(例如,UTF-8、UTF-16 等),避免因字符集不兼容導致目標端出現亂碼等問題。
請確認數據傳輸對 DECIMAL、FLOAT 或 DOUBLE 等列類型的遷移精度是否符合預期。如果目標端字段類型的精度小于源端字段類型的精度,則可能發生截斷現象,導致源端和目標端的數據不一致。
如果您變更目標端的唯一索引,需要重啟數據遷移任務,否則可能存在數據不一致的問題。
節點之間的時鐘不同步,或者電腦終端和服務器之間的時鐘不同步,均可能導致延遲時間(增量同步/反向增量)不準確。
例如,如果時鐘早于標準時間,可能導致延遲時間為負數。如果時鐘晚于標準時間,可能導致延遲。
庫表匯聚場景下:
建議您使用匹配規則的方式映射源端和目標端的關系。
建議您在目標端自行創建表結構。如果使用數據傳輸創建,請在結構遷移步驟跳過部分失敗對象。
如果在創建數據遷移任務時,您僅配置了 增量同步,數據傳輸將要求源端數據庫的本地增量日志保存 48 小時以上。
如果在創建數據遷移任務時,您配置了 全量遷移+增量同步,數據傳輸要求源端數據庫的本地增量日志至少保留 7 天以上。否則數據傳輸可能因無法獲取增量日志而導致數據遷移任務失敗,甚至導致源端和目標端數據不一致。
如果源端或目標端存在僅大小寫不同的表對象,可能會因為源端或目標端大小寫不敏感導致數據遷移的結果不符合預期。
支持的源端和目標端實例類型
下表中,OceanBase 數據庫 Oracle 租戶簡稱為 OB_Oracle。
源端 | 目標端 |
PostgreSQL(RDS 實例) | OB_Oracle(OceanBase 集群實例) |
PostgreSQL(RDS 實例) | OB_Oracle(VPC 內自建數據庫) |
數據類型映射
RDS PostgreSQL 實例 | OceanBase 數據庫 Oracle 租戶 |
int | NUMBER(10) |
smallint | NUMBER(5) |
bigint | NUMBER(20) |
decimal | NUMBER(p,s) |
numeric | NUMBER(p,s) |
real | BINARY_FLOAT |
double precision | BINARY_DOUBLE |
smallserial | NUMBER(5) |
serial | NUMBER(10) |
bigserial | NUMBER(20) |
char | CHAR(n) 說明
|
varchar | VARCHAR2(n) |
text | CLOB |
timestamp | TIMESTAMP(p) |
timestamp with time zone | TIMESTAMP(p) WITH TIME ZONE |
time | DATE |
time with time zone | TIMESTAMP(p) WITH TIME ZONE |
boolean | NUMBER(1) |
bytea | BLOB |
citext | CLOB |
tsvector | CLOB |
操作步驟
登錄 OceanBase 管理控制臺,購買數據遷移項目。
詳情請參見 購買數據遷移任務。
在 數據傳輸 > 數據遷移 頁面,單擊新購買的數據遷移項目后的 配置。
如果您需要引用已有的項目配置信息,可以單擊 引用配置。詳情請參見 引用數據遷移任務配置。
在 選擇源和目標 頁面,配置各項參數。
參數
描述
遷移任務名稱
建議使用中文、數字和字母的組合。名稱中不能包含空格,長度不能超過 64 個字符。
源端
如果您已新建 PostgreSQL 數據源,請從下拉列表中進行選擇。如果未新建,請單擊下拉列表中的 新建數據源,在右側對話框進行新建。參數詳情請參見 新建 PostgreSQL 數據源。
目標端
如果您已新建 OceanBase 數據庫 Oracle 租戶數據源,請從下拉列表中進行選擇。如果未新建,請單擊下拉列表中的 新建數據源,在右側對話框進行新建。參數詳情請參見 新建 OceanBase 數據源。
標簽(可選)
單擊文本框,在下拉列表中選擇目標標簽。您也可以單擊 管理標簽 進行新建、修改和刪除。詳情請參見 通過標簽管理數據遷移任務。
單擊 下一步。在 選擇遷移類型 頁面,選擇當前數據遷移任務的遷移類型。
遷移類型 包括 結構遷移、全量遷移、增量同步、全量校驗 和 反向增量。
遷移類型
描述
結構遷移
結構遷移任務開始后,數據傳輸會遷移源庫中的數據對象定義(表、索引、約束、注釋和視圖等)至目標端數據庫中,并自動過濾臨時表。
全量遷移
全量遷移任務開始后,數據傳輸會將源端庫表的存量數據遷移至目標端數據庫對應的表中。
增量同步
增量同步任務開始后,數據傳輸會同步源庫發生變化的數據(新增、修改或刪除)至目標端數據庫對應的表中。
增量同步 支持 DML 同步,您可以根據需求進行自定義配置。詳情請參見 自定義配置 DDL/DML。
全量校驗
在全量遷移完成、增量數據同步至目標端并與源端基本追平后,數據傳輸會自動發起一輪針對源端數據庫配置的數據表和目標表的全量數據校驗任務。
說明如果您選擇了 增量同步,且 DML 同步 選項中未選擇所有的 DML,則數據傳輸不支持本場景下的全量數據校驗。
數據傳輸僅支持對唯一鍵表(指具有主鍵或者非空唯一鍵的表)進行全量數據校驗。
反向增量
反向增量任務開始后,可以實時將業務切換后在目標端數據庫產生的變更數據回流至源端數據庫。
通常反向增量會復用增量同步的配置,您也可以根據實際需求進行自定義配置。
單擊 下一步。在 選擇遷移對象 頁面,選擇當前數據遷移任務的遷移對象。
您可以通過 指定對象 和 匹配規則 兩個入口選擇遷移對象。本文為您介紹通過 指定對象 方式選擇遷移對象的具體操作,配置匹配規則的詳情請參見 配置匹配規則。
重要待遷移的表名和其中的列名不能包含中文字符。
當數據庫的庫名或表名存在“$$”字符時,會影響數據遷移任務的創建。
在 選擇遷移對象 區域,選中 指定對象。
在 選擇遷移范圍 區域的 源端對象 列表選中需要遷移的對象。您可以選擇一個或多個庫的表、視圖作為遷移對象。
單擊 >,將其添加至 目標端對象 列表中。
數據傳輸支持通過文本導入對象,并支持對目標端對象進行重命名、設置行過濾、查看列信息,以及移除單個或全部遷移對象等操作。
說明通過 匹配規則 方式選擇遷移對象時,重命名能力由匹配規則語法覆蓋,操作處僅支持設置過濾條件。詳情請參見 配置匹配規則。
操作
步驟
導入對象
在選擇區域的右側列表中,單擊右上角的 導入對象。
在對話框中,單擊 確定。
重要導入會覆蓋之前的操作選擇,請謹慎操作。
在 導入遷移對象 對話框中,導入需要遷移的對象。
您可以通過導入 CSV 文件的方式進行庫表重命名、設置行過濾條件等操作。詳情請參見 下載和導入遷移對象配置。
單擊 檢驗合法性。
完成遷移對象導入后,請先檢驗合法性。目前暫不支持列字段映射。
通過檢驗后,單擊 確定。
重命名
數據傳輸支持重命名遷移對象的名稱,詳情請參見 數據庫庫表重命名。
設置
數據傳輸支持
WHERE
條件實現行過濾,詳情請參見 SQL 條件過濾數據。您還可以在 查看列 區域,查看遷移對象的列信息。
移除/全部移除
數據傳輸支持在數據映射時,對暫時選中到目標端的單個或多個對象進行移除操作。
移除單個遷移對象
在選擇區域的右側列表中,鼠標懸停至目標對象,單擊顯示的 移除,即可移除該遷移對象。
移除全部遷移對象
在選擇區域的右側列表中,單擊右上角的 全部移除。在對話框中,單擊 確定,即可移除全部遷移對象。
單擊 下一步。在 遷移選項 頁面,配置各項參數。
全量遷移
在 選擇遷移類型 頁面,選中 全量遷移,才會顯示下述參數。
參數
描述
讀取并發配置
該參數用于配置全量遷移階段從源端讀取數據的并發數,最大限制為 512 并發數過高可能會造成源端壓力過大,影響業務。
寫入并發配置
該參數用于配置全量遷移階段往目標端寫入數據的并發數,最大限制為 512。并發數過高可能會造成目標端壓力過大,影響業務。
全量遷移速率限制
您可以根據實際需求決定是否開啟全量遷移速率限制。如果開啟,請設置 RPS(全量遷移階段每秒最多可以遷移至目標端的數據行數的最大值限制)和 BPS(全量遷移階段每秒最多可以遷移至目標端的數據量的最大值限制)。
說明此處設置的 RPS 和 BPS 僅作為限速限流能力,全量遷移實際可以達到的性能受限于源端、目標端、實例規格配置等因素的影響。
目標端表對象存在記錄時處理策略
處理策略包括 忽略 和 停止遷移:
選擇 忽略:當目標端表對象存在數據時,如果原數據與寫入數據沖突,數據傳輸采用將沖突數據記錄日志,保留原數據不變的策略進行數據寫入。
重要選擇 忽略,全量校驗將使用 IN 模式拉取數據,無法校驗目標端存在源端沒有的數據的場景,并且校驗性能會有一定程度降級。
選擇默認值 停止遷移:當目標端表對象存在數據時,全量遷移會報錯不允許遷移,請處理好目標端數據后再繼續遷移。
重要如果出錯后單擊恢復,數據傳輸將忽略該配置選項,繼續遷移表數據,請謹慎操作。
是否允許索引后置
您可以設置是否允許全量數據遷移完成后再創建索引,索引后置功能能夠縮短全量遷移耗時。選擇索引后置的注意事項,請參見表格下方的說明。
重要在 選擇遷移類型 頁面同時選中 結構遷移 和 全量遷移,才會顯示該參數。
僅非唯一鍵索引支持后置創建。
執行索引時,如果目標端 OceanBase 數據庫遇到下述報錯,數據傳輸會進行忽略,默認索引創建成功,不會再重復創建。
OceanBase 數據庫 MySQL 租戶報錯
Duplicate key name
。OceanBase 數據庫 Oracle 租戶報錯
name is already used by an existing object
。
當目標端為 OceanBase 數據庫,并且此處選擇 允許 后,請進行下述配置:
單條索引 DDL 并發配置:并行度越高,資源消耗越大,遷移速度越快。
最大并發索引 DDL 數量配置:同一時刻,系統調用的后置索引 DDL 數量的最大值限制。
允許索引后置的情況下,建議您根據 OceanBase 數據庫的硬件條件和當前業務流量情況,通過黑屏客戶端工具調整以下業務租戶參數。
// 文件內存緩沖區限制 alter system set _temporary_file_io_area_size = '10' tenant = 'xxx'; // V4.x 關閉限流 alter system set sys_bkgd_net_percentage = 100;
增量同步
在 選擇遷移類型 頁面,選中 增量同步,才會顯示下述參數。
參數
描述
寫入并發配置
該參數用于配置增量同步階段往目標端寫入數據的并發數,最大限制為 512。并發數過高可能會造成目標端壓力過大,影響業務。
增量同步速率限制
您可以根據實際需求決定是否開啟增量同步速率限制。如果開啟,請設置 RPS(增量同步階段每秒最多可以同步至目標端的數據行數的最大值限制)和 BPS(增量同步階段每秒最多可以同步至目標端的數據量的最大值限制)。
說明此處設置的 RPS 和 BPS 僅作為限速限流能力,增量同步實際可以達到的性能受限于源端、目標端、實例規格配置等因素的影響。
增量同步起始位點
選擇遷移類型時未選擇 全量遷移,才顯示該參數。但源端為 PostgreSQL 時,不支持設置增量同步起始位點,起始位點默認為增量同步啟動時間。
反向增量
在 選擇遷移類型 頁面,選中 反向增量,才會顯示該區域的參數。反向增量的配置參數默認 復用增量同步配置。
您也可以取消復用增量同步配置,根據實際需求進行配置。
參數
描述
寫入并發配置
該參數用于配置反向增量階段往源端寫入數據的并發數,最大限制為 512。并發數過高可能會造成源端壓力過大,影響業務。
反向增量速率限制
您可以根據實際需求決定是否開啟反向增量速率限制。如果開啟,請設置 RPS(反向增量同步階段每秒最多可以同步至源端的數據行數的最大值限制)和 BPS(反向增量同步階段每秒最多可以同步至源端的數據量的最大值限制)。
說明此處設置的 RPS 和 BPS 僅作為限速限流能力,反向增量同步實際可以達到的性能受限于源端、目標端、實例規格配置等因素的影響。
增量同步起始位點
如果選擇遷移類型時已選擇 全量遷移,則不顯示該參數。
如果選擇遷移類型時未選擇 全量遷移,但選擇了 增量同步,則默認以正向切換(如有)為準,不支持修改。
高級選項
當目標端 OceanBase 數據庫 Oracle 租戶為 V4.3.0 及之后版本,并且在 選擇遷移類型 頁面,選中 結構遷移,才會顯示該區域的參數。
目標端表對象存儲類型包括 默認、行存、列存 和 行列混存,該配置用于確定結構遷移或增量同步時目標端表對象的存儲類型,詳情請參見 default_table_store_format。
說明默認 選項是根據目標端參數配置自適應其他選項,是結構遷移的表對象根據設置的存儲類型寫入對應的結構。
單擊 預檢查,系統對數據遷移任務進行預檢查。
在 預檢查 環節,數據傳輸會檢查數據庫用戶的讀寫權限、數據庫的網絡連接等是否符合要求。全部檢查任務均通過后才能啟動數據遷移任務。如果預檢查報錯:
您可以在排查并處理問題后,重新執行預檢查,直至預檢查成功。
您也可以單擊錯誤預檢查項操作列中的 跳過,會彈出對話框提示您跳過本操作的具體影響,確認可以跳過后,請單擊對話框中的 確定。
預檢查成功后,單擊 啟動任務。
如果您暫時無需啟動任務,請單擊 保存。后續您只能在 遷移任務列表 頁面手動啟動任務或通過批量操作啟動任務。批量操作的詳情請參見 批量操作數據遷移任務。數據遷移任務啟動后,會根據選擇的遷移類型依次執行,詳情請參見 查看遷移詳情。
數據傳輸支持在數據遷移任務運行過程中減少遷移對象,詳情請參見 減少遷移對象。
說明RDS PostgreSQL 實例至 OceanBase 數據庫 Oracle 租戶的數據遷移任務運行過程中不支持增加遷移對象。