支持的源和目標數據庫
表支持的數據庫
| 源數據庫 | 目標數據庫 |
|---|---|
| 本地自建數據庫 ECS自建數據庫 |
DRDS實例 |
前提條件
- 已登錄數據復制服務控制臺。
- 滿足實時同步支持的數據庫類型和版本,詳情請參見實時同步。
使用建議
注意
-
DRS任務啟動和全量數據同步階段,請不要在源數據庫執行DDL操作,否則可能導致任務異常。
-
為保證同步前后數據一致性,確保同步期間目標數據庫無業務寫入。
-
數據庫同步與環境多樣性和人為操作均有密切關系,為了確保同步的平順,建議您在進行正式的數據庫同步之前進行一次演練,可以幫助您提前發現問題并解決問題。
-
基于以下原因,建議您在啟動任務時選擇“稍后啟動”功能,將啟動時間設置在業務低峰期,相對靜止的數據可以有效提升一次性同步成功率,避免同步對業務造成性能影響。
- 在網絡無瓶頸的情況下,全量同步會對源數據庫增加約50MB/s的查詢壓力,以及占用2~4個CPU。
- 正在同步的數據被其他事務長時間鎖死,可能導致讀數據超時。
- DRS并發讀取數據庫,會占用大約6-10個session連接數,需要考慮該連接數對業務的影響。
- 全量階段讀取表數據時,特別是大表的讀取,可能會阻塞業務上對大表的獨占鎖操作。
-
數據對比
建議您結合對比同步項的“稍后啟動”功能,選擇業務低峰期進行數據對比,以便得到更為具有參考性的對比結果。由于同步具有輕微的時差,在數據持續操作過程中進行對比任務,可能會出現少量數據不一致對比結果,從而失去參考意義。
使用須知
在創建同步任務前,請務必閱讀以下使用須知。

說明?建議創建單獨用于DRS任務連接的數據庫帳號,避免因為數據庫帳號密碼修改,導致的任務連接失敗。
連接源或目標數據庫的帳號密碼修改后,請盡快修改連接信息,避免任務連接失敗后自動重試,導致數據庫帳號被鎖定影響使用。
表使用須知
類型名稱
使用和操作限制
數據庫權限設置
l源數據庫端:
??全量同步:需要具有CREATE SESSION,SELECT ANY DICTIONARY,針對單表的SELECT權限(GRANT SELECT
to drsUser;)權限。 ??全量+增量同步:
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;)權限。 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;)權限。 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$。 ??增量同步時,源庫Oracle需要開啟日志歸檔模式和最小補充日志,所需同步表必須開啟PK/UI或以ALL級別的補充日志,不限制庫級或表級補充日志方式,若只開啟表級補充日志,重建或者RENAME表后需要重新設置;請確保以上配置在同步過程中始終保持開啟狀態。
??12c及以上版本不支持使用ORACLE_MAINTAINED=Y的用戶帳號進行增量同步(system/sys除外),因為該屬性的帳號無日志解析權限。
l目標數據庫端:提供的目標數據庫帳號必須擁有如下權限:SELECT、CREATE、DROP、DELETE、INSERT、UPDATE、ALTER、INDEX、EVENT、RELOAD、CREATE VIEW。
同步對象約束
l增量同步不支持DDL的同步。
l全量階段不支持bfile,xml、sdo_geometry、urowid、interval(精度大于6位)和自定義類型。
l增量階段不支持bfile,xml、interval、sdo_geometry、urowid、timestamp(精度大于6位)和自定義類型。
l增量階段源庫為Oracle物理備庫(PHYSICAL STANDBY)時不支持解析lob類型數據(無法生成數據字典),如果增量同步的表中出現lob類型會導致增量同步異常。
l目前只支持同步源庫的數據,不支持同步源庫表結構及其他數據庫對象。
l用戶需要在目標庫根據源端邏輯庫的表結構,自行在目標庫創建對應的表結構及索引。未在目標庫創建的對象,視為用戶不選擇這個對象進行同步。
l同步時需要在目標庫創建表結構,目標庫表結構要包含源庫所有列,且主鍵要一致。
l源庫支持to_date和sys_guid函數做默認值。將其他函數作為default值時,需要目標庫也有相同功能的函數。對于目標庫不存在對應函數的情況,可能會出現以下結果:
??默認值函數可能會被置空。
??創建表失敗,導致對象對比不一致或者任務失敗。
l如果表中只有LOB字段,可能出現數據不一致性情況。
l如果Oracle中使用LOB類型各自的empty函數寫入數據時,通過JDBC查詢出來的值是空字符串,寫入到目標庫后是空字符串還是NULL取決于目標庫對空字符串值的處理。
l針對無主鍵且無索引的表,非大字段的列必須大于3列,否則會因為無法全列匹配導致增量異常。
l不支持默認值含有表達式的函數的表的同步。
l不支持同步源庫中的臨時表。
源數據庫要求
lOracle單行記錄不能超過8K(lob、long類型除外,會自動轉換成MySQL的text、blob類型),原因是MySQL innodb引擎限制單行大小不能超過8K(text、blob類型除外)。
l不建議以字符串類型作為主鍵或唯一鍵,因為Oracle的字符串作為主鍵、唯一鍵時區分空格,而MySQL不區分,可能導致數據不一致和死鎖問題。
l對于Oracle的binary_float或者binary_double類型,MySQL中不支持設置Nan、Inf、-Inf三種值,DRS默認會將這三種值轉為0保存。
lOracle中建議列名不要取名AUTO_PK_ROW_ID,原因是這個列名在MySQL5.7中是保留列名,無法創建出來。
lOracle中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小。
l不支持表名包含除下劃線外的其他特殊字符的表的同步。
l源數據庫中的庫名或映射后的名稱不允許以ib_logfile開頭,也不能為ib_buffer_pool、ib_doublewrite、ibdata1、ibtmp1。
l不支持選擇源數據庫的空庫進行同步。
l目前僅支持同步如下字符集:ZHS16GBK、AL32UTF8、UTF8、US7ASCII、WE8MSWIN1252、WE8ISO8859P1、WE8ISO8859P2、WE8ISO8859P4、WE8ISO8859P5、WE8ISO8859P7、WE8ISO8859P9、WE8ISO8859P13、WE8ISO8859P15。
目標數據庫要求
l同步前,目標數據庫必須存在待同步數據庫及表,且庫名,表名,列名,索引名、約束名等必須為對應的小寫名稱。
lDRS同步時會有大量數據寫入目標庫,目標庫max_allowed_packet 參數過小會導致無法寫入,建議將目標庫max_allowed_packet參數值設置為大于100MB。
l同步的表要禁用外鍵,因為DRS并行回放會使得不同表之間的寫入順序和源庫不一致,可能會觸發外鍵約束限制,造成同步失敗。
l支持目標數據庫中的表比源數據庫多列場景,但是需要避免以下場景可能導致的任務失敗。
??目標端多的列要求非空且沒有默認值,源端insert數據,同步到目標端后多的列為null,不符合目標端要求。
??目標端多的列設置固定默認值,且有唯一約束。源端insert多條數據后,同步到目標端后多的列為固定默認值,不符合目標端要求。
操作限制
l表對象名同步到目標庫后會轉換成小寫,如ABC和abc。因此增量同步階段,選擇的源庫表中不能存在表名稱字母相同但大小寫不同的表,否則,會導致同步失敗。
l由于無主鍵表缺乏行的唯一性標志,網絡不穩定時涉及少量重試,表數據存在少量不一致的可能性。
l如有特殊字符,業務連接Oracle數據庫使用的編碼需和Oracle數據庫服務端編碼一致,否則目標庫會出現亂碼。
lOracle中表結構同步到DRDS后表的字符集為utf8mb4。
lOracle中表結構長度(所有列長字節數之和,char、varchar2等類型字節長度和編碼有關)超過65535時,可能導致同步失敗。
lOracle歸檔日志文件大小必須大于單條數據最大值,避免單條數據日志跨文件(超過2個日志文件)導致的增量數據解析異常。
l對于Oracle RAC集群,建議使用SCAN IP+ SERVICE_NAMES方式創建任務,SCAN IP具有更強的容錯性,更好的負載能力,更快的同步體驗。
l源庫為Oracle RAC時,如果需要使用SCAN IP配置DRS任務,需要保證SCAN IP、DRS節點的IP同時能與源庫的所有VIP互通(Oracle內部機制),否則無法通過連通性檢查。若不使用SCAN IP,可以使用某一節點的VIP,這種情況下DRS日志解析只會在VIP指定的RAC節點上進行。
l若源庫為RAC,增量同步首次啟動時所有RAC節點必須正常在線,否則增量啟動會出現異常。
l若源庫為RAC,增量同步時,不支持增加、減少節點數量,避免導致增量同步異常(為保證數據的強一致性)。
l數據類型不兼容時,可能引起同步失敗。
l當Oracle字符集是WE8MSWIN1252時,CLOB列同步到目標庫可能出現亂碼,建議先修改源庫字符集為AL32UTF8再同步數據。
l同步過程中,不允許修改、刪除連接源和目標數據庫的用戶的用戶名、密碼、權限,或修改源和目標數據庫的端口號。
l同步過程中,源庫不能做DDL變更。
l同步過程中,禁止對Oracle源庫做resetlogs操作,否則會導致數據無法同步且任務無法恢復。
l同步過程中,不支持LOB類型的rollback操作,否則會導致同步任務失敗。
l對于同步中的數據庫對象,在同步期間,目標庫不能進行寫入操作,否則會導致數據不一致。
lDRS全量同步表結構時,源庫中的char、varchar2類型長度在目標庫會按照字節長自動擴大(因為目標庫為字節長),至少擴大1.5倍。擴大倍數和源庫目標庫的字符集有關,例如同為UTF8的情況下,默認擴大3倍,同為GBK的情況下,默認擴大2倍。
l全量同步分區表的結構時會將該對象轉為非分區的普通表,增量同步時,源庫跟分區表相關的操作,在目標庫執行可能會失敗。
l增量同步時,BLOB末尾的0x00、CLOB末尾的空格會被截斷。
l選擇表級對象同步時,增量同步過程中不建議對表進行重命名操作。
l源庫的用戶對應目標庫的數據庫。
l源庫用戶、表結構信息同步至目標庫后全部轉換為小寫。如表Ab及表AB同步至目標庫為ab。
l不支持索引組織表的同步。
l同步任務全量階段開始前,如有長時間未提交的事務,有可能丟失數據。
l任務再編輯增加新表時,請確保新增的表的事務都已提交,否則未提交的事務可能無法同步到目標庫。建議在業務低峰期做增加表的操作。