目录
一.迁移流程图:
二.迁移前准备
2.1 统计Oracle信息
查看页大小和字符集: --统计页大小 LIU@ prod>select name,value from v$parameter where name ='db_block_size'; NAME VALUE -------------------------------------------------------------- db_block_size 8192 --查询编码格式 SYS@ prod>select * from v$nls_parameters a where a.PARAMETER='NLS_CHARACTERSET'; PARAMETER VALUE -------------------------------------------------------------- NLS_CHARACTERSET ZHS16GBK |
查看数据类型:
SYS@ prod>select owner,object_name,object_type from dba_objects where owner='LIU' order by 3; OWNER OBJECT_NAME OBJECT_TYPE --------------------------------------------------------------------------------------------------------------------------------- LIU SYS_C0011392 INDEX LIU TEST_PART_PK INDEX LIU SYS_C0011402 INDEX LIU SYS_C0011386 INDEX LIU SYS_C0011400 INDEX LIU SYS_C0011394 INDEX LIU SYS_C0011398 INDEX LIU SYS_C0011384 INDEX LIU SYS_C0011396 INDEX LIU SYS_C0011388 INDEX LIU SYS_C0011390 INDEX LIU LIU_SYNONYM SYNONYM LIU TEST_PART TABLE LIU LIU10 TABLE LIU LIU9 TABLE LIU LIU8 TABLE LIU LIU7 TABLE LIU LIU6 TABLE LIU LIU5 TABLE LIU LIU4 TABLE LIU LIU3 TABLE LIU LIU1 TABLE LIU LIU2 TABLE LIU TLK_P_NEWS_MDS TABLE LIU TEST_PART TABLE PARTITION LIU TR_P_NEWS TRIGGER LIU TEST_VIEW VIEW |
查看表大小:
LIU@prod>select SEGMENT_NAME,(BYTES/1024/1024) MB from dba_segments where owner='LIU' order by 1; SEGMENT_NAME MB ------------------------------ ---------- LIU1 .0625 LIU2 .0625 LIU3 .0625 LIU4 .0625 LIU5 .0625 SYS_C0011384 .0625 SYS_C0011386 .0625 SYS_C0011388 .0625 SYS_C0011390 .0625 SYS_C0011392 .0625 已选择10行 |
2.2 创建DM目标端实例
(1)初始化实例:
注意:
根据Oracle实例的字符集选择初始化对应的DM实例,如Oracle使用GBK,达梦建议使用GB18030,Oracle使用UTF8,达梦也对应选择UTF8。
dminit path=/dm8/dmdata PAGE_SIZE=32 EXTENT_SIZE=32 CASE_SENSITIVE=y CHARSET=2 DB_NAME=DMDB INSTANCE_NAME=DMSERVER PORT_NUM=5236
- 创建表空间和用户
从 Oracle 移植到 DM,要求必须创建新的用户和表空间,不要把数据迁移到
系统管理员 SYSDBA 用户下和 MAIN 表空间下。迁移需要的表空间及用户即可。
create tablespace LIU datafile '/dm8/dmdata/DMDB/liu.dbf' size 1024 autoextend on next 1 maxsize 10240 CACHE = NORMAL;
create user "LIU" IDENTIFIED BY "liu123456" DEFAULT TABLESPACE "LIU";
- 根据Oracle端用户权限进行授权
Oracle端:
select * from dba_sys_privs where grantee='LIU'; 未选定行 SYS@ prod>select * from dba_role_privs where grantee='LIU'; GRANTEE GRANTED_ROLE ------------------------------------------------------------------------------------------ ------------------------------ LIU CONNECT LIU RESOURCE |
DM端:
grant RESOURCE,public to liu; |
2.3 迁移计划
(1)选择合理的迁移顺序:先迁移序列、再迁移表、最后迁移视图、函数、存储过程、触发器等。 (最后一部分可一起迁移)
(2)对于数据量大的表单独迁移。
(3)对于分区表如果数据量没有超过 1 亿建议迁移成普通表,在分区列上 创建索引。
(4)对于大字段较多的表,需要修改批量的行数,以免造成迁移工具内存溢出。
(5)数据量较大时,可开启快速装载
三.正式迁移
3.1 dm.ini开启oracle兼容参数
SQL>SP_SET_PARA_VALUE(2,'COMPATIBLE_MODE',2);
3.2 启动DTS工具
点击按钮创建新的工程,输入工程名和工程描述,点击【确定】,即可创建工程,如下图所示:
右键选择【新建迁移】,输入迁移名称和迁移描述,即可创建迁移,如下图所示:
输入迁移名称:Oracle-DM,点击【确定】按钮,完成迁移的创建,如下图所示:
选中新建的迁移,即可查看迁移工具的欢迎界面,介绍了迁移工具的支持情况等信息,如下图所示:
在欢迎界面点击【下一步】,选择要迁移的方式,以 Oracle 迁移到 DM 数据库为例,如下图所示:
输入数据源(Oracle 数据库)的信息:主机名 (IP) 、端口,服务名(Oracle 默认服务名 ORCL),角色(默认),用户名和口令,如下图所示:
要确认数据库信息正确,保持开启状态,Oracle 监听已启动。
指定驱动ojdbc6.jar
3.3 迁移表定义
3.4 迁移表数据
(1)选择需要导入的模式及对象
(2)勾选需要迁移的对象,选择转换
(3)取消勾选,表定义,勾选数据,修改普通表一次扫描读取行数和提交行数
修改大字段表一次扫描读取行数和提交行数
设置主键冲突处理,设置导入导出并发数
勾选了快速装载
导入表数据完成,无报错
3.5 迁移索引和约束
注:记住勾选选项(保留引用表原有模式信息)
如果不勾选快速装载迁移,总迁移时间会延长
3.6 迁移视图触发器及同义词
四.更新统计信息
迁移完整的库建议按照库模式更新统计信息,凡是涉及到迁移数据的及时进行更新统计信息的操作。
方法一:执行sql
DBMS_STATS.GATHER_SCHEMA_STATS('username',1.0,TRUE,'FOR ALL INDEXED SIZE AUTO'); DBMS_STATS.GATHER_SCHEMA_STATS('username',30,TRUE,'FOR ALL COLUMNS SIZE AUTO'); |
方法二:登录管理工具
库模式更新:
表模式更新:
列模式更新:
更新索引:
五.迁移后验证
5.1使用命令行对比
- 对象数对比
Oracle:
select owner,object_type,count(object_name) from dba_objects where owner='LIU' group by owner,object_type order by 3; OWNER OBJECT_TYPE COUNT(OBJECT_NAME) ---------------------------------------- --------------------------------------------------------- ------------------ LIU TABLE PARTITION 1 LIU VIEW 1 LIU TRIGGER 1 LIU SYNONYM 1 LIU INDEX 11 LIU TABLE 12 |
DM:
select owner,object_type,count(object_name) from dba_objects where owner='LIU' group by owner,object_type order by 3; 行号 OWNER OBJECT_TYPE COUNT(OBJECT_NAME) ---------- ----- --------------- ---------------------------------------------------------- 1 LIU VIEW 1 2 LIU SCH 1 3 LIU SYNONYM 1 4 LIU TRIGGER 1 5 LIU TABLE PARTITION 1 6 LIU CONSTRAINT 12 7 LIU TABLE 12 8 LIU INDEX 30 |
- 数据量对比
Oracle:
select owner,segment_name,(bytes/1024/1024) MB from dba_segments where owner='LIU' and segment_type='TABLE'; OWNER SEGMENT_NAME MB ------------------------------ ------------------------------ ----------- ------------------------------ LIU SYS_C0011392 .0625 LIU SYS_C0011390 .0625 LIU SYS_C0011388 .0625 LIU SYS_C0011386 .0625 LIU SYS_C0011384 .0625 LIU TAB_CNT_ORA .0625 LIU ORA_TABLES .0625 LIU LIU5 .0625 LIU LIU4 .0625 LIU LIU3 .0625 LIU LIU2 .0625 LIU LIU1 .0625 |
DM:
select owner,segment_name,(bytes/1024/1024) MB from dba_segments where owner='LIU' and segment_type='TABLE'; 行号 OWNER SEGMENT_NAME MB ---------- ----- -------------- -------------------- 1 LIU TLK_P_NEWS_MDS 1 2 LIU LIU1 1 3 LIU LIU10 1 4 LIU LIU2 1 5 LIU LIU3 1 6 LIU LIU4 1 7 LIU LIU5 1 8 LIU LIU6 1 9 LIU LIU7 1 10 LIU LIU8 1 11 LIU LIU9 1 |
5.2使用dts工具对比
(1)创建dts对比任务:
- dts对比报告
经对比,不一致对象如下:
(1)查看表对象不一致原因:
在DM中会将Oracle的DATA类型转换为’TIMESTAMP’格式,此报错可忽略。
(2)查看视图不一致原因:
经查看视图查询结果,均一致。只是DM创建视图语句和Oracle略微不同。报错可忽略
(3)查看触发器不一致原因:由于Oracle端触发器编译本身就有问题,执行不成功。所以DM端此问题可忽略。
达梦云适配技术社区
https://eco.dameng.com/