使用SSMA將Oracle數據庫轉成SQL Server 2008
SQL Server Migration Assistant(簡稱SSMA)是由微軟發布的幫助客戶更容易地從Oracle/Sybase/MySQL/Access遷移到SQL Server以及SQL Azure的一個工具集,本文主要介紹使用SSMA將Oracle數據庫轉成SQL Server 2008的過程,希望能對您有所幫助。
數據庫的轉化
這里我們選擇SSMA for Oracle 5.0為例介紹一下SSMA如何幫助您從Oracle遷移到SQL Server 2008 R2。首先我們從這里下載SSMA for Oracle 5.0的壓縮包,解壓縮后有兩個exe文件,SSMA for Oracle 5.0.exe是工具的安裝包,SSMA for Oracle 5.0 Extension Pack.exe必須安裝在SQL Server 2008 R2所在服務器,用來創建一些輔助運行需要的數據庫表和存儲過程等。
首次運行SSMA for Oracle需要一個License,如圖1所示,你可以點擊鏈接,然后根據提示填寫個人信息后免費申請,下載保存之后返回這個對話框選擇你保存License的目錄然后點擊Refresh License按鈕即可運行SSMA for Oracle了。
圖1 License Management對話框
在主窗口File菜單中選擇New Project…菜單項將顯示圖2所示的對話框,輸入項目的名字,選擇SQL Server 2008作為遷移的目標數據庫版本。
圖2 New Project對話框
我們將使用Oracle XE的HR schema為例(下文稱之為HR數據庫以避免歧義,但其實Oracle並沒有SQL Server數據庫類似的概念)。SSMA為提高性能,缺省情況下不加載某些示例數據庫(包括HR數據庫),這個缺省設置可以通過Project Settings來修改,選擇Tools菜單的Project Settings菜單項,在彈出的對話框里點擊General再選擇Loading System Objects,然后勾選HR,如圖3所示。
圖3 Project Settings對話框
然后我們連接Oracle服務器,點擊工具條上的Connect to Oracle,輸入Server名稱、SID和用戶名/密碼,如圖4所示。連接后會有個警告對話框告訴你hr用戶沒有足夠的權限。由於我們只需要遷移HR數據庫,這里可以點擊Continue忽略它。如果你的Oracle服務器上有很多數據庫,數據加載可能需要比較長的時間,請耐心等待
圖4 連接到Oracle服務器
連接上Oracle后我們首先評估一下遷移HR數據庫會不會碰到問題,如果碰到問題大約需要多長時間來解決。評估並不需要連接目標SQL Server,只需要在左上方的樹里展開Oracle服務器名稱,然后展開Schemas,右鍵點擊HR並選擇Create Report,如圖5所示。
圖5 評估HR數據庫
SSMA運行一段時間后會打開一個評估報告的對話框,如圖6所示。這個評估報告很有用,里面會列出HR數據庫里各種對象(包括函數、包、存儲過程、表和視圖等)能夠成功遷移的比例,你可以在左邊的樹里選擇你需要查看的某個對象,比如存儲過程,比較Oracle的PL/SQL語法和遷移后的TSQL語法。
圖6 評估報告
圖7是一個包含有錯誤的評估報告,當包含錯誤時,SSMA會估算手工做轉換大約需要多少時間,這樣你就可以使用評估報告來幫助你做數據庫遷移的時間規划。
圖7 一個包含錯誤的評估報告
首先我們需要連接目標數據庫,點擊工具條上的Connect to SQL Server,輸入Server name,在Database里輸入HR,如圖1所示。如果你的SQL Server里不存在HR數據庫,點擊Connect后SSMA會提示錯誤,問你是否創建HR數據庫,選擇Yes。HR數據庫創建后SSMA可能會提示SQL Server Agent未運行,這僅在使用服務器端數據遷移時才會用到,默認情況下我們使用的是客戶端數據遷移,所以可以點擊Continue忽略。
圖1 連接到SQL Server服務器
連接上SQL Server服務器后我們就可以遷移Schema了,這里的Schema指數據以外的數據庫定義,比如表結構、視圖定義、存儲過程等等。右鍵單擊Oracle Metadata Explorer里的HR數據庫,選擇Convert Schema,如圖2所示。SSMA運行一段時間后會在最下方的Output欄里顯示轉換是否有錯誤、警告或信息。這時你可以展開SQL Server Metadata Explorer里HR數據庫的dbo schema,在Procedures文件夾下會發現ADD_JOB_HISTORY等存儲過程,Tables文件夾下會發現COUNTRIES等表,說明Schema的遷移已經成功。
圖2 轉換Schema
如果這時你使用SQL Server客戶端工具SQL Server Management Studio或者Visual Studio的Server Explorer查看SQL Server上的HR數據庫,你會發現找不到前面所說的存儲過程、表或者視圖。這是因為Convert Schema菜單項只是在SSMA的Project里進行了轉換,並未轉換到數據庫。這么設計為了讓你可以在同步到SQL Server之前再做些其他修改,比如REGIONS表里的REGION_ID列在Oracle里是NUMBER類型,它被SSMA轉換成了最安全的float(53)類型,如果你知道REGION_ID就是個整形,你可以把它修改為int類型,當然你最好對COUNTRIES表的REGION列也做同樣的修改。
在確認Schema遷移沒有問題后,你可以同步到SQL Server數據庫了,在SQL Server Metadata Explorer里右鍵點擊HR數據庫,選擇Synchronize with Database,如圖3所示。
圖3 同步HR數據庫到SQL Server
這時可能會再次彈出SQL Server連接對話框和SQL Server Agent未運行的警告,確認后會顯示Synchronize with the Database對話框,如圖4所示。對話框里列出了SQL Server數據庫和SSMA的樹結構的差別,可以選擇Hide Equal Objects來過濾掉兩邊相同的對象。由於我們連接的是新創建的HR數據庫,所以左側顯示的都是 [Not Found] 狀態,如果你之前做過同步這里會顯示不同的狀態,這里我們點擊OK繼續。等待右下角的進度條走完,留意主窗口Output欄是否報錯,沒有報錯的話SQL Server里的對象應該已經創建好了。
圖4 Synchronize with the Database對話框
再次使用SQL Server Management Studio或者Visual Studio來查看HR數據庫中的對象,會發現一些$SSMA打頭的表或者存儲過程等,這些是遷移一些特殊對象(比如Oracle的Sequence對象)所創建出來的輔助對象。
在成功遷移了Schema之后,我們就可以來進行遷移的最后一步:數據遷移。有了SSMA的幫助數據遷移也非常簡單,右鍵點擊Oracle Metadata Explorer里的HR數據庫,選擇Migrate Data,如圖5所示。SSMA會再次提示Oracle和SQL Server的連接信息,如果之前做過數據遷移可能會有數據覆蓋的警告信息,如果有點擊Continue繼續。
圖5 數據遷移
如果你的數據庫數據比較多,SSMA會運行較長一段時間,在這過程中你可以隨時點擊工具欄上的Stop按鈕來停止數據遷移。遷移結束后,SSMA會有一個數據遷移報告,如圖6所示。該報告描述了遷移過程中那些表的數據被成功遷移,多少行數據被遷移以及耗時多少等等。
圖6 數據遷移報告
本文簡單介紹了如何使用SSMA for Oracle 5.0來幫助我們把一個Oracle數據庫遷移到SQL Server數據庫,包括遷移評估、Schema遷移以及數據遷移。
關於使用SSMA將Oracle數據庫轉換成SQL Server 2008的操作就介紹完畢了,希望通過本文的介紹能夠帶給您一些收獲。