GaussDB for DWS 数据融合:Oracle数据迁移到GaussDB(DWS)

当客户选择切换到GaussDB(DWS)数据库后可能会面临数据库的迁移任务,数据库迁移包括用户数据迁移和应用程序sql脚本迁移,其中,应用程序sql脚本迁移是一个复杂、高风险且耗时的过程。

DSC(Database Schema Convertor)是一款运行在Linux或Windows操作系统上的命令行工具,致力于向客户提供简单、快速、可靠的应用程序sql脚本迁移服务,通过内置的语法迁移逻辑解析源数据库应用程序sql脚本,并迁移为适用于GaussDB T、GaussDB A 和 DWS数据库的应用程序sql脚本。

DSC不需要连接数据库,可在离线模式下实现零停机迁移,迁移过程中还会显示迁移过程状态,并用日志记录操作过程中发生的错误,便于快速定位问题。

迁移对象

DSC支持迁移Teradata、Oracle、Netezza、MySQL、DB2数据库的对象有:

  • Oracle、Teradata、Netezza、MySQL、DB2支持的通用对象:SQL模式,SQL查询
  • 仅Oracle和Netezza支持的对象:PL/SQL
  • 仅Teradata支持的对象:包含BTEQ和SQL_LANG脚本的Perl文件

迁移流程

DSC迁移sql脚本流程如下:

  1. 从Teradata或Oracle数据库导出待迁移的sql脚本到已安装了DSC的Linux或Windows服务器。
  2. 执行DSC命令进行语法迁移,命令中指定输入文件路径、输出文件路径以及日志路径。
  3. DSC自动将迁移后的sql脚本和日志信息归档在指定路径中

执行Oracle SQL迁移

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

Linux操作系统:

./runDSC.sh

--source-db Oracle

**--input-folder** \

**--output-folder** \

**--log-folder** \

**--application-lang**Oracle

**--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 --targetdb 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 blogic --targetdb 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,命令如下:

复制代码
java -jar migrationtool.jar --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

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

复制代码
********************** 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 ************************

Oracle PACKAGE迁移注意事项

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

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

复制代码
    例如

    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命令中指定列数据类型,MT工具在迁移时需要构建含有诸如emp表信息的数据库上下文环境。由此需要先使用MT工具迁移所有的建表脚本(即使用Bulk模式迁移普通DDL语句),MT内部会自动生成相应的数据字典。当含有各种表信息的上下文环境构建完成后,可以使用Blogic模式迁移 Oracle PACKAGE,此时re_emp记录类型会根据emp表的列类型完成迁移。

复制代码
    期望输出

    CREATE TYPE p_emp.re_emp AS (

        rno NUMBER(4),

        rname VARCHAR2(10)

    );
相关推荐
AOwhisky10 小时前
MySQL 学习笔记(第一期):数据库基础与 MySQL 初探
运维·数据库·笔记·学习·mysql·云计算
数据库小学妹10 小时前
MySQL ORDER BY 深度解析:Using temporary 与 Using filesort 的底层机制及索引优化实战
数据库·经验分享·mysql·性能优化·dba
AI人工智能+电脑小能手11 小时前
【大白话说Java面试题 第93题】【Mysql篇】第23题:从查找速度来看,聚集索引和非聚集索引哪个更快?
java·开发语言·数据库·mysql·面试
WPF工业上位机11 小时前
YXGK.FakeVM数据库示例
jvm·数据库·oracle
牛奔11 小时前
如何让 GORM 打印 SQL 语句?三种方式全解析
数据库·sql
XWalnut11 小时前
Redis从入门到精通
数据库·redis·缓存
andafaAPS11 小时前
安达发|工艺品aps自动排产排程排单软件:告别生产“一团乱麻“
大数据·数据库·人工智能·安达发aps·计划排产软件·自动排单软件
zt1985q12 小时前
本地部署源代码管理解决方案 Bitbucket Data Center 并实现外部访问
运维·服务器·数据库·网络协议·postgresql·源代码管理
一只专注api接口开发的技术猿12 小时前
OpenClaw 对接淘宝商品 API,低成本实现全天候选品监控|附可运行 Python 实操代码
大数据·开发语言·数据库·python
爱喝水的鱼丶13 小时前
SAP-ABAP:SAP基础数据校验工具开发系列博客(共5篇)第三篇:SAP接口对接开发:实现数据的实时/批量校验交互
运维·数据库·学习·性能优化·sap·abap·经验交流