天天看點

雲貝教育 |【技術文章】遷移工具說明

作者:雲貝教育

作者:劉曉峰

原文連結:TDPUB數加社群

1.工具示範

雲貝教育 |【技術文章】遷移工具說明

這兩個檔案放在同一目錄下,然後打開cmd,在jar包所在目錄執行下面指令

java -jar Migration-0.0.1-SNAPSHOT.jar

如下

雲貝教育 |【技術文章】遷移工具說明

如果報錯8080端口被占用,可以嘗試修改application.yml配置檔案裡的端口号再次執行

雲貝教育 |【技術文章】遷移工具說明

然後浏覽器輸入http://localhost:8080/,出現下面的頁面

雲貝教育 |【技術文章】遷移工具說明

選擇好資料源,然後選擇好對象,點選第一個按鈕,就會下載下傳此對象以及此對象所有依賴,如果需要對比兩個環境不同的代碼進行遷移,則填好對象後,點選第二個按鈕,就會下載下傳不同的對象。

2. application.yml說明

繼續看這個圖

雲貝教育 |【技術文章】遷移工具說明

driver-class-name: oracle.jdbc.OracleDriver表示隻能讀取oracle資料庫

url是固定寫法,比如我的測試環境監聽如下

雲貝教育 |【技術文章】遷移工具說明

這樣就對應了ip+端口+服務名

Local表示目前測試環境,remote可以表示正式環境或者待遷移代碼的環境,目的是從local遷移到remote

3. 資料庫使用者要求

在mapper檔案中,涉及到dba_objects,dba_dependenciesd等權限查詢依賴讀寫

需要DBMS_METADATA下載下傳對象,

需要DBMS_CRYPTO 進行散列,進而判斷對象是否發生了改變(可以使用第三方的散列工具,防止不同版本的資料庫之間散列函數不同導緻結果不同)

是以下面給出從零開始建立使用者并授權語句

初始化使用者 授權

“初始化使用者”需要自行修改表空間,如果使用者已經存在,可以隻執行“授權”

兩個環境local和remote使用者都要授權,最好不要用管理者使用者,以防出現異常或者JAR包被修改導緻資料庫對象受損,隻要是隻讀使用者,資料庫會保證對象不被修改,從頭到尾執行的存儲過程隻有DBMS_METADATA,DBMS_CRYPTO 和dbms_monitor

4. 初始化對象并測試

執行下面的腳本進行測試

初始化遷移環境

然後回到頁面,執行下載下傳

雲貝教育 |【技術文章】遷移工具說明

壓縮包内容如下:

雲貝教育 |【技術文章】遷移工具說明

按順序編譯

5. 端點服務

前端頁面采用thymeleaf開發,可以自行實作前端頁面,這裡也提供了端點服務,可以直接用postman調用

  • GET請求

1. 下載下傳所有程式包:

http://localhost:8080/downloadAllDependenciesFile?owner=APPS&objectName=CUX_TABLE_PUB&objectType=PACKAGE&dataSource=local

2. 下載下傳依賴圖:

http://localhost:8080/downAllDependenciesGraph?owner=APPS&objectName=CUX_TABLE_PUB&objectType=PACKAGE&dataSource=local

3. 對比并下載下傳源碼

http://localhost:8080/downloadCompareDependenciesFile?owner1=APPS&objectName1=CUX_TABLE_PUB&objectType1=PACKAGE&dataSource1=local&owner2=APPS&objectName2=CUX_TABLE_PUB&objectType2=PACKAGE&dataSource2=remote

  • POST請求

1. 擷取所有對象節點

http://localhost:8080/getAllDependencies

{
"owner":"APPS",
"objectName":"CUX_TEST_A",
"objectType":"PACKAGE",
"dataSource":"local"
}           

示例如下

雲貝教育 |【技術文章】遷移工具說明

紅框是需要注意修改的

2. 下載下傳圖

http://localhost:8080/allDependenciesGraph

{
"owner":"APPS",
"objectName":"CUX_TEST_A",
"objectType":"PACKAGE",
"dataSource":"local"
}           

3. 下載下傳圖資料結構

http://localhost:8080/allDependenciesGraphCode

{
"owner":"APPS",
"objectName":"CUX_TEST_A",
"objectType":"PACKAGE",
"dataSource":"local"
}           

6. 其它說明

1.項目JDK版本是JDK17,如果不能正常運作,請使用java --version檢視并更新目前版本

下圖是我的JRE版本(JDK包括JRE,JDK17及以上都可以适配)

雲貝教育 |【技術文章】遷移工具說明

如果報錯,可以去下面連結下載下傳配置JDK

2.依賴圖基于jgrapht-core實作,效果着實有點醜,可以使用http://localhost:8080/allDependenciesGraphCode傳回邊和頂點資訊,然後使用第三方架構自己實作圖

3.雖然項目存儲節點資訊的對象全是原型Bean,但是未充分測試并發情況下,其對象是否被其它請求篡改,是以最好隻在本地部署,如果部署到伺服器,需要多次測試(部署方法是一樣的)

4.為監控本工具對資料庫負載影響,已為工具申請的會話設定了用戶端辨別

可以用下面sql進行查詢

select * from v$session s where s.client_identifier='mybatis';           

當開啟資源消耗統計後就可以進行查詢

begin
dbms_monitor.client_id_trace_enable(client_id => 'mybatis');
end;
select * from v$client_stats;--需要開啟client_id_trace_enable           

當開啟跟蹤後就能為這些會話生成跟蹤檔案

begin
dbms_monitor.client_id_trace_enable(client_id => 'mybatis');
end;           

生成跟蹤檔案文法

trcsess  output=/tmp/mybatis_trace.trc  clientid='mybatis'            
/usr/local/oracle19c/diag/rdbms/prod_primary/DUPDB/trace/*.trc              
/usr/local/oracle19c/diag/rdbms/prod_primary/DUPDB/trace替換成自己的trace檔案所在路徑           

7.報錯資訊暫時未完善,比如你輸入不存在的對象,可能界面沒有反應,控制台會輸出報錯

8.兩個資料庫的對象必須要求owner(schema)一緻,如果測試環境的APPS使用者和正式環境的CUX使用者,即使源碼一緻,仍然視為不同的對象

9.輸入的字元串必須大寫

7. 原文附件 連結

https://yunbee-size-video.oss-cn-hangzhou.aliyuncs.com/database/oracle/%E6%8A%80%E6%9C%AF%E6%96%87%E7%AB%A0/%E8%BF%81%E7%A7%BB%E5%B7%A5%E5%85%B7%E8%AF%B4%E6%98%8E%20%E9%99%84%E4%BB%B6.docx

繼續閱讀