最近做了些資料庫轉換工作,主要是從Sql Server轉換到Oracle,過程中遇到很多問題,現進行一個小小總結,方便有同樣需求的朋友們。
需要對資料庫結構、資料、自訂函數、預存程序等資料庫元素進行轉換,由於Sql Server和Oracle資料庫語言本身的差異非常大,所以自訂函數和預存程序的轉換是比較困難的一件事情,市面上也很少有這方面的工具,幾乎都想直接寫工具了,後來卻找到了個國外的一個叫做“SwissSQL-SQL Server To Oracle”這樣的工具,此工具可以在http://www.swissql.com/網站上下載,使用方法有兩種,一種是轉換TSQL指令碼到PLSQL,一種是通過JDBC串連到SQLServer資料庫進行轉換,轉換後的結果都儲存為PLSQL指令碼,要匯入Oracle需要運行這些指令碼。此軟體是用Java語言編寫在安裝之前必須先安裝JDK,在試用過程中發現此工具存在這麼幾個問題:
1、此工具在轉換資料結構的過程中把varchar的資料類型都轉換成varchar2(1)了而不管原諒資料有多長統一都轉換成1個長度,我不知道這麼簡單的BUG有沒有其他設定的地方,反正後來我們沒用它轉資料結構也就沒怎麼研究了。
2、此工具為試用版本,我們也沒找到註冊版,而試用版只能前後轉換共2000行SQL語句,而要購買這個軟體也不太實際,費用高不說,還是外國的買起來也麻煩,軟體為轉換這麼幾個預存程序去耗費這麼大的資金在我們這些用盜版的人看來是不可取的,我們的資料庫物件那麼多,顯然這是不好辦的問題,那麼能否用欺騙的手法矇混過關呢?下面就是具體的欺騙手法了:
-記得以前用過一個軟體叫著“完美卸載”此軟體可以記錄安裝程式時對磁碟進行的更改,有了這個我們就可以安裝軟體的時候記錄好此軟體對磁碟所寫入的檔案,看看有什麼異樣這樣我們就能理解共用軟體在那個檔案寫入了註冊資訊。
-通過跟蹤發現在安裝軟體的時候,安裝程式除了對安裝目錄寫入資訊和少量的註冊表資訊外沒有對磁碟做任何更改,別急,我們繼續跟蹤,跟蹤到第一次運行軟體的時候,就有了異樣,發現此軟體在Windows目錄下寫入了這個檔案,趕忙備份此檔案,轉換了幾行語句後,關閉軟體,果然此檔案再次被修改,這就說明很有可能此檔案就是記錄的軟體試用的行數。當我們第二次使用的時候把備份的檔案覆蓋了原檔案,但此事軟體所有按鈕都禁用了,說明軟體還有其他的地方可以判斷使用者是否使用過軟體。重新安裝軟體(其實就是把安裝目錄裡的檔案重設一下),結果又可以使用2000行了。這就是軟體欺騙的全部過程,也是可當作破解軟體的土辦法,只是麻煩一點的是需要先備份安裝目錄和那個dll檔案,注意那個dll檔案不能通用,必須要程式產生的原生dll檔案。當快要用完試用行數的時候通過覆蓋檔案的方式欺騙軟體,從而可以繼續試用,就這麼簡單。
另外在轉換資料庫的過程中應該還要注意以下幾個問題:
-在Oracle資料庫中命名不能大於30個英文字元,無論是表名、預存程序名等等,統統不能大於30個字元。
-在Oracle資料庫中,預存程序的定義更俠義一些,而不像SqlServer那樣開放。特別像返回結果集這些操作上存在很多差異,在SQLServer可以直接試用select語句返回結果集,而Oracle只能把預存程序封裝到包中設定Out參數的Cursor資料類型來達到返回結果集的目的,在預存程序內部不能直接試用Select語句返回結果集,很是不便。
-在使用單純的SQL語句的時候,如果是多條語句,調用Oracle資料庫就必須封裝在begin/end語句塊中。
-手動對Oracle資料庫查詢時可以選用PL/SQL Developer這個工具,蠻好用的。