迁移思路概述
exp文件导入oracle库中---达梦dts迁移工具迁移—oracle迁至dm
实施步骤
前置准备:
达梦数据库目标端前置检查
序号 | 检查项 | 检查命令 | 备注说明 |
1 | 数据库字符集 | 略 | 最好相同,至少保证达梦的字符集要比oracle的字符集要大 |
2 | 达梦开启兼容oracle模式 | 略 | 配置dm.ini 的compatible_mode=2 |
空格填充模式 | 略 | BLANK_PAD_MODE=1 兼容oracle | |
3 | 数据库簇大小 | 略 | 32 |
4 | 数据库页大小 | 略 | 32 |
5 | 开启大小写敏感 | 略 | 开启 |
6 | 整数相除是否保留小数位 | 略 | CALC_AS_DECIMAL 配置2或1 |
7 | 导入的用户是否建立 | 略 | 默认自动建立 |
8 | 是否表空间名称一致 | 略 | 不存在会自动建立 |
9 | 用户默认表空间是否设置 | 略 | 需手动设置 |
待补充 |
迁移对像信息收集
迁移对像合计
迁移对象明细
表数据合计及各表记录数
表中字段类型统计
备注:因exp数据只给的metada信息,且是简单测试,此项信息简单表语句查询即可,较为正式环境需要正常统计出以上相关对象并提交客户确认,方可进行后续的迁移操作
迁移工具检查
版本与dm和oracle兼容性
迁移工具端与dm和数据库连接性
检查结果正常
对像迁移顺序
序列---表---视图---函数---存储过程----函数包---job作业
实施步骤
还原dmp文件oracle库
- 查看oralce exp文件导出日志,确认是用expdp工具导出
- 登陆oracle数据库,此处为方便直接登录数据库服务器,采用sys用户操作,创建目录 su - oracle
export ORACLE_SID=his1
sqlplus / as sysdba
- 创建还原用到epi用户、epidm用户、目录 create user epi identified by epi;
create user eipdm identified by epidm
create directory imp as ‘/home/oracle/imp’; - 创建还原用到的4个表空间:EPIDM_TS、ERP_TS、EPI_INDEX、EPI_TS create tablespace epi_index datafile ‘+DB_DATA’ size 1G autoextend on next 50M maxsize unlimited;
create tablespace epidm_ts datafile ‘+DB_DATA’ size 2G autoextend on next 50M maxsize unlimited;
create tablespace epi_ts datafile '+DB_DATA' size 500M autoextend on next 50M maxsize unlimited;
create tablespace erp_ts datafile ‘+DB_DATA’ size 2G autoextend on next 50M maxsize unlimited; - 服务器上创建备份文件放置目录 mkdir –pv /home/oracle/imp
ls /home/oracle (确认创建成功) - 将导出的dmp文件,剪切到/home/oracle/imp mv /root/EPIDM.dmp /home/oracle/imp/.(个人是上传到root,具体以实际测试目录为准)
- 修改权限 chown –R oracle.oinstall /home/oracle
说明:如果是oracle用户此步骤可以省略 - 导入文件 impdp system/oracle@his1 directory=IMP dumpfile=EPIDM.dmp logfile=impEPIDM-1.log schemas=EPIDM cnotallow=metadata_only transform=segment_attributes:n
impdp system/oracle@his1 directory=IMP dumpfile=EPI.dmp logfile=impEP2-1.log schemas=EPI cnotallow=metadata_only transform=segment_attributes:n - 使用sys登录oracle数据库,统计EPI与EPI的对象,并保存到source_oracle_objects中
create table source_oracle_objects as select owner,object_type,count(*) from all_objects where owner='EPI' or OWNER='EPIDM' group by owner,object_type order by 1,2; - 对象名称明细 create table source_oracle_objects_detal as select owner,object_name,object_type,status from all_objects a where owner='EPI' or OWNER='EPIDM' order by 1,2;
- 统计表的记录数
启动客户端工具dts迁移
- 选择迁移---新建迁移
- 配置数据库迁移模式,选oracle---dm
-
- 配置对应的数据库连接
- 迁移选择epi与epidm
迁移序列
迁移表
迁移视图与物化视图
同义词
函数与包
触发器
开始迁移
11、使用客户端工具,连接dm数据库
查看对应的表与用户已经导入
数据验证
连接到DM数据库
统计达梦数据基础信息
select '页大小:'||page
union
select '编码:'||unicode
union
select '大小写区分:'||case_sensitive;
统计迁移的达梦数据中的对象以及表数据量
根据指定用户统计用户下的各对象类型和数目
select object_type,count(*) from all_objects where
owner='EPI' group by object_type;
统计指定用户下所有的对象,并记录到新的记录表中
declare
v_tbname varchar2(100);
v_count int;
v_owner varchar(50);
v_status varchar2(20);
v_sqlst varchar2(100);
cursor C1 is (select owner,object_name,status from all_objects a where object_type='TABLE' and (owner='EPI' or OWNER='EPIDM')) ;
begin
execute immediate 'drop table record_table_count';
execute immediate 'create table record_table_count(owner varchar2(100),object_name varchar2(100),cou_num int)';
open C1 ;
loop
fetch C1 into v_owner,v_tbname,v_status;
exit when C1%notfound;
v_sqlst := 'select count(1) from '||v_owner||'.'||v_tbname;
execute immediate v_sqlst into v_count ;
insert into record_table_count values(v_owner,v_tbname,v_count);
end loop;
close C1;
commit;
end;
对比达梦数据库中对象和
数据库移植完毕后的收尾工作
更新统计信息
数据核对完成无问题后,进行统计信息更新:
更新epi用户
DBMS_STATS.GATHER_SCHEMA_STATS(
'epi',
100,
FALSE,
'FOR ALL COLUMNS SIZE AUTO');
更新epidb
DBMS_STATS.GATHER_SCHEMA_STATS(
'epidb',
100,
FALSE,
'FOR ALL COLUMNS SIZE AUTO');
。
数据备份
迁移之前及迁移之后,数据库都应该备份一次,备份方式可以选择执行脱机冷备或者联机热备
整理对象脚本
迁移之前收集的资料与脚本需完善保管,以防止漏迁或者误迁等情况。同时方便与客户方进行协同校验工作。常用资料包括对象的ddl定义,收集的对象记录行数等
迁移遇到的问题
- 迁移报错 试图一次性迁移全部的对象,未严格按照迁移顺序进行,导致迁移过程之中,有100多个报错。
- 迁移后表索引数量变多
因为oracle默认是堆表,而dm默认是IOT表。但具体未做实验验证