程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> Oracle 導出空表的新方法(徹底解決),oracle新方法

Oracle 導出空表的新方法(徹底解決),oracle新方法

編輯:Oracle教程

Oracle 導出空表的新方法(徹底解決),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、被坑截圖

2

4、解決方法,使用expdp進行導出

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

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

happy 過程如下圖

3

至此問題已經徹底解決

意外收獲

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

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

復出的代價

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

有價值的鏈接

expdp與impdp參數用法

EXP和expdp對比  (速度)

【傳輸表空間】使用 EXPDP/IMPDP工具的傳輸表空間完成數據遷移

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

 

寫在最後

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

 

Oracle 導出空表的新方法(徹底解決)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved