更新时间:2024-06-29 GMT+08:00
Teradata Perl迁移
概述
本节描述Teradata Perl文件迁移过程的详细信息。
请使用runDSC.sh或runDSC.bat命令并设置--application-lang=perl,将Perl文件中的Teradata BTEQ或SQL_LANG脚本迁移到兼容Perl文件的GaussDB(DWS)中。迁移Perl文件后,可使用对比工具比较输入和输出文件进行验证。
Perl文件迁移流程如下:
- 完成前提条件中的步骤。
- 创建输入文件夹,并将待迁移Perl文件复制到该文件夹。例如:/migrationfiles/perlfiles
- 执行DSC迁移Perl脚本,并将db-bteq-tag-name设为BTEQ或db-tdsql-tag-name设为SQL_LANG。
- DSC从Perl文件中提取BTEQ或SQL_LANG类型脚本。
- BTEQ是标签名称,包含一组BTEQ脚本,可以通过perl-migration.properties文件中的db-bteq-tag-name参数来配置。
- SQL_LANG也是标签名称,包含Teradata SQL语句,可以通过db-tdsql-tag-name参数来配置。
- DSC通过调用Teradata SQL来迁移提取到的SQL脚本。有关Teradata SQL迁移的详细信息,请参见Teradata SQL迁移。
- Perl文件嵌入迁移后脚本。
- DSC从Perl文件中提取BTEQ或SQL_LANG类型脚本。
- 在指定的输出文件夹中创建迁移后的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-name或db-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
父主题: 数据库模式迁移