oracle迁移至gaussdb,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腳本流程如下:
從Teradata或Oracle數據庫導出待遷移的sql腳本到已安裝了DSC的Linux或Windows服務器。
執行DSC命令進行語法遷移,命令中指定輸入文件路徑、輸出文件路徑以及日志路徑。
DSC自動將遷移后的sql腳本和日志信息歸檔在指定路徑中
執行Oracle SQL遷移
執行以下命令設置源數據庫、輸入和輸出文件夾路徑、日志路徑、應用程序語言和遷移類型:
Linux操作系統:
./runDSC.sh
--source-db Oracle
[--input-folder ]
[--output-folder ]
[--log-folder ]
[--application-langOracle]
[--conversion-type ]
Windows操作系統:
runDSC.bat
--source-db Oracle
[--input-folder ]
[--output-folder ]
[--log-folder ]
[--application-lang Oracle]
[--conversion-type ]
遷移不含PL/SQL語句的普通DDL語句(表、視圖、索引、序列等)時,應使用Bulk模式(即,將conversion-type參數設為Bulk)。
以示例文件夾路徑為例,將conversion-type參數設為,命令如下
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參數設為,命令如下:
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遷移注意事項
應將包規范(即包頭)與包體分置于不同文件、相同輸入路徑中進行遷移。
應先使用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)
);
總結
以上是生活随笔為你收集整理的oracle迁移至gaussdb,GaussDB for DWS 数据融合系列第九期:Oracle数据迁移到GaussDB(DWS)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 文件系统位于服务器,如何访问hadoop
- 下一篇: mysql语句编码_使用SQL语句操作M