1、導言
如你可能想象的,遷移一個數據庫和使用它的應用程序是一件不小的事。要遷移數據庫平台和使用它的應用程序必然會需要做很多工作。在這個包含兩部分的文檔裡,我們將討論圍繞這個過程的所有步驟,問問你自己,要注意些什麼,和怎樣在有限的停機時間窗口中進行所有這些事情。最後,你的技術將獲得提高,無論是通過書籍和刊物、論壇、培訓或是認證。
2、評估移植計劃
在你做任何事情之前,你將需要制定出一個要做什麼的計劃或提綱。我知道,我知道,大家都不喜歡寫文檔。但是這是很重要的一步,因為在技術方面,它將使你決定需要做些什麼,而在管理方面,它將按部就班地描述這個過程,所以他們可以看到這個復雜性,考慮業務影響、必備系統的成本、進行這個移植所需要的資源和整個時間進度表。
這個評估應該包括哪些內容呢?首先,你應該確定你現在用的是哪個版本的MySQL。浏覽一下你現在在使用哪些特性,例如數據類型(numeric、character、enumerated等等),你在使用什麼類型的存儲引擎,例如MyISAM、Innodb等等。想想你在使用什麼索引類型和額外的功能,例如你可能在你的數據庫中使用了視圖和觸發器。還有,檢查一下你數據庫中的存儲過程,因為這些將需要進行重寫。還要仔細地考慮MySQL復制。如果它是為整個數據庫建立的,那麼它將更加趨向於使用Oracle的備用數據庫或DataGuard特性,而如果你使用表復制和你的my.cnf文件裡的通配符語法來使用表,那麼這更有可能是使用Oracle中的物化視圖(以前被稱為快照)來做的。
在Oracle方面,你將需要考慮你所運行的版本下的情況、MySQL豐富的數據類型和對象怎麼匹配到Oracle中。考慮主鍵上的自動增加屬性。盡管Oracle具有序列,但是它的序列和MySQL中的自動增加稍稍有些不同。例如它不保證數字的連續性。因此,你可能會在基於Oracle緩存序列方式的鍵值上遇到問題。思考一下這將怎樣影響你的應用程序的行為。盡管不是移植過程的直接部分,但是你還是需要考慮一下你想怎樣備份你的Oracle系統。輸出工具使用MySQL的mysqldump非常適合,而RMAN當然提供了你在像innobackup或MySQL中可用的ibbackup這樣的工具中可能找到的所有熱備份功能。
在你的評估文檔中,記錄所有這些發現,並盡可能地深入。現在你工作得越勤奮,在之後的移植過程中你遇到的問題就越少。
3、 開發移植和建立
a、准備
准備工作將涉及到建立你的開發環境。這包括申請合適的硬件、建立數據中心、安裝Oracle 軟件,和建立你的啟動數據庫。在建立這些時,考慮一下Oracle 的最優方法,例如使用RAID 10作為你的基礎磁盤存儲。布局你的重復記錄、分配足夠的系統和sysaux表空間,等等。你還將要考慮你的新數據庫的字符設置。注意到US7ASCII 限制歐洲的和帶重音的字符。最好使用WE8ISO8859P1。如果你可能會在你的數據庫中使用亞洲字符,那麼你要看看Oracle 的National Language Services (NLS)功能,並考慮多字節字符集。你還要為數據和索引創建表空間。考慮一下你的源對象的規模。在文件系統上你可以在數據目錄下使用“du -sm dir_name”。留出25-50%的空間用於將來的發展。
b、 數據庫結構移植
在MySQL 方面,提取數據庫的結構(在Oracle中是一個schema)你可以使用下面的方式:
$ mysqldump --no-data my_db_name > my_db_name.MySQL
因為在語法方面有一些不同,你不能在Oracle 中直接運行這個腳本。你所要做的是你自己重寫這些CREATE TABLE 和CREATE INDEX 語句。很顯然,如果在你的數據庫中有大量的對象,那麼你需要考慮采用一種自動的方式來進行這項工作。我們將在這篇文章的第二部分中討論Oracle的移植工作台(Migration Workbench),但是現在我們推薦逐個地重寫這些對象。這也將為你提供數據庫中對象的一個排序目錄,並使你對它們更加了解和將它們都移植過來。開發人員在這個過程中也要保持謹慎。通過將表和對象逐個地改變它們的語法,一方面它們將獲得更新,或換成Oracle 語法,另一方面,真正地浏覽了這些對象,從而考慮在它們的應用程序代碼中可能需要做哪些改動。
最終,應用程序的變更將是移植到一個新數據庫引擎上的龐大的一部分,不論你的開發人員在編寫數據庫獨立代碼方面是多麼的勤快。所以,這個手動過程將使你很好地了解你錯綜復雜的數據庫。
4、總結
是的,將一個數據庫應用程序移植到一個新的平台上例如Oracle 上不是一個簡單的工作,但是它是可以實現的,而且通過適當的准備工作,它也可以被管理起來。在建立任何系統之前,對你目前的系統進行恰當的評估,並在移植之前檢查和管理時間、硬件、軟件和人員所需。
在這篇文章的第二部分,我們將討論從產品中移植實際的數據,檢查Oracle的移植工作台(Migration Workbench),它可以為你節省時間,並討論潛在的應用程序問題和挑戰。然後我們將回顧整個過程,並仔細地計劃你產品數據庫和應用程序的最終移植。