执行DSC进行语法迁移
本章节指导使用DSC进行语法迁移。
注意事项
- 启动迁移程序前,可以自定义指定输出文件夹路径。输入文件夹路径、输出文件夹路径以及日志路径以空格隔开。默认在工具根目录下。输入文件夹路径不能包含空格。路径空格会导致DSC执行错误。详情请参见故障处理。
- 如果输出文件夹中包含子文件夹或文件,DSC会在执行迁移前将其删除或者根据用户设置(config文件夹中application.properties配置文件)将其覆盖。已删除或覆盖的子文件夹或文件无法通过DSC恢复。
- 如果在同一台服务器上并发进行迁移(由同一个或不同DSC执行),不同的迁移任务必须使用不同的输出文件夹路径和日志路径。
- 用户可以通过可选参数指定日志存储路径。如果路径未指定,DSC在TOOL_HOME下自动创建log文件夹。详情请参见DSC日志参考。
- 单条SQL大小约束为20KB,超过此大小可能会导致执行过慢,从而转换失败。
- 为确保安全性,DSC会对其创建的文件和文件夹进行访问控制。要访问这些文件和文件夹,用户必须拥有所需权限。例如,用户需要权限600/400访问目标文件和日志文件,需要权限700访问目标文件夹和日志文件夹。此外,该工具不在日志中保存敏感数据,以确保数据安全。
- --input-folder中指定的文件或文件夹不得具有GROUP和OTHERS的写权限。 出于安全考虑,如果输入文件/文件夹具有写入权限,则该工具不会执行。
- 不得使用拥有root权限的用户在Linux中安装和执行DSC。
- DSC.jar文件中提供的umask值是系统设置值,与文件权限相关。建议用户不要修改此值。修改此值将影响文件权限。
DSC是一个单机应用程序,无需与任何网络或数据库连接即可运行。它可以在与任何网络隔离的任何机器上运行。
准备工作
在迁移之前必须先创建输入文件夹和输出文件夹,并将待迁移的所有SQL脚本复制到输入文件夹中。Linux系统操作如下:
- 创建输入和输出文件夹。您可以根据用户的首选项在任意位置创建文件夹。用户也可以使用默认的文件夹作为输入、输出,作为包的一部分提供。
1 2
mkdir input mkdir output
由于DSC批量无序地读取输出文件夹,因此,建议在迁移开始后不要对输入文件夹和文件进行任何修改,这些异常操作将影响DSC的输出结果。
- 将所有待迁移的 SQL文件复制到输入文件夹。
- 如果源文件的编码格式不是UTF-8,请执行以下步骤:
- 打开config文件夹中的application.properties文件。
- 将application.properties文件中encodingFormat参数值修改为所需的文件编码格式。
DSC支持UTF-8、ASCII以及GB2312编码格式。encodingFormat的值不区分大小写。
- 如果需要获取Linux系统中源文件的编码格式,请在源文件所在服务器上执行以下命令:
1file -bi <Input file name>
- 如果源文件的编码格式不是UTF-8,请执行以下步骤:
环境搭建及恢复(数据库及数据库用户)
创建DWS数据库和schema
- 登录Postgres系统。
gsql -p <port> -d postgres drop database <database name>; create database <database name>; \c <database name> GRANT ALL PRIVILEGES ON DATABASE <database name> TO <user>; grant database to <user>;\q gsql -p <port> -d <database name> -U <user> -W <password> -h <IP> -f drop database <database name>; create database <database name>; \c <database name>; GRANT ALL PRIVILEGES ON DATABASE <database name> TO <user>; gsql -p <port> -d <database name> -U <user> -W <password> -f
- 运行Setup目录下的所有文件。
命令:
sh runDSC.sh -S oracle -M blogic -I <input path> sh runDSC.sh -I input/ -S oracle -M ddl -L log_temp -P input/bulk/1_table/
迁移方法
用户可在Windows和Linux操作系统中执行runDSC.sh或runDSC.bat命令进行迁移,各迁移场景的命令详见表1,带“[]”内的参数为可选参数。
|
迁移场景 |
命令行参数 |
||
|---|---|---|---|
|
Linux场景迁移 |
|
||
|
Windows场景迁移 |
|
任务示例
- 示例:将Teradata数据库的SQL文件迁移到适用于Linux系统下的DWS的SQL脚本中。
1 2 3
./runDSC.sh --source-db teradata 或 ./runDSC.sh -S teradata
1./runDSC.sh --source-db teradata --input-folder D:\test\conversion\input --output-folder D:\test\conversion\output --log-folder D:\test\conversion\log
- 示例:执行以下命令,将Teradata数据库的SQL文件迁移到适用于Windows操作系统下的DWS的SQL脚本中。
1 2 3
runDSC.bat --source-db teradata 或 runDSC.bat -S teradata
1runDSC.bat --source-db teradata --input-folder D:\test\conversion\input --output-folder D:\test\conversion\output --log-folder D:\test\conversion\log
控制台上显示迁移详情(包括进度和完成状态):
********************** 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 ************************
查看并验证输出文件
迁移流程结束后,用户可使用对比工具(例如BeyondCompare®)将输入文件与输出文件进行比较。为了简化对比过程,也可以先对源SQL文件进行格式化。
- 在Linux操作系统上运行以下命令以查看输出文件夹中的迁移文件。Windows操作系统不再赘述。
cd OUTPUT ls
显示类似以下信息:
formattedSource output user1@node79:~/Documentation/DSC/OUTPUT> cd output user1@node79:~/Documentation/DSC/OUTPUT/output> ls in_index.sql input.sql Input_table.sql in_view.sql MetadataInput.sql user1@node79:~/Documentation/DSC/OUTPUT/output>
- 使用对比工具比较输入文件和输出文件,查看迁移后SQL文件的关键字是否符合目标数据库的要求。如果不符合,请联系技术支持处理。