資料庫遷移,postgresql到oracle9i

來源:互聯網
上載者:User

手頭上的項目現在需要遷移到oracle9i上,原先用的是postgresql,用了幾天的時間遷移成功了,記錄一下遷移過程:


1、首先要知道oracle和postgresql某些類型的區別:

postgresql --> oracle:

----------------------------

text -->clob


bigint --> numvber(38)

boolean --> CHAR(1),用T,F來表示,也可以用number(1),用0和1表示.我這裡採用的是CHAR(1)


2、下面是建表要注意的事項:

2.1、在oracle中,number、commnet等是關鍵字,注意在建表的sql語句中要加上雙引號。

2.2、alter table時沒有ONLY選項。
2.3、沒有串聯更新: ON UPDATE CASCADE。

2.4、約束條件名稱不能相同。

2.5、如果需要用到別名,在欄位後面可以用as,但注意表名後面不要加as!


3、這次資料庫遷移的一個要求是:在不改動原先程式的前提下,只通過改動設定檔和資料庫結構來完成遷移工作。該系統的主要架構是J2EE+SSH+Tomcat+Postgresql。原型通過hibernte來映射的實體類中有不少是java的boolean類型,而oracle沒有boolean類型,這就需要通過hibernate來對布爾類型進行映射了。

首先把建表語句從postgresql匯出來,然後根據前面提到的注意點進行修改,在oracle中建立好表。


4、通過hibernate來對boolean類型進行映射:

4.1在實體類的對應檔中,把boolean或java.lang.Boolean類型改為true_false,如:

    <property        name="isDefault"        type="true_false"        column="is_default"        not-null="true"         length="1"    >        <meta attribute="use-in-tostring">true</meta>        <meta attribute="use-in-equals">true</meta>        <meta attribute="field-description">           @hibernate.property            column="is_default"            length="1"            type="true_false"        </meta>        </property>

4.2 在hibernate的屬性設定檔中配置hibernate.query.substitutions選項:如:

        <property name="hibernateProperties">            <props>                <!--  <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>-->                <prop key="hibernate.dialect">${hibernate.connection.dialect}</prop>                <prop key="hibernate.show_sql">${hibernate.connection.show_sql}</prop>                <prop key="hibernate.format_sql">true</prop>                <!-- 為相容oracle,讓hibernate自動對T/F和true/false進行轉換,資料庫欄位為CHAR(1)類型 ,                在hibernate的對應檔中用type="true_false"-->                <prop key="hibernate.query.substitutions">true 'T',false 'F'</prop><!--                 如果資料庫用 MS SQLServer,此屬性要設為false,否則系統啟動時會拋出異常:Unsupported method:ResultSet.absolute              如果支援scrollable result,使用ResultSet的absolute方法直接移到查詢起點,沒有額外效能開銷,如果不支援的話,使用迴圈語句,rs.next一點點的移過去。 -->                <prop key="hibernate.jdbc.use_scrollable_resultset">true</prop>            </props>        </property>

這樣就差不多把表結構遷移了,至於匯入資料這裡就不說了,主要注意的是有主從關係的資料表匯入的順序。



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.