2011年5月6日 星期五

Oracle轉換至SQL Server的介紹與流程和轉換比率

        近日接到一個需求,要將公司的資料庫從 Oracle 轉換到 Microsoft SQL Server,原本以為可以透過SQL Server Integration Services (SSIS)來處理,但是該軟體只能手動單一的處理,所以只好另找他法,而剛好想起可以透過SQL Server Migration Assistant  for Oracle (SSMA)來處理,而最近 v5.0 的版本也推出(可以參考我的上一篇文章說明),所以剛好可以透過此軟體進行轉換測試,也剛好測試一下新軟體在整體轉換的處理上,表現如何。

測試環境:
Oracle 10G
SQL Server 2008 R2 Express + SQL Server 2011(Denail)
SQL Server Migration Assistant (SSMA) for Oracle v5.0
個人電腦備配:lenovo x201
CPU:Inter Core i5
MEM:4G

 A、SSMA軟體本身是免費的,總共有兩個安裝檔,另一個則是Extension Pack,在安裝的過程中會請你指定Registration Key,可以直接透過安裝的畫面上的鏈結點選後進行申請即可,過程如下。






B、啟動軟體後畫面如下,先新增一個專案,並選擇SQL Server的版本後,然後再依序點選Connect to Oracle和Connect to SQL Server,連線完成後,再點選要轉換的Oracle物件,然後再點選Convert Schema將點選的物件轉換載入,載入的過程中尤其是Table的物件轉換會最久,實際轉換2400個左右的表格,約需要6~7個小時,載入完成後,就會看到在SQL Server中會有一個虛擬的對應資料庫出現,請注意這個資料庫本身是不存在的,需要點選 Synchronize with Database,才會實際同步化到SQL Server的資料庫中,當同步化完成後,再將點選Migrate Data即可完成資料庫資料的轉換。

1、SSMA視窗畫面

2、新增專案:

3、Connect to Oracle

4-1、此視窗提供的訊息主要說明,轉換的過程中將不支援的項目。

5、Connect to SQL Server

5-1、此視窗提供的訊息主要說明,轉換的過程中將不支援的項目。

6、Synchronize with Database

6-1、同步比對結果,可以看出兩個資料庫之中的差異,並進行同步。

7、Migrate Data


C、整體轉換完成度統計:

         目前經測試後整體物件轉換比率約有99.93%,有一個主鍵值有轉換失敗,主要原因為該資料表的主機欄位數超過16個時,會無法建立,另外物件 [Synonyms],[Sequences] 這兩個部份也是不能轉換的,[Sequences]在SQL Server 2011雖然有支援,但是實際測試後產生的語法還是有問題,還是需要手動建立。

資料表資料轉換的部份,也有發生問題,主要是問題為 [插入重覆的PK值], 原因為Microsoft SQL Server上資料表的資料限制上是不分大小寫,而Oracle有區分,所以主鍵值同時新增 ’Cary’ 和 ’cary’ 兩筆資料至資料表時,在Oracle是可以成功的,但是在Microsoft SQL Server上只有第一筆是成功,第二筆會失敗,所以才會發生這個問題。

資料庫物件轉移統計:
Object
Total
Successfully
Failed
Table Schema
2448
2448
0
     Primary Key
2333
2332
1
     Index
474
474
0
     Column
50986
50986
0
View Schema
1
0
0
Synonyms
36
0
36
Sequences
4
0
4
Procedure
7
7
0
Function
3
3
0
Total
56292
56250
41

資料表資料轉移統計:
Successfully
Failed
2393
55

根據這次的測試發現大概已有九成已上的轉換率,我預計再針對發現的問題規劃出更完整轉換方案,再請大家參考。

關鍵字:Oracle、SQL Server 2008、SQL Server 2011、SQL Server Migration Assistant for Oracle v5.0、SSMA

2 則留言:

  1. 請問這個SSMA可以用來當成 SQL REPLICATION的另一種替換品嗎?
    我們公司有一個類似的需求,但是並非要轉換成SQL 而是保留ORACLE為資料來源,但程式是向SQL查詢並要求同步
    謝謝

    回覆刪除
  2. 我們公司也有類似需求,此作業類似MIRROR DB的概念,請問有辦法做到嗎?

    回覆刪除