一、创建表空间以及数据库用户
--创建表空间和用户脚本 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;
二、迁移步骤
- 打开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;