oracle數據庫遷移到GBase(南大通用)筆記

最近和同事一起負責將oracle數據庫遷移到國產數據庫GBase上,本想着參考其他數據庫的遷移方法,後來無意間發現GBase客戶端裏面有自帶一個數據庫遷移工具,話說對oracle、sql、mysql、等常用數據庫都支持,只要配置了源數據庫地址和目標數據庫地址以及數據庫名稱即可,(這裏假設源數據庫爲oracle、目標數據庫爲GBase、當然前提是要有這2個數據庫和源數據庫的表了,)然後進行下一步,左邊會列出源數據庫的所有表,把需要遷移的表選到右邊去,然後點擊下一步,左邊會列出需要遷移的表,右邊上面是具體的創建表和添加數據的sql語句了,右下角就是每個字段在源數據庫裏的類型大小以及轉換規則和將要在目標數據庫上創建的字段類型(每種數據庫字段類型和sql語句多少都會有些差異、這和瀏覽器的一個道理、雖然都遵循一個規則、但是總有些“特點”、鄙視一下)。舉個例子,我源數據庫有個varchar(4000)的test_content字段、那要轉到GBase上時、轉換規則是varchar(8000)、這是GBase上varchar類型的最大值,如果源字段低於這個值,目標生成的字段類型就按原來的大小生成。即還是4000,如果超過就會轉換失敗或者丟失信息的可能(沒測試過),還有一些其他的關鍵字比如clob對應blob、date對應datetime等等,點擊下一步 然後點擊遷移即可成功將oracle數據庫遷移到GBase上。

 

遷移過程出現的問題和解決辦法:

1、問題:遷移時、出現某些表遷移失敗的結果,提示“Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs”

1、解決:按這提示和網絡上的資料顯示,這是由於表裏的varchar字段的總寬度已經超過65535字節了(其他類型大小都比較小,只有varchar經常達到上千,當然,大文本類型不算,),所以失敗,必須改成text類型或者blobs類型。但重點是我遷移失敗的幾張表、有些是超過65535、有些卻沒有,後來嘗試着減小字段寬度,居然可以了,同事後來確定了總寬度不能超過65535字節的1/3、也就是最多隻能到21000左右,之後把這幾張表照着這個規律都改了之後再遷移就成功了(可以不用去源數據庫改,在第三步創建表的sql語句那裏直接改就行了,這樣也可以保證這些操作不會影響到源數據)目前還不知道爲什麼提示最大到65535 卻只能到他的1/3.有知道的可以告知一下,不勝感激!

2、問題:數據庫全部遷移過去--項目里加入GBase驅動包以及方言--連接池配置GBase的地址和表空間以及賬戶密碼--登陸系統--出現視圖分頁顯示不正常。

2、解決:方言裏的分頁語句和查詢總數的語句有問題,分頁查詢GBase好像是從索引1開始,而不像其他數據庫是從索引0開始,還有查詢總數時,多了一句截取到第一個t(數據庫查詢時的別名)的前面的sql語句,舉個例子:表名是test_form,存放10條數據,三條數據的view_unid字段(外鍵)是123,其他的是345,我需要的sql語句是select count(*) form test_form t where t.view_unid=‘123’的 如果這裏加上一句截取第一個t前面的sql語句來查詢就會照成查詢出來的是10條,而不是我要的3條,這不應該說是gbase的問題,是業務方面問題,因爲一個表裏存放的數據所屬的視圖不一樣,視圖查詢時就會帶上條件,而在gbase計算總數方法裏,他肯定只能考慮整張表裏的所有數據,所以才截取第一個t之前的sql語句,根據業務上的需求,把那句去掉即可。

 

其他:GBase裏的轉換規則可以自己添加刪除。但是要符合目標數據庫的限度,否則肯定是掛了。。。

備份。。。存檔。。。以後再回頭溫習。

 

發佈了11 篇原創文章 · 獲贊 1 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章