上一次,我使用手工轉(zhuǎn)換SQL腳本的方式進行數(shù)據(jù)庫的遷移,其間過程相當繁瑣,特別是標識符長度的限制讓我焦頭爛額,因為我們的系統(tǒng)中長標識符真是多如繁星,另外,表結(jié)構(gòu)建好之后,數(shù)據(jù)的遷移又是一個相當復雜的過程,因為修改了不少的表名,需要把導出的數(shù)據(jù)和表一一對應(yīng)上。 但是,除了手工的方式之外,其實我們還有更為簡便和自動化的解決方案,那就是ORACLE官方提供的Sql Developer自帶的Oracle Migration Workbench。
下面就把我使用這個工具遷移Microsoft SQL Server 2008數(shù)據(jù)庫到Oracle 11G的過程記錄下來,為了積累也為分享。 第一部分:獲取工具 第二部分:建立資料檔案庫(Migration Repository) 第三部分:數(shù)據(jù)庫移植向?qū)?/span> 第四部分:SqlServer中的架構(gòu)到Oracle中的模式,名稱的處理 第六部分:存儲過程和函數(shù)
首先,當然是獲得工具,該工具在Oracle Sql Developer官方下載頁面里面可以直接下載到。Windows 32位直連地址:Windows 32bit Sql Developer。Oracle Sql Developer需要JDK的支持,在下載頁面中提供了包含JDK的下載包,還有支持各種操作系統(tǒng)的下載選項。 下載后,解壓到任意位置。直接運行程序。第一次運行,需要指定JDK的目錄。 啟動后,我們要做的第一件事,不干別的,先下載SQL SERVER的驅(qū)動程序。點擊菜單幫助,選擇檢查更新,彈出檢查更新向?qū)Т翱?,第一頁一般是廢話,直接下一步,等更新中心列表加載完畢后,只選擇“Third Party SQL Developer extensions”,點擊下一步,等待更新搜索完畢后,中列表中找到并選中 JTDS JDBC Driver,如下圖: 下一步,在許可協(xié)議頁面,點擊“我同意”按鈕后再點下一步,等下載完畢后關(guān)閉窗口,彈出提示需要重啟程序才能完成更新,點擊“是”。等程序重啟完畢。 環(huán)境準備完畢,開始進入到正題移植數(shù)據(jù)庫。
建立資料檔案庫(Migration Repository)
一、連接到Oracle 在程序左邊的連接窗口中,點擊加號按鈕,添加一個到Oracle數(shù)據(jù)庫的dba連接,如下圖: 配置完成后,點擊連接按鈕,連接到數(shù)據(jù)庫。 二,建立用戶 打開到Oracle數(shù)據(jù)的連接,新建一個用戶,我們要在該用戶的模式中建立所謂的“資料檔案庫”,并使用該用戶去建立SQL Server移植后的用戶名,以及做其它的一些工作。按照幫助中的說明,這個用戶最少需要以下權(quán)限和角色:
再次點擊連接中的加號按鈕,添加一個使用剛剛新建立的用戶的連接。 連接后,在該連接上點擊右鍵,選擇移植資料檔案庫-關(guān)聯(lián)移植資料檔案庫,程序會在該用戶下建立移植資料檔案庫所需要的表、存儲過程等等,彈出一個對話框顯示當前建立的進度,稍等片刻即建立完畢。
數(shù)據(jù)庫移植向?qū)?/strong> 一,建立到源SqlServer數(shù)據(jù)庫的連接 在連接窗口中,點擊綠色加號按鈕,打開連接配置窗口,按下圖建立到SqlServer的連接: 因為動態(tài)商品的使用,使得原來SqlServer配置頁中默認的1433往往沒有辦法連接到SqlServer2008數(shù)據(jù)庫,修改為1434即可。 二、啟動數(shù)據(jù)庫移植向?qū)?/span> 建立到SqlServer的連接后,開始對數(shù)據(jù)庫進行移植。有兩個地方可以啟動數(shù)據(jù)庫移植向?qū)?,一個是在新建的SqlServer連接上點擊右鍵,選擇移植到Oracle,另一個是在菜單工具-移植-移植,啟動向?qū)Ш?,第一頁當然是向?qū)У暮喗椋ㄟ^簡介,我們可以知道整個移植過程有7步,并且有兩個先決條件,如下圖: 直接點擊下一步。 三、選擇資料檔案庫 在這個頁面中,我們也可以去建立連接和資料檔案庫,也就是前一部分中我們所做的工作在這里也可以進行。當然選擇我們剛剛建立的migrations連接,如下圖: 這里截斷的意思是將資料檔案庫清空,我們建立一個移植項目后,所有抓取的數(shù)據(jù)庫結(jié)構(gòu)信息、統(tǒng)計信息還有轉(zhuǎn)換記錄等都保存在這個資料檔案庫中,只要項目名稱不同,即使不清空資料檔案庫也不會影響到移植工作。當然,如果希望更“清爽”一點,也可以勾選。這是后話。 四、為轉(zhuǎn)換項目命名 選擇好資料檔案庫后,點擊下一步,為我們的轉(zhuǎn)換項目輸入名稱和備注,以便識別。另外,還需要指定腳本生成目錄,用于存放向?qū)?zhí)行過程中生成的腳本。 五、選擇源數(shù)據(jù)庫連接 然后繼續(xù)下一步,選擇源數(shù)據(jù)庫,在這里有聯(lián)機和離線兩種模式,聯(lián)機即是直接連接到源數(shù)據(jù)進行抓取,而離線則是在SqlDeveloper不直接連接到源數(shù)據(jù)庫的情況下,通過SqlDeveloper提供的腳本預先捕獲數(shù)據(jù)庫,得到數(shù)據(jù)庫結(jié)構(gòu)文件后,通過向?qū)搿?/p> 這里當然是選擇我們剛才建立的SqlServer連接。 六、選擇捕獲源數(shù)據(jù)庫 在這一步中,顯示為兩個多選框,左邊列出Sql Server中所有可選的數(shù)據(jù)庫,通過中間的按鈕將數(shù)據(jù)庫移動到右邊的已選數(shù)據(jù)庫中。如下圖: 七、數(shù)據(jù)類型轉(zhuǎn)換選項 在這一頁中,列出了所有系統(tǒng)內(nèi)置的數(shù)據(jù)類型轉(zhuǎn)換對應(yīng)關(guān)系??梢云溥M行修改,一般不作修改直接下一步。如下圖: 八、選擇目標數(shù)據(jù)庫 與源數(shù)據(jù)庫的選擇一樣,目標數(shù)據(jù)庫的選擇同樣也有聯(lián)機和離線兩種方式。仍舊選擇聯(lián)機。選擇orcl(migrations)連接。 九、移動數(shù)據(jù)選項 這個頁面中,也提供了聯(lián)機或離線兩種方式進行數(shù)據(jù)移動。所謂聯(lián)機雖然“據(jù)說”可以直接以聯(lián)機的方式從源數(shù)據(jù)庫中移動數(shù)據(jù)到Oracle中,可我試過幾次沒有成功,原因不明。最終我選擇了離線的方式進行數(shù)據(jù)移動。所謂離線移動數(shù)據(jù),是在我們指定的腳本存放目錄中生成“數(shù)據(jù)移動”腳本,分別在源數(shù)據(jù)庫中卸載數(shù)據(jù)(即導出)和在目標數(shù)據(jù)庫中加載數(shù)據(jù)。選擇好后,點擊下一步。 十、選項完畢,開始執(zhí)行 在向?qū)У淖詈?,是一個用于確認的“概要”頁面。確認無誤后,點擊完成。移植將會開始執(zhí)行。
SqlServer中的架構(gòu)到Oracle中的模式,名稱的處理 通過執(zhí)行移植向?qū)?,如果沒有錯誤的話,那么表結(jié)構(gòu)基本上都會建立起來了,在連接中打開orcl(migrations)連接,找到最下面的其它用戶,假設(shè)你的表都在dbo架構(gòu)下,那么找到dbo_源數(shù)據(jù)庫名,展開它,可以看到在表中已經(jīng)有原數(shù)據(jù)庫中的所有表。但是,為什么會顯示為dbo_源數(shù)據(jù)庫名呢?我很不喜歡這樣的用戶名。我希望它顯示為源數(shù)據(jù)庫名,要怎樣做呢? 在程序的左下角,是移植項目窗格,在里面可以看到我們剛才建立的移植項目名。展開它,會顯示我們執(zhí)行過向?qū)У娜掌诤蜁r間,繼續(xù)展開,可以看到兩個節(jié)點,叫作捕獲的數(shù)據(jù)庫對象和轉(zhuǎn)換的數(shù)據(jù)庫對象,如下圖: 在捕獲的數(shù)據(jù)庫對象上點擊右鍵,選擇轉(zhuǎn)換,再次打開數(shù)據(jù)移植向?qū)?/span>。點擊下一步,會直接跳轉(zhuǎn)到轉(zhuǎn)換頁,這一次的轉(zhuǎn)換頁面與前一部分的轉(zhuǎn)換頁稍有不同。不同之處在于多出了一個選項卡,叫對象命名,選擇它打開,如下圖所示: 在這個頁面中,顯示了一個數(shù)據(jù)列表,列出了源數(shù)據(jù)庫的表名、字段名、約束名、視圖名、架構(gòu)名等等所有的標識符的原始標識符、新建標識符、是否經(jīng)過轉(zhuǎn)換、原始限定名、標識符類型等信息。因為Oracle中不支持30個字符以上的標識符,所以當碰到原始標識符超過30個字符時,移植向?qū)詣訉⒅財?,如果有重名,則會加上_1之類的后綴。 很明顯,在這里,它把我們原來的dbo架構(gòu)名轉(zhuǎn)換成了dbo_數(shù)據(jù)庫名,我們只要找到它,將新標識符改為數(shù)據(jù)名,即可實現(xiàn)我們這部分的需求。 修改完成后,點擊下一步,接著按之前的設(shè)置完成整個向?qū)?,將修改提交到資料檔案庫中。注意,這次的向?qū)Р]有去幫我建立新用戶和表結(jié)構(gòu)等等,還需要進一步操作。 在主界面中的移植項目窗格,在轉(zhuǎn)換的數(shù)據(jù)庫對象上點擊右鍵,選擇生成目標,再次打開移植向?qū)?,又一次按之前我們的選擇完成整個向?qū)В@一次,才是真正建立了我們想要的用戶名。 然后,把自動生成的老用戶名和模式都刪除掉吧。具體操作就不細說啦。 轉(zhuǎn)移數(shù)據(jù) 上一部分說了移植向?qū)г贠racle數(shù)據(jù)庫中自動生成了我們所需要的表結(jié)構(gòu),但是并沒有幫我把數(shù)據(jù)成功導入過去。于是我們采用了生成離線數(shù)據(jù)移動腳本的方式來導數(shù)據(jù)。 在移植向?qū)е械捻椖宽撝?,我們選擇了腳本生成的目錄,打開該目錄,可以看到一個名為“數(shù)據(jù)移動\項目名稱\日期時間\”的子目錄,其中包含了如下圖所示的文件: 看以看到其中包含了4個腳本文件,兩個是用于Windows的,另兩個是用于*nix的。名為unload_script的是數(shù)據(jù)導出腳本,用于從源數(shù)據(jù)庫中生成數(shù)據(jù)導出文件,名為oracle_ctl的是數(shù)據(jù)導入腳本。 打開cmd,瀏覽到當前目錄,執(zhí)行以下命令以導出數(shù)據(jù):
其中的server是源數(shù)據(jù)庫服務(wù)器,username和password是能訪問到源數(shù)據(jù)庫的用戶名密碼。稍等一會,提示導出完成后,接著執(zhí)行下面命令以導入數(shù)據(jù):
在這里不需要指定數(shù)據(jù)庫名之類的,因為在腳本中已經(jīng)指定了。 等待片刻導入完畢后即可。蠻簡單的。不明白為什么聯(lián)機就是不能成功,做的難道不是一樣的工作嘛。 |
|