更新时间:2023-03-17 GMT+08:00

Oracle SQL迁移

工具支持从Oracle到GaussDB(DWS)的迁移,包括模式、DML、查询、系统函数、PL/SQL等。

执行Oracle SQL迁移

执行以下命令设置源数据库、输入和输出文件夹路径、日志路径、应用程序语言和迁移类型:

Linux操作系统:

./runDSC.sh
--source-db Oracle 
[--input-folder <input-script-path>] 
[--output-folder <output-script-path>]
[--log-folder <log-path>]
[--application-lang Oracle] 
[--conversion-type <conversion-type>]

Windows操作系统:

runDSC.bat
--source-db Oracle 
[--input-folder <input-script-path>] 
[--output-folder <output-script-path>]
[--log-folder <log-path>]
[--application-lang Oracle] 
[--conversion-type <conversion-type>]
  • 迁移不含PL/SQL语句的普通DDL语句(表、视图、索引、序列等)时,应使用Bulk模式(即,将conversion-type参数设为Bulk)。

    以示例文件夹路径为例,将conversion-type参数设为Bulk,命令如下:

    Linux操作系统:

    ./runDSC.sh --source-db Oracle --input-folder /opt/DSC/DSC/input/oracle/ --output-folder /opt/DSC/DSC/output/ --log-folder /opt/DSC/DSC/log/ --application-lang SQL --conversion-type bulk --target-db gaussdbA

    Windows操作系统:

    runDSC.bat --source-db Oracle --input-folder D:\test\conversion\input --output-folder D:\test\conversion\output --log-folder D:\test\conversion\log --application-lang SQL --conversion-type bulk --target-db gaussdbA

    在工具执行时,控制台上会显示迁移汇总信息,包括迁移进度和完成状态。执行信息和错误会录入日志文件

    ********************** Schema Conversion Started ************************* 
     DSC process start time : Mon Jan 20 17:24:49 IST 2020 
     Statement count progress 100% completed [FILE(1/1)] 
      
     Schema Conversion Progress 100% completed 
     **************************************************************************  
     Total number of files in input folder : 1 
     **************************************************************************  
     Log file path :....../DSC/DSC/log/dsc.log 
     DSC process end time : Mon Jan 20 17:24:49 IST 2020 
     DSC total process time : 0 seconds 
     ********************* Schema Conversion Completed ************************
  • 迁移含PL/SQL语句的函数、过程、包等对象时,应使用BLogic模式(即,将conversion-type参数设为BLogic)。
    以示例文件夹路径为例,将conversion-type参数设为BLogic,命令如下:
    runDSC.bat --source-db Oracle --input-folder D:\test\migration\input --output-folder D:\test\migration\output --log-folder D:\test\migration\log --application-lang SQL --conversion-type blogic --target-db gaussdbA

    在工具执行时,控制台上会显示迁移汇总信息,包括迁移进度和完成状态。执行信息和错误会录入日志文件

    ********************** Schema Conversion Started ************************* 
     DSC process start time : Mon Jan 20 17:24:49 IST 2020 
     Statement count progress 100% completed [FILE(1/1)] 
      
     Schema Conversion Progress 100% completed 
     **************************************************************************  
     Total number of files in input folder : 1 
     Total number of valid files in input folder : 1 
     **************************************************************************  
     Log file path :....../DSC/DSC/log/dsc.log 
     Error Log file :   
     DSC process end time : Mon Jan 20 17:24:49 IST 2020 
     DSC total process time : 0 seconds 
     ********************* Schema Conversion Completed ************************

    注意,应将普通DDL脚本和PL/SQL脚本分置不同输入文件夹下迁移。

Oracle PACKAGE迁移注意事项

1. 应将包规范(即包头)与包体分置于不同文件、相同输入路径中进行迁移。

2. 应先使用Bulk模式迁移普通DDL语句(包含PACKAGE脚本中引用到的全部表结构信息),以在config/create-types-UDT.properties文件中形成字典信息。之后再使用Blogic模式迁移包规范(即包头)与包体。具体解释如下:

在部分Oracle PACKAGE定义包规范时,使用了"tbName.colName%TYPE"语法以基于其他表对象声明自定义的记录类型。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
    例如
    CREATE OR REPLACE PACKAGE p_emp
    AS
        --定义RECORD类型
        TYPE re_emp IS RECORD(
            rno emp.empno%TYPE,
            rname emp.empname%TYPE
        );

    END;

GaussDB暂不支持通过"tbName.colName%TYPE"语法在CREATE TYPE命令中指定列数据类型,DSC工具在迁移时需要构建含有诸如emp表信息的数据库上下文环境。由此需要先使用DSC工具迁移所有的建表脚本(即使用Bulk模式迁移普通DDL语句),DSC内部会自动生成相应的数据字典。当含有各种表信息的上下文环境构建完成后,可以使用Blogic模式迁移 Oracle PACKAGE,此时re_emp记录类型会根据emp表的列类型完成迁移。

1
2
3
4
5
    期望输出
    CREATE TYPE p_emp.re_emp AS (
        rno NUMBER(4),
        rname VARCHAR2(10)
    );

有关如何使用DSC进行Oracle SQL迁移,请参见使用DSC迁移