資料庫表匯出不全導致tomcat無法釋出程式

whyun1984發表於2013-10-12
    今天開發找我調錯誤,tomcat啟動後無法訪問程式,看了下資料庫正常,仔細看了下tomcat的錯誤[org.springframework.jdbc.support.SQLErrorCodesFactory]-SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase]
    發現和資料庫表和程式對不上有關,對比開發庫和生產庫,發現使用者表數量不一致,開發庫比生產庫多近10張表。
    問過倒庫的人員,表示匯出時未報錯。靈光一現,11g的deferred_segment_creation屬性,經查果然如此,重新匯出匯入後,此問題解決。
    通知各個操作人員倒庫完成後
[oracle@vm51 ~]$ sqlplus 業務使用者/密碼
SQL> select count(*) from user_tables;
檢查源庫和目標庫的表數量是否一致
 
 
 
  11G中新特性,當表無資料時,不分配segment,以節省空間
  解決方法:
  1、在空表中插入資料,再rollback,則產生segment。匯出時則可匯出空表。太麻煩。
  2、設定deferred_segment_creation 引數
        alter system set deferred_segment_creation=false;
  該引數值預設是TRUE,當改為FALSE時,無論是空表還是非空表,都分配segment。
  需注意的是:該值設定後對以前匯入的空表不產生作用,仍不能匯出,只能對後面新增的表產生作用。
        如需匯出之前的空表,進入業務使用者,用以下這句查詢使用者下的空表
  select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0
  把查詢結果匯出,執行匯出的語句。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26972107/viewspace-774254/,如需轉載,請註明出處,否則將追究法律責任。

相關文章