PL/SQL迁移
接下来对自定义类型、存储过程、函数、触发器进行迁移,可以使用达梦DTS工具进行迁移,如果遇到大量错误难以排查,也可以使用如下的方法进行分步迁移。
一、导出待迁移对象的脚本
方法1:
使用PL/SQL DEVELOPER等工具导出自定义类型、存储过程、函数、触发器等PL/SQL脚本。
在PL/SQL工具->导出用户对象,可以看到对象名称和类型,可以分类导出到多个文件并整理,以便排查问题。
方法2:
在sqlplus中使用Oracle自带的包导出。
- 导出某个SCHEMA的全部触发器
1 2 3 4 5 6 7
set pagesize 0 set long 90000 set feedback off set echo off spool triggers.sql select DBMS_METADATA.GET_DDL('TRIGGER',u.object_name,'DMHS') from all_objects u where owner='DMHS' and object_type = 'TRIGGER'; spool off;
- 导出存储过程
1 2 3 4 5 6 7
set pagesize 0 set long 90000 set feedback off set echo off spool procedures.sql select DBMS_METADATA.GET_DDL('PROCEDURE',u.object_name,'DMHS') from all_objects u where owner='DMHS' and object_type = ' PROCEDURE'; spool off;
- 导出自定义函数
1 2 3 4 5 6 7
set pagesize 0 set long 90000 set feedback off set echo off spool functions.sql select DBMS_METADATA.GET_DDL('FUNCTION',u.object_name,'DMHS') from all_objects u where owner='DMHS' and object_type = ' FUNCTION '; spool off;
同理,其他类型如TYPE, PACKAGE,PACKAGEBODY等也可以用这种方法导出Oracle的作业。
由于和达梦机制不同,需要了解具体意义后在达梦的
使用管理工具登录,选择
,根据需求配置作业步骤和作业调度即可。二、运行脚本并处理错误
根据依赖顺序在达梦中执行并分析错误。
错误的包或类名:
- 检查是否依赖的包或类未创建。
- 如果使用Oracle系统包可以在达梦中使用SP_CREATE_SYSTEM_PACKAGES(1)语句创建。
- 如果创建后也没有,需要根据具体情况改写,如dbms_output.put_line在达梦中可以使用PRINT代替。
无效的方法名:
- 检查是否依赖的方法未创建。
- 如果使用Oracle系统方法可以在达梦中使用SP_CREATE_SYSTEM_PACKAGES(1)语句创建。
- 如果创建后也没有,需要根据具体情况改写。
非法的基类名:
需要注意达梦和Oracle部分数据类型的精度和意义是不一样的,需要进行改写:
Oracle |
DM |
---|---|
LONG |
TEXT |
DATE |
TIMESTAMP |
NVARCHAR2 |
VARCHAR2(最新版本可以兼容NVARCHAR2) |
LONG RAW |
VARBINARY |
语法分析错误:
- 由于使用达梦的保留字冲突导致,建议如果可以更换尽量更换,如果不行可以采用屏蔽关键字的方法进行屏蔽。
- 字符兼容问题,是否使用了中文的标点符号。
- Oracle和DM有语法不一致的地方,需要根据具体问题具体分析,例如:
Oracle
DM
Select "DUMMY" From dual
Select "ID" From dual
to_nchar
to_char
NLS_UPPER
NLS_UPPER
父主题: 迁移方案