鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

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的作业。

由于和达梦机制不同,需要了解具体意义后在达梦的 代理 中重新配置,可以在最后进行该部分的迁移:

使用管理工具登录,选择代理 > 创建代理环境 > 作业 > 新建作业,根据需求配置作业步骤和作业调度即可。

二、运行脚本并处理错误

根据依赖顺序在达梦中执行并分析错误。

错误的包或类名:

  1. 检查是否依赖的包或类未创建。
  2. 如果使用Oracle系统包可以在达梦中使用SP_CREATE_SYSTEM_PACKAGES(1)语句创建。
  1. 如果创建后也没有,需要根据具体情况改写,如dbms_output.put_line在达梦中可以使用PRINT代替。

无效的方法名:

  1. 检查是否依赖的方法未创建。
  2. 如果使用Oracle系统方法可以在达梦中使用SP_CREATE_SYSTEM_PACKAGES(1)语句创建。
  3. 如果创建后也没有,需要根据具体情况改写。

非法的基类名:

需要注意达梦和Oracle部分数据类型的精度和意义是不一样的,需要进行改写:

Oracle

DM

LONG

TEXT

DATE

TIMESTAMP

NVARCHAR2

VARCHAR2(最新版本可以兼容NVARCHAR2)

LONG RAW

VARBINARY

语法分析错误:

  1. 由于使用达梦的保留字冲突导致,建议如果可以更换尽量更换,如果不行可以采用屏蔽关键字的方法进行屏蔽。
  2. 字符兼容问题,是否使用了中文的标点符号。
  3. Oracle和DM有语法不一致的地方,需要根据具体问题具体分析,例如:

    Oracle

    DM

    Select "DUMMY" From dual

    Select "ID" From dual

    to_nchar

    to_char

    NLS_UPPER

    NLS_UPPER