本次测试使用DM DTS工具进行Oracle11G到DM8的迁移。DTS 是一款免费的数据迁移工具,在数据库安装时自带有图形化的版本,同时也可以部署 DEM (达梦企业管理器),以 WEB 客户端方式提供。此工具主要适用于静态数据迁移场景。支持视图、存储过程/函数、包、类、同义词、触发器等对象迁移。支持数据类型的自动映射,编码转换等等。
源端环境:
| 调研项 | 调研结果 |
|---|---|
| 数据库后台操作系统 | Red Hat Linux |
| 数据库架构 | 单机 |
| 数据库版本 | Oracle 11g |
| 待迁移数据库名 | zhft |
| 待迁移的模式名 | ZHFT |
| IP/端口信息 | 192.168.159.132/1521 |
| 用户名/密码 | Zhft/xxxxxx |
| 字符集编码 | UTF8 |
| 需要移植的对象 | 表(数据量)、物化视图、触发器、存储过程、函数、序列 |
目标环境:
DM8–>ZHFT模式
| 数据库参数 | 参数值 |
|---|---|
| DB_NAME(数据库名) | ZHFT |
| INSTANCE_NAME(实例名) | ZHFT |
| PORT_NUM(端口) | 5236 |
| 管理员、审计员、安全员密码(安全版本特有) | xxxxxxxxx |
| EXTENT_SIZE(簇大小) | 32 |
| PAGE_SIZE(页大小) | 32 |
| LOG_SIZE(日志大小) | 2048M |
| CHARSET(字符集) | UTF8 |
| CASE_SENSITIVE(大小写敏感) | 敏感(根据实际要求设置) |
| BLANK_PAD_MODE(尾部空格填充) | 否 |
| SYSDBA_PWD(SYSDBA 用户密码) | xxxxxxxx |
| SYSAUDITOR_PWD(SYSAUDITOR 用户密码) | xxxxxxxx |
部分参数说明:
(1)EXTENT_SIZE:簇大小默认为 16 页,建议设置成 32 页。
(2)CASE_SENSITIVE:默认是大小写敏感,源端为 Oracle 情况下,建议保持默认大小写敏感即可。
(3)BLANK_PAD_MODE:空格填充参数,是否要兼容 Oracle 进行设置,即在 BLANK_PAD_MODE = 0 的情况下,’A’ 和 ’A ’ 被认为是相同的值,参数为 1 的情况下,认为是两个不同的值,根据现场具体应用的需求进行设置。此为初始化参数,只能在初始化时候指定,后续不可以修改,需要提前做好评估,但是源端为 Oracle 数据库的时候,建议设置为 1。
(4)CHARSET:字符集编码,可选 GB18030、UTF-8,默认为 GB18030,如果只存储中文和字母数字,使用 GB18030 更节省空间。
(5)PAGE_SIZE:页大小默认为 8K,建议设置成 32K,一条记录的长度,受到页大小的限制,不可以超过页大小的一半,所以建议一开始规划页大小为 32K。
从 Oracle 移植到 DM,需额外注意以下参数。
参数名 含义 建议值
COMPATIBLE_MODE 是否兼容其他数据库模式。0:不兼容,1:兼容 SQL92 标准 ,2:兼容 ORACLE, 3:兼容 MS SQL SERVER ,4:兼容 MYSQL, 5:兼容 DM6, 6:兼容 TERADATA,7:部分兼容 POSTGRES, 8:部分兼容 DB2。注:对 COMPATIBLE_MODE 的修改会影响数据存储和操作结果,修改须慎重;具体可咨询达梦技术服务人员。 推荐值:2,重启数据库生效。
COMPATIBLE_MODE:兼容参数,置为 2 为兼容 Oracle 参数,在 dm.ini 中可以进行配置,如果默认 0 的情况下,达梦视 null 不等同于空字符串,用户可能会插入空串,会导致 is null 查不出全部数据,所以视情况而定是否需要修改。
创建表空间以及ZHFT用户。
create tablespace ZHFT datafile '/data/dmdata/ZHFT/ZHFT.DBF' size 2048;
create user "ZHFT" identified by "xxxxx" default tablespace "ZHFT"default index tablespace "ZHFT";
grant "PUBLIC","RESOURCE","SOI","SVI","VTI" to "ZHFT";
创建Oracle测试库并且创建相应的表,视图,索引、触发器等等。
创建过程省略
表信息:
对象信息:
使用DTS工具,右键新建评估
选择Oracle到DM
输入源端的连接信息,选择指定目的库
输入DM的连接信息
选择ZHFT模式
选择全部的对象
查看评估失败的对象
查看不兼容的详细信息
进行校验
DTS 工具为静态迁移工具,在正式开始移植前需要停止所有对源端数据库的操作,避免数据变化或新数据的产生导致源端与目的端数据不一致。
源端停止数据库监听,杀掉连接进来的会话,防止新的连接进来。
ps -ef|grep LOCAL=NO|grep -v grep|grep zhft|awk '{print $2}'|xargs kill -9
创建迁移工程
填写源端信息
填写目标端信息
选择ZHFT模式
查看报错详情
DM中修改表的字段长度
所有的报错都修改完成后重新执行
SQL> alter table zhft.T_PAYMENT modify PAYMENT_STATUS varchar(50);
操作已执行
已用时间: 31.826(毫秒). 执行号:5107.
SQL> ALTER TABLE ZHFT.T_CUSTOMER MODIFY GENDER VARCHAR(50);
操作已执行
已用时间: 48.296(毫秒). 执行号:5108.
SQL> ALTER TABLE ZHFT.T_EMPLOYEE MODIFY GENDER VARCHAR(50);
操作已执行
已用时间: 23.806(毫秒). 执行号:5109.
SQL> ALTER TABLE ZHFT.T_WAREHOUSE MODIFY MANAGER_NAME VARCHAR(50);
操作已执行
已用时间: 21.360(毫秒). 执行号:5110.
SQL> ALTER TABLE ZHFT.T_STOCK_LOG MODIFY CHANGE_TYPE VARCHAR(50);
操作已执行
已用时间: 18.858(毫秒). 执行号:5111.
重新执行之后没有出现报错信息。查看迁移报告:
源端与目标端创建辅助表
create table table_count (owner varchar(100),table_name varchar(100),cnt int);
别在源端和目的端执行脚本,将模式下表的数据量插入到辅助表 table_count 中
declare
v_owner VARCHAR2(100);
v_tabname VARCHAR2(100);
stmt VARCHAR2(200);
num_rows number;
begin
for rec in (select owner,table_name from dba_tables where owner='ZHFT' order by 1, 2)---owner根据实际情况调整
loop
select rec.owner,rec.table_name into v_owner,v_tabname from dual;
stmt := 'select count(*) from "' || v_owner || '"."' || v_tabname || '"';
EXECUTE IMMEDIATE stmt INTO num_rows;
EXECUTE IMMEDIATE 'insert into table_count values('''||v_owner||''','''||v_tabname||''','''||to_number(num_rows)||''')';
end loop;
end;
/
源端统计对象数量
目标端查看对象数量
这是物化视图数据,在达梦数据库中物化视图是以表和视图的形式共同存在于数据库中,在查询时,将物化视图识别为表,也识别为视图。
数据核验没有问题之后当迁移后全库数据量较小时,可以使用全模式更新的方法:
DBMS_STATS.GATHER_SCHEMA_STATS( '模式名',100,TRUE,'FOR ALL COLUMNS SIZE AUTO');
收集表的统计信息。
对于需要单独收集统计信息的表,可以按照如下方式收集:
DBMS_STATS.GATHER_TABLE_STATS('模式名','表名',NULL,100,TRUE,'FOR ALL COLUMNS SIZE AUTO');
文章
阅读量
获赞
