更新时间:2024-06-29 GMT+08:00

Teradata Perl迁移

概述

本节描述Teradata Perl文件迁移过程的详细信息。

请使用runDSC.shrunDSC.bat命令并设置--application-lang=perl,将Perl文件中的Teradata BTEQ或SQL_LANG脚本迁移到兼容Perl文件的GaussDB(DWS)中。迁移Perl文件后,可使用对比工具比较输入和输出文件进行验证。

Perl文件迁移流程如下:

  1. 完成前提条件中的步骤。
  2. 创建输入文件夹,并将待迁移Perl文件复制到该文件夹。例如:/migrationfiles/perlfiles
  3. 执行DSC迁移Perl脚本,并将db-bteq-tag-name设为BTEQ或db-tdsql-tag-name设为SQL_LANG。
    1. DSC从Perl文件中提取BTEQ或SQL_LANG类型脚本。
      1. BTEQ是标签名称,包含一组BTEQ脚本,可以通过perl-migration.properties文件中的db-bteq-tag-name参数来配置。
      2. SQL_LANG也是标签名称,包含Teradata SQL语句,可以通过db-tdsql-tag-name参数来配置。
    2. DSC通过调用Teradata SQL来迁移提取到的SQL脚本。有关Teradata SQL迁移的详细信息,请参见Teradata SQL迁移
    3. Perl文件嵌入迁移后脚本。
  4. 在指定的输出文件夹中创建迁移后的Perl文件。如果未指定输出文件夹,则工具会在输入文件夹内创建一个名为converted的输出文件夹,例如:/migrationfiles/perlfiles/converted。
    • 包含SQL命令的Perl变量也可以通过migrate-variables参数迁移为SQL。
    • Perl v 5.10.0及以上提供兼容能力。

执行Perl迁移

要迁移Perl文件,请指定--source-db Teradata和--application-lang Perl参数值,然后执行迁移工具。该工具支持迁移BTEQ和SQL_LANG脚本。请配置db-bteq-tag-namedb-tdsql-tag-name参数指定待迁移脚本。

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

Linux:

./runDSC.sh 
--source-db|-S Teradata
[--application-lang|-A Perl]
[--input-folder|-I <input-script-path>]
[--output-folder|-O <output-script-path>] 
[--conversion-type|-M <Bulk or BLogic>]
[--log-folder|-L <log-path>]

Windows:

runDSC.bat
--source-db|-S Teradata
[--application-lang|-A Perl]
[--input-folder|-I <input-script-path>]
[--output-folder|-O <output-script-path>] 
[--conversion-type|-M <Bulk or BLogic>]
[--log-folder|-L <log-path>]
以示例文件夹信息为例,命令如下:
./runDSC.sh --input-folder /opt/DSC/DSC/input/teradata_perl/ --output-folder /opt/DSC/DSC/output/ --source-db teradata --conversion-type Bulk --application-lang PERL

工具执行时,控制台上会显示迁移汇总信息,包括进度和完成状态。

********************** 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 ************************

有关Perl迁移的配置参数,详情请参见Teradata Perl配置

有关命令行参数,详情请参见数据库模式迁移

  • DSC对输入文件进行格式化,并将格式化后的文件归档到输出文件夹中。用户可以直接比对该输出文件和输出文件。
  • 确保输入路径中没有空格。如果存在空格,则DSC会报错。详情请参见故障处理
  • 日志详情请参见日志参考
  • 如果输出文件夹中包含子文件夹或文件,DSC会在执行迁移前将其删除或者根据用户设置(config文件夹中application.properties配置文件)将其覆盖。已删除或覆盖的子文件夹或文件无法通过DSC恢复。
  • Process start time和Process end time分别表示迁移流程的开始和结束时间。Process total time是DSC完成整个流程所用的总时间(以毫秒为单位)。在控制台上还显示已迁移文件的总数、用户配置的处理器总数、已使用的处理器数量以及日志文件和错误日志文件的路径。
  • 设置perl-migration.properties文件中的--add-timing-on参数为true,通过添加自定义脚本来计算语句执行时间。

    示例:

    输入
    1
    2
    3
    4
    $V_SQL2 = "SELECT T1.userTypeInd FROM T07_EBM_CAMP T1  WHERE T1.Camp_List_Id = '$abc'";
    $STH = $dbh->prepare($V_SQL2);
    $sth->execute();
    @rows = $sth->fetchrow();
    
    输出
    $V_SQL2 = "SELECT T1.userTypeInd FROM T07_EBM_CAMP T1  WHERE T1.Camp_List_Id = '$abc'";
    $STH = $dbh->prepare($V_SQL2);
    use Time::HiRes qw/gettimeofday/;
    my $start = [Time::HiRes::gettimeofday()];
    $sth->execute();
    my $elapsed = Time::HiRes::tv_interval($start);
    $elapsed = $elapsed * 1000;
    printf("Time: %.3f ms\n", $elapsed);
    @rows = $sth->fetchrow();
  • --input-folder中指定的文件和文件夹不得拥有GROUP和OTHERS的写权限,即,--input-folder参数指定的文件夹权限不得高于755。出于安全考虑,如果输入文件或文件夹具有写入权限,则不会执行DSC。
  • 在并发迁移场景下,每次迁移的输入路径必须是唯一的。

最佳实践

为优化Perl文件迁移,建议遵循如下标准:

  • BTEQ脚本采用以下格式:
    print BTEQ <<ENDOFINPUT;
    TRUNCATE TABLE employee;
    ENDOFINPUT
    close(BTEQ);
  • SQL_LANG脚本采用以下格式:
    1
    2
    3
    my $sSQL=<<SQL_LANG;
    TRUNCATE TABLE employee;
    SQL_LANG
    
  • 注释不包括如下内容:
    • print BTEQ <<ENDOFINPUT
    • ENDOFINPUT
    • close(BTEQ)
    • my $sSQL=<<SQL_LANG
    • SQL_LANG