将Oracle迁移到TeleDB DTS CONTAINERALL; GRANT EXECUTE ON DBMSLOGMNRD TO C DTS CONTAINERALL; oracle 12c关闭CDB模式 如果仅作测试用可直接赋予最高权限,用SYS用户登录Oracle,如下创建DTS迁移用户: CREATE USER DTS IDENTIFIED BY " " DEFAULT TABLESPACE USERS QUOTA UNLIMITED ON USERS; GRANT DBA TO DTS; GRANT SELECT ON SYS.OBJ$ TO DTS; GRANT SELECT ON SYS.COL$ TO DTS; 如果需要授予数据迁移用户的精准权限,用SYS用户登录Oracle,如下创建DTS迁移用户: 要求该用户必须是CDB下的用户,且授权的权限必须在所有容器内都具备 CREATE USER DTS IDENTIFIED BY " " DEFAULT TABLESPACE USERS QUOTA UNLIMITED ON USERS; GRANT CREATE SESSION TO DTS; GRANT SET CONTAINER TO DTS; GRANT FLASHBACK ANY TABLE TO DTS; GRANT SELECT ANY TABLE TO DTS; GRANT INSET ANY TABLE TO DTS; GRANT UPDATE ANY TABLE TO DTS; GRANT DELETE ANY TABLE TO DTS; GRANT CREATE ANY TABLE TO DTS; GRANT DROP ANY TABLE TO DTS; GRANT COMMENT ANY TABLE TO DTS; GRANT LOCK ANY TABLE TO DTS; GRANT CREATE SEQUENCE TO DTS; GRANT SELECT ANY SEQUENCE TO DTS; GRANT SELECT ANY TRANSACTION TO DTS; GRANT SELECT ANY DICTIONARY TO DTS; GRANT SELECT ON SYS.OBJ$ TO DTS; GRANT SELECT ON SYS.COL$ TO DTS; GRANT SELECTCATALOGROLE TO DTS; GRANT EXECUTECATALOGROLE TO DTS; GRANT LOGMINING TO DTS; GRANT EXECUTE ON DBMSLOGMNR TO DTS; GRANT EXECUTE ON DBMSLOGMNRD TO DTS; 2. 创建目标库DTS用户 如果仅作测试,可直接使用TeleDB最高权限的用户root。 如果需要使用精准权限的用户,用root用户登录TeleDB,如下创建DTS迁移用户: CREATE USER dts WITH ENCRYPTED PASSWORD ' '; GRANT CREATE, TEMPORARY, CONNECT ON DATABASE TO dts; 如果要做增量迁移且迁移的表包含外键,那么除了上述权限外,还要保证该用户具有在会话级别执行SET sessionreplicationrole 'replica'的权限。可登录TeleDB控制台,将该参数设置并重启。 3. 如果有增量迁移,需按照如下方法开启Oracle的归档日志 非RAC模式: SELECT name,logmode from V$DATABASE; 如果没有开启,使用sqlplus且用SYS用户以sysdba方式登录后,依次执行以下命令: SHUTDOWN IMMEDIATE; STARTUP MOUNT; ALTER DATABASE ARCHIVELOG; ALTER DATABASE OPEN; RAC模式: 在RAC ORACLE 的某一个节点的 shell 中,关闭、启动、挂载某一个数据库: srvctl stop database d srvctl start database d o mount 使用DBA 权限账号登陆该数据库,并开启归档日志: alter database archivelog; 在RAC ORACLE 的某一个节点的 shell 中, 重启数据库: srvctl stop database d srvctl start database d 4. 如果有增量迁移,需开启Oracle的详细补充日志 使用以下命令,确认supplemental logging 是否开启: SELECT supplementallogdatamin, supplementallogdatapk, supplementallogdataall FROM V$DATABASE; 如果三列存在NO,那么先开启补充最小日志supplementallogdatamin: ALTER DATABASE ADD SUPPLEMENTAL LOG DATA; 开启全补充日志,增加ALL、主键、Unique Index: ALTER DATABASE ADD SUPPLEMENTAL LOG DATA(ALL, PRIMARY KEY, UNIQUE) COLUMNS; 5. 确保所有容器处于打开状态 如果有增量迁移,且CDB模式开启,且有多个容器数据库,则要保证这写可插拔的容器数据库处于打开状态,不然无法启动增量迁移。 注意必须用SYS用户执行 SELECT conid, name, openmode, restricted FROM v$pdbs; 以上查询结果中,除了SEED容器外,OPENMODE字段的值必须为READ WRITE。 6. 确认迁移对象中是否存在无主键表 如果勾选增量迁移,迁移对象中不能包含无主键表: 替换 YOURSCHEMANAME 为你的模式名 SELECT t.tablename FROM alltables t LEFT JOIN allconstraints c ON t.owner c.owner AND t.tablename c.tablename AND c.constrainttype 'P'WHERE t.owner ' 使用以上查询语句可以筛选出某个schema下的所有无主键表,将这些表排除于增量迁移之外。 7. 确认归档日志保留时间 如果勾选增量迁移,为了避免增量迁移过程中由于一些故障导致同步中断的情况,需要至少保留37天的归档日志来确保处理这些情况的窗口期。否则,可能导致无法将同步从故障中恢复。 RMAN> SHOW RETENTION POLICY; 8. 确认待迁移对象中是否包含触发器 如果将触发器作为结构的一部分,在DTS的调度逻辑上,触发器会先于全量迁移被迁移到TeleDB。这样可能会影响到全量迁移,导致数据不一致。 建议将触发器放到全量迁移之后,再新建一个迁移任务进行迁移。 9. 数据及业务信息统计 如果为非测试任务,需要在迁移之前统计业务以及迁移信息,方便进行迁移任务规划。 资源信息: 源库规格信息,例如4C8G + 500G + SSD 目标库磁盘信息,例如4C8G + 500G + SSD 网络情况,例:为测试环境纯内网传输,无复杂的网络拓补结构 数据信息: 总数据量,例如30GB 总库表数量,例:40个库,8000张表,2000个视图,5个触发器 每日新增数据量级,例如:一天的归档日志新增大概100GB 是否所有表都有主键,建议迁移前完善主键,提高性能,方便运维。如果存在无主键的表,则增量阶段源端对应表的增、删、改操作不会同步至目标端,可能导致数据不一致,请谨慎评估。 业务类: 数据迁移是否可停业务,例:能/不能 增量迁移情况,例:开启增量迁移,持续时间5天 可停业务时间长度,例:服务停机时间预计48小时 业务中是否存在百万级别的大事务,例:存在,涉及对表CLOUD.LOGS进行大事务操作,存在一个存储过程用不带where条件的delete语句定期清理该表。 操作步骤 1. 订购DTS数据迁移实例。 2. 进入实例配置页面。DTS实例创建成功后,进入【数据迁移】实例列表页面,上一步骤购买成功的实例在实例列表中显示状态为“待配置”,进入实例配置页面进行配置: 3. 配置源库及目标库信息。 1. 进入实例配置第一个步骤的【配置源库及目标库信息】页面,填入源库与目标库的相关配置信息,包括数据库类型、IP地址端口、数据库账号、数据库密码等信息。 2. 完成上述信息的填写后,单击源数据库和目标数据库的测试连接按钮进行数据库连接测试,检查数据库能否正常连接。 3. 注意 ORACLE如果要进行增量同步,不能使用SYS/SYSTEM系统用户。 4. 配置迁移对象及高级配置。 源库和目标库连通性测试成功后,点下一步按钮,进入实例配置第二个步骤的【配置迁移对象及高级配置】页面,在“源库对象”中选择要迁移的源库对象,选中后单击“>”按钮,将待迁移对象移动到“已选择对象”中。 5. 预检查和启动迁移。 完成迁移对象和高级配置后,单击“下一步预检查”,进入实例配置第三个步骤的【预检查】页面。预检查会检查如下列表信息,并给出检查结果,用户可以依据检查结果进行下一步操作。 检查内容 检查点 检查源库连通性 源库网络能够连通 检查目标库连通性 目标库网络能够连通 检查源库用户权限 若不包含增量,检查提供的源库账号是否具有以下权限: CREATE SESSION;CATALOGROLE、ANY DICTIONARY、待迁移表的select权限若包含增量,还需要检查以下权限:SET CONTAINER,FLASHBACK ANY TABLE,SELECT ANY TABLE,SELECTCATALOGROLE,EXECUTECATALOGROLE,SELECT ANY TRANSACTION,LOGMINING,CREATE TABLE,LOCK ANY TABLE,CREATE SEQUENCE,EXECUTE ON DBMSLOGMNR,EXECUTE ON DBMSLOGMNRD,SELECT ANY DICTIONARY,SELECT ON SYS.OBJ,SELECT ON SYS.COL,CREATE ANY TABLE,COMMENT ANY TABLE,DROP ANY TABLE 检查目标库用户权限 检查提供的目标库账号是否具有登录信息database下创建schema的权限。 检查目标库PostgreSql版本 目标库的PostgreSql版本是否不低于9.2 检查待迁移表是否存在主键 检查待迁移表是否都存在主键,只有全量迁移时,如果发现存在没有主键的表,将提出警告(无主键的表可能会导致数据不一致);勾选了增量迁移,如果发现存在没有主键的表,预检查将不通过(增量迁移功能依赖主键) 检查待迁移表约束完整性 检查待迁移表依赖的表对象是否包含在待迁移对象中,若存在依赖的对象未被选择,检查不通过 检查源库最大连接数 检查源库最大连接数是否不小于300,若最大连接数小于300,给出告警 检查目标库最大连接数 检查目标库最大连接数是否不小于300,若最大连接数小于300,给出告警 检查同名对象存在性 检查目标库中是否存在和待迁移库同名的库(映射后),若存在,检查该库下面是否存在同名的表(映射后)。如果有,将提出警告。 检查源数据库Oracle的表字段的数据类型能否都迁移到目标库 待迁移表中不能存在Oracle的独有的字段类型,ROWID、UROWID、XMLTYPE、BFILE、SDOGEOMETRY等类型 检查源库对象是否仅大小写不同 迁移对象中是否包含仅大小写不同的对象时,预检查不通过 检查待迁移库名合法性 若待迁移库名中包含非法字符,检查不通过 检查待迁移表名合法性 若待迁移表名中包含非法字符,检查不通过 检查源库字符集是否为支持的字符集 源库字符集支持以下字符集:ZHS16GBK,AL32UTF8,UTF8,US7ASCII,WE8MSWIN1252若源库字符集不属于以上字符集,预检查将不通过 检查当前登录账号是否个人账号 勾选增量时,检查源库的迁移用户是否为个人账号,若账号为系统用户,检查不通过 检查源库是否开启归档日志 勾选增量时,检查源库是否开启归档日志,若未开启,检查不通过 检查源库是否开启补充日志 勾选增量时,检查源库是否开启补充日志,若未开启,检查不通过 如果预检查通过,可单击【预检查】页面底部的“启动迁移”按钮,开始迁移任务。或者直接单击”数据迁移“列表,返回数据迁移主界面,任务将显示为”未启动“状态。 勾选任务,单击 开始任务 ,任务将变为 运行中 ,直到全量迁移完成,或者进入增量迁移状态。