Oracle 匯出空表的可用方法

來源:互聯網
上載者:User

Oracle 匯出空表的可用方法
背景

    使用Exp命令在Oracle 11g 以後不匯出空表(rowcount=0),是最近在工作中遇到一個很坑的問題,甚至已經被坑了不止一次,所以這次痛定思痛,準備把這個問題徹底解決。之所以叫新方法,那一定有老方法了,這個方法是一位博友很早就提出了,以下是原文,其實也說明了問題的原因

Oracle11g使用exp匯出空表 

問題根本原因:“Oracle11g預設對空表不分配segment,故使用exp匯出Oracle11g資料庫時,空表不會匯出”

問題次要原因: 在開發維護期往往需要頻繁的做資料庫的匯入匯出操作,使用老方法確實可以解決問題,但是某一次忘記就徹底悲劇

問題擴充:本人發現有時候一些Type,管道類型也無法匯出,造成過程,函數編譯不通過

解決方案

  解決方案其實很簡單,就是用expdp,impdp命令代替exp,imp命令徹底解決這個問題,實驗如下:

1、建立空表

-- Create table
create table TestEmpty
(
  id  number,
  name number
)
tablespace XXXTEMP
  storage
  (
    initial 1M
    next 1M
    minextents 1
    pctincrease 0
  );

2、exp匯出語句

exp system/a@orcl225 File=x.dmp owner=someuser

3、被坑

4、解決方案,使用expdp進行匯出

expdp scott/tiger@orcl schemas=scott dumpfile=expdp.dmp DIRECTORY=dpdata1;

(關於expdp,impdp的用法請自行baidu或者參考文章下部提供的外鏈)

happy 過程如

至此問題已經徹底解決

意外收穫

1、提升匯出匯入速度,在使用expdp和impdp進行Oracle資料庫的匯入匯出,還會給你帶來一些意外收穫,如匯出速度有明顯的提升,而且輸出的日誌也更加準確美觀,其實用普通的exp做50w行記錄匯出表是簡直就是個弱暴了工具(從速度上和Sql server差了不知道幾條街)

2、可以進行資料表空間匯出(exp其實也可以)

複出的代價

看起來很美好,但是expdp,impdp其實也是有限制的,就是必須在伺服器上進行IO操作(具體就是DIRECTORY這參數有關,這裡不在詳細解釋了,自己看教程去)

有價值的連結

expdp與impdp參數用法 

EXP和expdp對比 

【傳輸資料表空間】使用 EXPDP/IMPDP工具的傳輸資料表空間完成資料移轉 

exp/imp與expdp/impdp區別 (文法)

寫在最後

      寫的不好,不喜歡的可以打賞繼續鼓勵,喜歡的可以點推薦給予支援且隨便打賞,開個玩笑,分享出來只是希望我的一點經驗是有用的,避免諸位入坑。

相關文章

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.