支持的源和目標數據庫
表 支持的數據庫
源數據庫
目標數據庫
l本地自建數據庫(Oracle 10g、11g、12c、18c、19c版本)
lECS自建數據庫(Oracle 10g、11g、12c、18c、19c版本)
lRDS for MySQL
支持的同步對象范圍
在使用DRS進行同步時,不同類型的同步任務,支持的同步對象范圍不同,詳細情況可參考下表。 DRS會根據用戶選擇,在“預檢查”階段對同步對象進行自動檢查 。
表支持的同步對象
類型名稱
使用須知
同步對象范圍
l?同步對象選擇維度:支持表級同步、庫級同步。
l?支持的同步對象:
??支持庫、表結構、主鍵、唯一鍵、普通索引、表數據的同步,其他數據庫對象暫不支持,如存儲過程、觸發器、函數、序列、包、同義詞、用戶等。
??全量階段不支持bfile,xml、sdo_geometry、urowid、interval(精度大于6位)和自定義類型。
??增量階段不支持bfile,xml、interval、sdo_geometry、urowid、timestamp(精度大于6位)和自定義類型。
??增量階段源庫為Oracle物理備庫(PHYSICAL STANDBY)時不支持解析lob類型數據(無法生成數據字典),如果增量同步的表中出現lob類型會導致增量同步異常。
??相互關聯的數據對象要確保同時同步,避免因關聯對象缺失,導致同步失敗。常見的關聯關系:主外鍵關聯表等。
??不支持同步表結構中的partition,分區表在目的庫同步為非分區表。
??不支持默認值含有表達式的函數的表的同步。
??不支持同步源庫中的臨時表。
??不支持選擇源數據庫的空庫進行同步。
??如果表中只有LOB字段,可能出現數據不一致性情況。
??如果Oracle中使用LOB類型各自的empty函數寫入數據時,通過JDBC查詢出來的值是空字符串,寫入到目標庫后是空字符串還是NULL取決于目標庫對空字符串值的處理。
??針對無主鍵且無索引的表,非大字段的列必須大于3列,否則會因為無法全列匹配導致增量異常。
說明庫名、表名等數據庫對象名稱支持英文字符、“#”、“$”、“_”等符號, DRS 不支持非ASCII字符、“. ”、 “>”、 “<”、 “\”、 “`”、 “|”、 “,”、 “? ”、 “! ”、 “"”和 “'”等字符。
對象名同步到目標庫后會轉換成小寫,為避免同步失敗,選擇的源庫表中不能存在表名稱字母相同但大小寫不同的表。
數據庫帳號權限要求
在使用DRS進行同步時,連接源庫和目標庫的數據庫帳號需要滿足以下權限要求,才能啟動實時同步任務。不同類型的同步任務,需要的帳號權限也不同,詳細可參考下表進行賦權。DRS會在“預檢查”階段對數據庫帳號權限進行自動檢查,并給出處理建議。
說明
- 建議創建單獨用于DRS任務連接的數據庫帳號,避免因為數據庫帳號密碼修改,導致的任務連接失敗。
- 連接源或目標數據庫的帳號密碼修改后,請盡快修改連接信息,避免任務連接失敗后自動重試,導致數據庫帳號被鎖定影響使用。
表 數據庫帳號權限
類型名稱
全量同步
全量+增量同步
源數據庫連接帳號
需要具有CREATE SESSION,SELECT ANY DICTIONARY,針對單表的SELECT(GRANT SELECT
to drsUser;)權限。 l?12c及以上版本CDB數據庫同步時,需要具有CREATE SESSION,SELECT ANY DICTIONARY,針對單表的SELECT權限(GRANT SELECT
to drsUser;),EXECUTE_CATALOG_ROLE,SELECT ANY TRANSACTION,LOGMINING,SELECT ON SYS.COL$,SELECT ON SYS.OBJ$,SET CONTAINER(GRANT SET CONTAINER TO CONTAINER=ALL;)權限。 l?12c及以上版本PDB數據庫同步時,除了需要具有CREATE SESSION,SELECT ANY DICTIONARY,針對單表的SELECT權限(GRANT SELECT
to drsUser;),EXECUTE_CATALOG_ROLE,SELECT ANY TRANSACTION,LOGMINING,SELECT ON SYS.COL$,SELECT ON SYS.OBJ$權限,還需要具有CDB的CREATE SESSION,SELECT ANY DICTIONARY,EXECUTE_CATALOG_ROLE,SELECT ANY TRANSACTION,LOGMINING,SET CONTAINER(GRANT SET CONTAINER TO CONTAINER=ALL;)權限。 l?11g及以下版本數據庫同步時,需要具有CREATE SESSION,SELECT ANY DICTIONARY,針對單表的SELECT權限(GRANT SELECT
to drsUser;),EXECUTE_CATALOG_ROLE,SELECT ANY TRANSACTION,SELECT ON SYS.COL$,SELECT ON SYS.OBJ$。 l?增量同步時,源庫Oracle需要開啟日志歸檔模式和最小補充日志,所需同步表必須開啟PK/UI或以ALL級別的補充日志,不限制庫級或表級補充日志方式,若只開啟表級補充日志,重建或者RENAME表后需要重新設置;請確保以上配置在同步過程中始終保持開啟狀態。
l?12c及以上版本不支持使用ORACLE_MAINTAINED=Y的用戶帳號進行增量同步(system/sys除外),因為該屬性的帳號無日志解析權限。
目標數據庫連接帳號
必須擁有如下權限:SELECT、INSERT、CREATE、DROP、UPDATE、ALTER、DELETE、INDEX。
使用建議
注意
- DRS任務啟動和全量數據同步階段,請不要在源數據庫執行DDL操作,否則可能導致任務異常。
- 為保證同步前后數據一致性,確保同步期間目標數據庫無業務寫入。
- 數據庫同步與環境多樣性和人為操作均有密切關系,為了確保同步的平順,建議您在進行正式的數據庫同步之前進行一次演練,可以幫助您提前發現問題并解決問題。
- 基于以下原因,建議您在啟動任務時選擇“稍后啟動”功能,將啟動時間設置在業務低峰期,相對靜止的數據可以有效提升一次性同步成功率,避免同步對業務造成性能影響。
? 在網絡無瓶頸的情況下,全量同步會對源數據庫增加約50MB/s的查詢壓力,以及占用2~4個CPU。
? 正在同步的數據被其他事務長時間鎖死,可能導致讀數據超時。
? DRS并發讀取數據庫,會占用大約6-10個session連接數,需要考慮該連接數對業務的影響。
? 全量階段讀取表數據時,特別是大表的讀取,可能會阻塞業務上對大表的獨占鎖操作。
- 數據對比
建議您結合對比同步項的“稍后啟動”功能,選擇業務低峰期進行數據對比,以便得到更為具有參考性的對比結果。由于同步具有輕微的時差,在數據持續操作過程中進行對比任務,可能會出現少量數據不一致對比結果,從而失去參考意義。
使用須知
DRS全量+增量同步過程一般包含四個階段:任務啟動階段、全量階段、增量階段、結束任務階段(單全量任務則包含三個階段)。為了確保同步各個階段的平順,在創建同步任務前,請務必閱讀以下使用須知。
表使用須知
類型名稱
使用和操作限制
任務啟動前須知
l?源數據庫參數要求:
??目前僅支持同步如下字符集:ZHS16GBK、AL32UTF8、UTF8、US7ASCII、WE8MSWIN1252、WE8ISO8859P1、WE8ISO8859P2、WE8ISO8859P4、WE8ISO8859P5、WE8ISO8859P7、WE8ISO8859P9、WE8ISO8859P13、WE8ISO8859P15。
l?源數據庫對象要求:
??源數據庫中的庫名或映射后的名稱不允許以ib_logfile開頭,也不能為ib_buffer_pool、ib_doublewrite、ibdata1、ibtmp1。
??源數據庫支持to_date和sys_guid函數做默認值。將其他函數作為default值時,需要目標庫也有相同功能的函數。對于目標庫不存在對應函數的情況,可能會出現以下結果:
默認值函數可能會被置空。
創建表失敗,導致對象對比不一致或者任務失敗。
??Oracle單行記錄不能超過8K(lob、long類型除外,會自動轉換成MySQL的text、blob類型),原因是MySQL innodb引擎限制單行大小不能超過8K(text、blob類型除外)。
??不建議以字符串類型作為主鍵或唯一鍵,因為Oracle的字符串作為主鍵、唯一鍵時區分空格,而MySQL不區分,可能導致數據不一致和死鎖問題。
??對于Oracle的binary_float或者binary_double類型,MySQL中不支持設置Nan、Inf、-Inf三種值,DRS默認會將這三種值轉為0保存。
??Oracle的check約束同步到MySQL會失效,原因是MySQL不支持check約束。
??Oracle中建議列名不要取名AUTO_PK_ROW_ID,原因是這個列名在MySQL5.7中是保留列名,無法創建出來。
??Oracle中number(p, s)字段的精度不要超過p: [1, 38], s:[p-65, min(p, 30)]的精度表示范圍。其中,s取值依賴于p的取值變化,即下限為p-65, 上限為p或30中取最小值。例如:當p=1, s的取值范圍是[-64, 1]。當p=38, s取值范圍是[-27, 30]。int字段的值不要超過(65,0)的精度表示范圍。原因是MySQL數字的表示范圍比Oracle小。
??Oracle歸檔日志文件大小必須大于單條數據最大值,避免單條數據日志跨文件(超過2個日志文件)導致的增量數據解析異常。
??默認值不支持default user,MySQL沒有對應的語法。
l?目標庫參數要求:
??DRS同步時會有大量數據寫入目標庫,目標庫max_allowed_packet 參數過小會導致無法寫入,建議將目標庫max_allowed_packet參數值設置為大于100MB。
l?目標庫對象要求:
??源庫和目標庫時區設置必須一致。
??選擇同步表結構時,目標數據庫不能存在待同步數據庫。
??目標數據庫需要有足夠的磁盤空間,約為源庫空間大小的1.5倍。
??目標數據庫版本小于5.7.7時,源庫單個索引的全部列的長度不得超過767,反之則不得超過3072。
??同步的表要禁用外鍵,因為DRS并行回放會使得不同表之間的寫入順序和源庫不一致,可能會觸發外鍵約束限制,造成同步失敗。
??支持目標數據庫中的表比源數據庫多列場景,但是需要避免以下場景可能導致的任務失敗。
目標端多的列要求非空且沒有默認值,源端insert數據,同步到目標端后多的列為null,不符合目標端要求。
目標端多的列設置固定默認值,且有唯一約束。源端insert多條數據后,同步到目標端后多的列為固定默認值,不符合目標端要求。
l?其他使用須知:
??數據類型不兼容時,可能引起同步失敗。
??由于無主鍵表缺乏行的唯一性標志,網絡不穩定時涉及少量重試,表數據存在少量不一致的可能性。
??如有特殊字符,業務連接Oracle數據庫使用的編碼需和Oracle數據庫服務端編碼一致,否則目標庫會出現亂碼。
??Oracle中表結構長度(所有列長字節數之和,char、varchar2等類型字節長度和編碼有關)超過65535時,可能導致同步失敗。
??Oracle中表結構同步到MySQL后表的字符集為UTF8MB4。
??當Oracle字符集是WE8MSWIN1252時,CLOB列同步到目標庫可能出現亂碼,建議先修改源庫字符集為AL32UTF8再同步數據。
??對于Oracle RAC集群,建議使用SCAN IP+ SERVICE_NAMES方式創建任務,SCAN IP具有更強的容錯性,更好的負載能力,更快的同步體驗。
??源庫為Oracle RAC時,如果需要使用SCAN IP配置DRS任務,需要保證SCAN IP、DRS節點的IP同時能與源庫的所有VIP互通(Oracle內部機制),否則無法通過連通性檢查。若不使用SCAN IP,可以使用某一節點的VIP,這種情況下DRS日志解析只會在VIP指定的RAC節點上進行。
??由于Oracle與MySQL的部分語法有明顯區別,結構同步無法完全保證支持全部語法的轉換,包括但不限于函數,表達式,依賴的系統表等。所以在同步過程中,會有在Oracle上存在,在MySQL中沒有直接對應的語法,或者MySQL中有對應的語法,但當前還未適配轉換的情況,這樣會導致結構同步失敗。這時,需要手工在目標數據庫創建表結構。
??DRS全量同步表結構時,源庫中的char、varchar2類型長度在目標庫會按照字節長自動擴大(因為目標庫為字節長),至少擴大1.5倍。擴大倍數和源庫目標庫的字符集有關,例如同為UTF8的情況下,默認擴大3倍,同為GBK的情況下,默認擴大2倍。
??全量同步分區表的結構時會將該對象轉為非分區的普通表,增量同步時,源庫跟分區表相關的操作,在目標庫執行可能會失敗。
??增量同步時,BLOB末尾的0x00、CLOB末尾的空格會被截斷。
全量同步階段須知
l?任務啟動和全量數據同步階段,請不要在源數據庫執行DDL操作,否則可能導致任務異常。
l?同步過程中,不允許修改、刪除連接源和目標數據庫的用戶的用戶名、密碼、權限,或修改源和目標數據庫的端口號。
l?同步過程中,不允許對正在同步中的目標數據庫進行修改操作(包括但不限于DDL、DML操作)。
l?同步過程中,不允許對Oracle源庫做resetlogs操作,否則會導致數據無法同步且任務無法恢復。
l?同步過程中,不支持LOB類型的rollback操作,否則會導致同步任務失敗。
增量同步階段須知
l?同步過程中,不允許修改、刪除連接源和目標數據庫的用戶的用戶名、密碼、權限,或修改源和目標數據庫的端口號。
l?同步過程中,不允許對正在同步中的目標數據庫進行修改操作(包括但不限于DDL、DML操作)。
l?同步過程中,不允許對Oracle源庫做resetlogs操作,否則會導致數據無法同步且任務無法恢復。
l?同步過程中,不支持LOB類型的rollback操作,否則會導致同步任務失敗。
l?同步過程中,請勿修改源庫或目標庫表中的char類型字段為varchar,由于Oracle和MySQL表現不同,產生的空格可能會導致數據對比不一致。
l?同步過程中,支持部分DDL操作。
??表級同步支持alter table add column、alter table drop column、alter table rename column、alter table modify column以及truncate table的基本DDL,不支持默認值等的修改。
??庫級同步支持create table(表內定義不能包含函數)。
??DDL中的對象不能是目標庫的關鍵字,比如index,where等。目標庫MySQL關鍵字可參考。
??目標庫為8.0以下版本時,不支持alter table rename column。
??增量DDL不支持全角等特殊字符。
l?若源庫為RAC,增量同步首次啟動時所有RAC節點必須正常在線,否則增量啟動會出現異常。
l?若源庫為RAC,增量同步時,不支持增加、減少節點數量,避免導致增量同步異常(為保證數據的強一致性)。
l?表的對象名同步到目標庫后會轉換成小寫,如ABC和abc。因此增量同步階段,選擇的源庫的表中不能存在僅大小寫不同的表,否則會導致同步失敗。
l?任務再編輯增加新表時,請確保新增的表的事務都已提交,否則未提交的事務可能無法同步到目標庫。建議在業務低峰期做增加表的操作。
?
前提條件
- 已登錄數據復制服務控制臺。
- 滿足實時同步支持的數據庫類型和版本,詳情請參見實時同步。
- 已閱讀以上使用建議和使用須知。
操作步驟
本小節以Oracle到RDS for MySQL的實時同步為示例,介紹如何使用數據復制服務配置實時同步任務。
步驟 1 在“實時同步管理”頁面,單擊“創建同步任務”。
步驟 2 在“同步實例”頁面,填選任務名稱、描述、同步實例信息,單擊“開始創建”。
- 任務信息
表任務和描述
| 參數 | 描述 |
|---|---|
| 任務名稱 | 任務名稱在4到50位之間,必須以字母開頭,可以包含字母、數字、中劃線或下劃線,不能包含其他的特殊字符。 |
| 描述 | 描述不能超過256位,且不能包含! = < > & ' " \ 特殊字符。 |
- 同步實例信息
表同步實例信息
| 參數 | 描述 |
|---|---|
| 數據流動方向 | 選擇“入云”。 |
| 源數據庫引擎 | 選擇“Oracle”。 |
| 目標數據庫引擎 | 選擇“MySQL”。 |
| 網絡類型 | 此處以“公網網絡”為示例。目前支持可選公網網絡、VPC網絡和VPN、專線網絡。 |
| 目標數據庫實例 | 創建好的RDS for MySQL實例。 |
| 同步實例所在子網 | 請選擇同步實例所在的子網。也可以單擊“查看子網”,跳轉至“網絡控制臺”查看實例所在子網幫助選擇。默認值為當前所選數據庫實例所在子網,請選擇有可用IP地址的子網。為確保同步實例創建成功,僅顯示已經開啟DHCP的子網。 |
| IP類型 | 選擇遷移實例的IP類型,目前支持選擇“IPv4”或“IPv4&IPv6雙棧”。只有所選擇的VPC及子網都開啟了IPv6雙棧功能,才能選擇IP類型為“IPv4&IPv6雙棧”。 |
| 同步模式 | 全量+增量該模式為數據持續性實時同步,通過全量過程完成目標端數據庫的初始化后,增量同步階段通過解析日志等技術,將源端和目標端數據保持數據持續一致。 說明 選擇“全量+增量”同步模式,增量同步可以在全量同步完成的基礎上實現數據的持續同步,無需中斷業務,實現同步過程中源業務和數據庫繼續對外提供訪問。 全量該模式為數據庫一次性同步,適用于可中斷業務的數據庫同步場景,全量同步將用戶選擇的數據庫對象和數據一次性同步至目標端數據庫。 |
- 標簽
表 標簽
| 參數 | 描述 |
|---|---|
| 標簽 | 可選配置,對同步任務的標識。使用標簽可方便管理您的任務。每個任務最多支持10個標簽配額。 任務創建成功后,您可以單擊任務名稱,在“標簽”頁簽下查看對應標簽。關于標簽的詳細操作,請參見標簽管理。 |
說明
對于創建失敗的任務,DRS默認保留3天,超過3天將會自動結束任務。
步驟 3 在“源庫及目標庫”頁面,同步實例創建成功后,填選源庫信息和目標庫信息,單擊“源庫和目標庫”處的“測試連接”,分別測試并確定與源庫和目標庫連通后,勾選協議,單擊“下一步”。
表源庫信息
| 參數 | 描述 |
|---|---|
| IP地址或域名 | 源數據庫的IP地址或域名。說明對于RAC集群,建議使用SCAN IP接入,提高訪問性能。 |
| 端口 | 源數據庫服務端口,可輸入范圍為1~65535間的整數。 |
| 數據庫服務名 | 數據庫服務名(Service Name/SID),客戶端可以通過其連接到Oracle,具體查詢方法請參照界面提示。 |
| PDB名稱 | PDB同步僅在Oracle12c及以后的版本支持,該功能為選填項,當需要遷移PDB中的表時開啟。PDB功能開啟后,只能遷移該PDB中的表,并且需要提供CDB的service name/sid及用戶名和密碼,不需要PDB的用戶名和密碼。 |
| 數據庫用戶名 | 源數據庫的用戶名。 |
| 數據庫密碼 | 源數據庫的用戶名所對應的密碼。 |
| SSL安全連接 | 如啟用SSL安全連接,請在源庫開啟SSL,并確保相關配置正確后上傳SSL證書。 說明 最大支持上傳500KB的證書文件。 如果不啟用SSL安全連接,請自行承擔數據安全風險。 |
說明
源數據庫的IP地址或域名、數據庫用戶名和密碼,會被系統加密暫存,直至刪除該遷移任務后自動清除。
表 目標庫信息
| 參數 | 描述 |
|---|---|
| 數據庫實例名稱 | 默認為創建遷移任務時選擇的RDS for MySQL實例,不可進行修改。 |
| 數據庫用戶名 | 目標數據庫對應的數據庫用戶名。 |
| 數據庫密碼 | 數據庫用戶名和密碼將被系統加密暫存,直至該任務刪除后清除。支持在任務創建后修改密碼。 |
| SSL安全連接 | 如啟用SSL安全連接,請在目標庫開啟SSL,并確保相關配置正確后上傳SSL證書。 說明 最大支持上傳500KB的證書文件。 如果不啟用SSL安全連接,請自行承擔數據安全風險。 |
步驟 4 在“設置同步”頁面,選擇同步對象類型和同步對象,單擊“下一步”。
表 同步模式和對象
參數
描述
流速模式
流速模式支持限速和不限速,默認為不限速。
l?限速
自定義的最大同步速度,全量同步過程中的同步速度將不會超過該速度。
當流速模式選擇了“限速”時,你需要通過流速設置來定時控制同步速度。流速設置通常包括限速時間段和流速大小的設置。默認的限速時間段為“全天限流”,您也可以根據業務需求選擇“時段限流”。自定義的時段限流支持最多設置3個定時任務,每個定時任務之間不能存在交叉的時間段,未設定在限速時間段的時間默認為不限速。
流速的大小需要根據業務場景來設置,不能超過9999MB/s。
l?不限速
對同步速度不進行限制,通常會最大化使用源數據庫的出口帶寬。該流速模式同時會對源數據庫造成讀消耗,消耗取決于源數據庫的出口帶寬。比如源數據庫的出口帶寬為100MB/s,假設高速模式使用了80%帶寬,則同步對源數據庫將造成80MB/s的讀操作IO消耗。
說明
l?限速模式只對全量階段生效,增量階段不生效。
l?您也可以在創建任務后修改流速模式。具體方法請參見修改流速模式。
同步對象類型
可選同步表結構、同步數據、同步索引,根據實際需求進行選擇要同步內容。
l?同步數據為必選項。
l?選則同步表結構的時候目標庫不能有同名的表。
l?不選同步表結構的時候目標庫必須有相應的表,且要保證表結構與所選表結構相同。
同步對象
左側框是源數據庫對象,右側框是已經選擇的對象,可選表級同步、庫級同步或導入對象文件,您可以根據業務場景選擇對應的數據進行同步。選擇數據的時候支持搜索,以便您快速選擇需要的數據庫對象。
l?在同步對象右側已選對象框中,可以使用對象名映射功能進行源數據庫和目標數據庫中的同步對象映射,具體操作可參考對象名映射。
說明
l?選擇對象的時候支持對展開的庫進行搜索,以便您快速選擇需要的數據庫對象。
l?如果有切換源數據庫的操作或源庫同步對象變化的情況,請在選擇同步對象前單擊右上角的,以確保待選擇的對象為最新源數據庫對象。
l?當對象名稱包含空格時,名稱前后的空格不顯示,中間如有多個空格只顯示一個空格。
l?選擇的同步對象名稱中不能包含空格。
步驟 5 在“數據加工”頁,可對同步數據進行過濾,完成后單擊“下一步”,詳細可參考” 數據加工“。
步驟 6 在“預檢查”頁面,進行同步任務預校驗,校驗是否可進行。
- 查看檢查結果,如有不通過的檢查項,需要修復不通過項后,單擊“重新校驗”按鈕重新進行任務預校驗。
- 預檢查完成后,且所有檢查項結果均通過時,單擊“下一步”。
說明
所有檢查項結果均通過時,若存在請確認項,需要閱讀并確認詳情后才可以繼續執行下一步操作。
步驟 7 在“任務確認”頁面,設置同步任務的啟動時間,并確認同步任務信息無誤后,單擊“啟動任務”,提交同步任務。
表任務啟動設置
| 參數 | 描述 |
|---|---|
| 啟動時間 | 同步任務的啟動時間可以根據業務需求,設置為“立即啟動”或“稍后啟動”。 說明 預計同步任務啟動后,會對源數據庫和目標數據庫的性能產生影響,建議選擇業務低峰期,合理設置同步任務的啟動時間。 |
步驟 8 同步任務提交后,您可在“管理”頁面,查看并管理自己的任務。
- 您可查看任務提交后的狀態,狀態請參見任務狀態說明。
- 在任務列表的右上角,單擊
刷新列表,可查看到最新的任務狀態。 - 對于未啟動、狀態為配置中的任務,DRS默認保留3天,超過3天DRS會自動刪除后臺資源,當前任務狀態不變。當用戶再次配置時,DRS會重新申請資源。