更新时间:2024-07-01 GMT+08:00

导出表定义、语法转换迁移

  1. 使用拥有sysdba权限的账户(本例使用db_user01)登录PL/SQL Developer。

    以下以试用版的PL/SQL Developer的界面为例,实际请以新界面为准。

  1. 在菜单栏选择“工具 > 导出用户对象...”。
  2. 选择当前登录用户db_user01,然后选择该用户下的表对象APEX2_DYNAMIC_ADD_REMAIN_TEST,不选择包括存储,并选择语法导出文件的路径(导出的sql文件命名为test),单击“导出”。

    导出的DDL文件如下显示。

  3. 将导出的DDL文件放在解压后的DSC文件夹的input目录下。

  4. 在runDSC.bat同级目录下shift+鼠标右键,选择在此处打开power shell窗口,并执行转换。其中D:\DSC\DSC\inputD:\DSC\DSC\outputD:\DSC\DSC\log切换为实际DSC的路径。

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

  5. 转换完成,在DSC的output路径下自动生成转换后的DDL文件。

  6. 由于DWS的表定义结构与Oracle存在差异,需要手动修改转换后的表定义。

    如下,将文件中的\echo整体注释掉(如果使用gsql工具导入表定义的话,不需要注释),同时手动修改指定表的分布列(distribute by hash (列名))。
    • 修改前:

    • 修改后:

    Hash分布表的分布列选取至关重要,需要满足以下原则:

    1. 列值应比较离散,以便数据能够均匀分布到各个DN。例如,考虑选择表的主键为分布列,如在人员信息表中选择身份证号码为分布列。
    2. 在满足第一条原则的情况下尽量不要选取存在常量filter的列。例如,表dwcjk相关的部分查询中出现dwcjk的列zqdh存在常量的约束(例如zqdh=’000001),那么就应当尽量不用zqdh做分布列。
    3. 在满足前两条原则的情况,考虑选择查询中的连接条件为分布列,以便Join任务能够下推到DN中执行,且减少DN之间的通信数据量。

  7. 完成DWS集群的创建,参见创建集群
  8. 连接DWS数据库,参见使用Data Studio连接集群,使用系统管理员dbadmin用户连接,首次默认先连接默认数据库gaussdb。
  9. 创建新的目标数据库test,并切换到test数据库。

    1
    CREATE DATABASE test WITH ENCODING 'UTF-8' DBCOMPATIBILITY 'ORA' TEMPLATE template0;
    

  10. 创建新的Schema并切换到新的Schema,Schema名称与Oracle的用户名(本例为db_user01)保持一致。

    1
    2
    CREATE SCHEMA db_user01;
    SET CURRENT_SCHEMA = db_user01;
    

  11. 复制7中转换后的DDL语句到Data Studio中执行。
  12. 在DWS集群的test库中的Schema xxx下能查到APEX2_DYNAMIC_ADD_REMAIN_TEST表,即为表定义迁移完成。

    1
    SELECT COUNT(*) FORM db_user01.APEX2_DYNAMIC_ADD_REMAIN_TEST;