今天PMO下達任務單,校訊通資料庫從sybase系統改造到Oracle系統,進行了對象的總計有312張實體表,20個過程,通過手工敲,那肯定是猴年馬月的事情,不符合專案工作的工期進度。以下是本次轉化的快捷方法:
1、通過powerdesigner的Change Current DBMS操作。
new dbms 選擇ORACLE Version 10gR2替換current dbms的Sybase AS Enterprise 12.5.3a。
符合期望的:通過此步操作char、varchar、numeric、datetime轉向了我們期望的char、varchar2、number、date。
不符合期望的:integer沒有轉向我們期望的number,預設值getdate()沒有轉向我們期望的SYSDATE,default ''沒有轉為有效default ' '。針對oracle 空串是無效的。索引名保留了sybase特性,對象中唯一,卻沒有符合oracle的全域唯一。過程那是原原本本保留了sybase的指令碼。
2、開始針對不符合期望的改造工作
校訊通資料庫設計文檔是用powerdesigner15版本設計的,可以直接通過編輯工具editplus,UltraEdit開啟,本質上是xml檔案,然後尋找integer類型定義關鍵字串。
類型定義:<a:DataType>INTEGER</a:DataType> 統一修改成了 <a:DataType>NUMBER(10)</a:DataType>。
針對本質是布爾類型,是和否的判斷的,顯然NUMBER(1)就行,在定義此類欄位名時有顯著特徵is_開頭,通過EltraEdit開啟找到<a:Code>is_字串,在此字串附近定位到針對這個欄位的類型定義,由於做了前面步驟,都已經改成了NUMBER(10)統一改為NUMBER(1),針對其他欄位,雖然可能有的欄位長度不需要10,個別對待修改。
預設值定義:<a:DefaultValue>getdate()</a:DefaultValue>統一修改成了<a:DefaultValue>SYSDATE</a:DefaultValue>,在sybase中的default ''後來經分析確認,通過編輯工具打xml真實定義是<a:DefaultValue>''</a:DefaultValue>統一修改成了<a:DefaultValue>' '</a:DefaultValue>中間加入一空格,Oracle可以支援。
做了以上兩步之後,表對象定義的類型以及預設值都符合了期望,至於索引名稱由於要全域唯一,只能通過手工修改了,包括過程也是。通過統一替換已經給我們節省了不少時間,趕上專案工作單的計划進度不成問題了。其他類型的資料庫設計文檔的DBMS轉換可以參考類似。
修改的規範參見:資料庫設計規範