达梦数据库迁移数据步骤以及常见问题

一、创建表空间以及数据库用户

--创建表空间和用户脚本
create tablespace 表空间名 datafile 数据文件路径 size 数据文件初始大小 autoextend on maxsize 最大值;
create user 用户名 identified by 密码 limit 密码策略 default tablespace 表空间名称;
grant 权限类型 to 用户名;
--创建directory脚本并赋权限('/home/dmdba/log'根据数据库服务器实际地址配置)
create or replace directory dump_dir as '/home/dmdba/log';
grant read,write on directory dump_dir to 用户名;

 

例:

--创建表空间和用户脚本
create tablespace "TEST" datafile '/opt/dmdbms/data/DAMENG/TEST.DBF'  size 13258 autoextend on maxsize 16777215;
create user "TEST_TEST" identified by "TEST_TEST" limit failed_login_attemps 3, password_lock_time 1, password_grace_time 10  default tablespace "TEST";
grant "RESOURCE","PUBLIC" to "TEST_TEST";
--删除表空间以及数据库用户
DROP tablespace TEST;
drop user TEST_TEST cascade;  

二、迁移步骤

  1. 打开DM数据迁移工具:

2、创建工程,创建迁移任务:

3、选择ORACLE到DM7

4、输入ORACLE数据库相关信息

5、输入达梦数据库相关信息

6、选择“默认使用驱动”。若没有安装驱动,需先安装达梦数据库驱动。

7、展示原ORACLE数据库所有用户:

8、选择原ORACLE数据库用户和目标用户:

9、可以看到源模式、源对象、目标模式、目标对象,可以手动选择迁移范围:

10、可以看到迁移的任务和数量:

11、等待任务执行

12、可以看到任务进度:任务总数、已完成、出错、取消的数量,列表展示任务名称、状态、耗时等信息。

13、可以查看日志,也可以保存迁移错误日志。

14、根据错误日志,查到报错原因和解决方案。已迁移成功的表数据,比对原数据库和目标库的表数据量是否一致。

三、常见报错问题及解决方案

1、报错问题:局部唯一索引必须包含全部分区列

解决方案:先在达梦下创建该表,再重新迁移数据。

-- Create table
create table T_OA_FILE_READ(
  FILE_READ_ID CHAR(36) not null,
  FILE_TYPE    VARCHAR2(40),
  FILE_ID      CHAR(36),
  USER_ID      CHAR(36),
  CREATR_DATE  DATE default sysdate)	
partition by range (CREATR_DATE)
(partition FILE_READ_PART01 values less than (TO_DATE(' 2013-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS')),
 partition FILE_READ_PART02 values less than (TO_DATE(' 2014-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS')),   
 partition FILE_READ_PART03 values less than (TO_DATE(' 2015-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS')),
 partition FILE_READ_PART04 values less than (TO_DATE(' 2016-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS')),
 partition FILE_READ_PART05 values less than (TO_DATE(' 2017-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS')),  
 partition FILE_READ_PART06 values less than (MAXVALUE) 
  );
-- Add comments to the columns 
comment on column T_OA_FILE_READ.FILE_TYPE
 is '文件类型';
comment on column T_OA_FILE_READ.FILE_ID
 is '文件ID';
comment on column T_OA_FILE_READ.USER_ID
 is '用户ID';
-- Create/Recreate primary, unique and foreign key constraints 
alter table T_OA_FILE_READ add constraint PK_T_OA_FILE_READ primary key (FILE_READ_ID,CREATR_DATE);

2、报错问题:记录超长

解决方案:先在达梦下执行设置表为记录超长脚本,删除数据再重新迁此表数据。

alter table T_OA_SEND_FILE enable using long row;
truncate table T_OA_SEND_FILE;
select * from T_OA_SEND_FILE;

3、添加外键约束FK_T_OA_TRA_REFERENCE_T_OA_TRA,违反引用约束[CONS134220209]

解决方案:此问题先解决关联表的记录超长问题

alter table T_OA_TRAVEL_M_PERSON
add constraint FK_T_OA_TRA_REFERENCE_T_OA_TRA foreign key (TRAVEL_ID, TRAVEL_FILE_ID, TRAVEL_SEQ_ID)
references T_OA_TRAVEL (TRAVEL_ID, TRAVEL_FILE_ID, TRAVEL_SEQ_ID);

4、创建索引IDX_SHUFTY_TITLE、IDX_SHUFTY_CDATE,包含过多列(不超过63列)

     创建索引IDX_PW_USER_NAME,索引指定了无效的列

解决方案:重新创建索引即可,批量迁移时达梦无法识别DESC

create index IDX_CREATE_DATE on T_OA_IMPNEWS (CREATE_DATE DESC);

5、其他问题

(1) oracle 字段是 varchar2(4000),但是迁移到达梦数据库之后字段长度变为了 varchar2(3900),只能在达梦数据库手动修改为varchar2(4000)

(2)有的时候开发环境没有问题,但是测试环境有问题,这个时候有可能是测试环境的数据值是极限值,数据迁移之后达梦有些函数不支持,导致报错。

oracle写法:
SELECT
        *
FROM
        T_OA_NOTIFY N,
        T_OA_UNREAD R
WHERE
        N.NOTIFY_ID = R.FILE_ID
 AND R.FILE_TYPE = '1'
 AND R.USER_ID   = 'c2db5a93-6fd7-4067-9010-17a694008cfe'
 AND
        (
                N.NOTIFY_TITAL LIKE '%0325%'
 OR INSTR(N.CANVASS, '0325') > 0
        )
AND N.STATE = 0;


达梦数据库写法:

SELECT
        *
FROM
        T_OA_NOTIFY N,
        T_OA_UNREAD R
WHERE
        N.NOTIFY_ID = R.FILE_ID
 AND R.FILE_TYPE = '1'
 AND R.USER_ID   = 'C2DB5A93-6FD7-4067-9010-17A694008CFE'
 AND
        (
                N.NOTIFY_TITAL LIKE '%0325%'
 OR DBMS_LOB.INSTR(N.CANVASS, '0325') > 0
        )
 AND N.STATE = 0;
 
  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值