詳解數據庫導入導出命令語句


比較常用的一些參數:

exp:導出(imp導入)常用的參數
icdmain/icd:當前用戶名和密碼(如:oracle默認用戶scott/tiger)
rows=y:具體的行 
indexes=n:索引數 
compress=n:壓縮數 
buffer=65536 :緩存數
file=exp_icdmain_csd_yyyymmdd.dmp:導出數存放地址和文件名(你自己定義導出的文件叫什么名字,隨意)
log:exp_icdmain_csd_yyyymmdd.log:導出日志文件名(也是自己定義)
tables:你要導出的表(如:emp,dept可以導一張表,也可以同時導出多表)
注意:這些關鍵詞不是說要全部寫,比如要導出表,不需要寫索引數等其他東東了。

exp參數詳解:

以下表中為全部參數:

關鍵字 備注
USERID 用戶名/口令
FULL 導出整個文件 (N)
BUFFER 數據緩沖區的大小
OWNER 所有者用戶名列表
FILE 輸出文件 (EXPDAT.DMP)
TABLES 表名列表
COMPRESS 導入一個范圍 (Y)
RECORDLENGTH IO 記錄的長度
GRANTS 導出權限 (Y)
INCTYPE 增量導出類型
INDEXES 導出索引 (Y)
RECORD 跟蹤增量導出 (Y)
ROWS 導出數據行 (Y)
PARFILE 參數文件名
CONSTRAINTS 導出限制 (Y)
CONSISTENT 交叉表一致性
LOG 屏幕輸出的日志文件
STATISTICS 分析對象 (ESTIMATE)
DIRECT 直接路徑 (N)
TRIGGERS 導出觸發器 (Y)
FEEDBACK 顯示每 x 行 (0) 的進度
FILESIZE 各轉儲文件的最大尺寸
QUERY 選定導出表子集的子句
下列關鍵字僅用於可傳輸的表空間
TRANSPORT_TABLESPACE 導出可傳輸的表空間元數據 (N)
TABLESPACES 將傳輸的表空間列表

 


IMP參數詳解:
使用的格式是:IMP KEYWORD=value 或 KEYWORD=(value1,value2,...,valueN)

其中USERID是必須的且為第一個參數

 

關鍵字 備注
USERID 用戶名/口令
FULL 導入整個文件(N)
BUFFER 數據緩沖區大小
FROMUSER 所有者用戶名列表
TOUSER 用戶名列表
FILE 輸入文件 (EXPDAT.DMP)
SHOW 只列出文件內容(N)
TABLES 表名列表
IGNORE 忽略創建錯誤 (N)
RECORDLENGTH IO 記錄的長度
GRANTS 導入權限 (Y)
INCTYPE 增量導入類型
INDEXES 導入索引 (Y)
COMMIT 提交數組插入 (N)
ROWS 導入數據行 (Y)
PARFILE 參數文件名
LOG 屏幕輸出的日志文件
CONSTRAINTS 導入限制 (Y)
DESTROY 覆蓋表空間數據文件 (N)
INDEXFILE 將表/索引信息寫入指定的文件
SKIP_UNUSABLE_INDEXES 跳過不可用索引的維護 (N)
FEEDBACK 每 x 行顯示進度 (0)
TOID_NOVALIDATE 跳過指定類型 ID 的驗證
FILESIZE 每個轉儲文件的最大大小
STATISTICS 始終導入預計算的統計信息
RESUMABLE 在遇到有關空間的錯誤時掛起 (N)
RESUMABLE_NAME 用來標識可恢復語句的文本字符串
RESUMABLE_TIMEOUT RESUMABLE 的等待時間
COMPILE 編譯過程, 程序包和函數 (Y)
STREAMS_CONFIGURATION 導入流的一般元數據 (Y)
STREAMS_INSTANTIATION 導入流實例化元數據 (N)
下列關鍵字僅用於可傳輸的表空間
TRANSPORT_TABLESPACE 導入可傳輸的表空間元數據 (N)
TABLESPACES 將要傳輸到數據庫的表空間
DATAFILES 將要傳輸到數據庫的數據文件
TTS_OWNERS 擁有可傳輸表空間集中數據的用戶

 

以上內容為表格描述,可以讓人一目了然,接下來用文字描述:

一、導出模式(三種模式)及命令格式

1、 全庫模式

  exp 用戶名/密碼@網絡服務名 full=y file=路徑\文件名.dmp log=路徑\文件名.log

2、 用戶模式(一般情況下采用此模式)

  exp 用戶名/密碼@網絡服務名 owners=(用戶1,用戶2,用戶3,…) file=路徑\文件名.dmp log=路徑\文件名.log

3、 表模式

  exp 用戶名/密碼@網絡服務名 tables=(表名1,表名2,表名3,…)file=路徑\文件名.dmp log=路徑\文件名.log

4、 另外,還可以只導出某個表空間

  exp 用戶名/密碼@網絡服務名 tablespaces=(表空間1,表空間2,表空間3,…) file=路徑\文件名.dmp log=路徑\文件名.log

二、導入模式(三種模式)及命令格式

1、 全庫模式

  imp 用戶名/密碼@網絡服務名 full=y file=路徑\文件名.dmp log=路徑\ds110.log

2、 用戶模式(一般情況下采用此模式)

  imp 用戶名/密碼@網絡服務名 file=路徑\文件名.dmp fromuser=導出的用戶名 touser=導入的用戶名 log=路徑\ds110.log

3、 表模式

  imp 用戶名/密碼@網絡服務名 tables=(表名1,表名2,表名3,…)file=路徑\文件名.dmp fromuser=導出的用戶名 touser=導入的用戶名 log=路徑\ds110.log

4、 另外,還可以只導入某個表空間

  imp 用戶名/密碼@網絡服務名 tablespaces=(表空間1,表空間2,表空間3,…) file=路徑\文件名.dmp fromuser=導出的用戶名 touser=導入的用戶名 log=路徑\ds110.log

三、導入的命令參數說明

USERID 用戶名/密碼

FULL 是否全庫導入 (Y 或 N),默認為 N

BUFFER 數據緩沖的大小

FROMUSER 導出的用戶列表,即導入文件是從哪個用戶導出的

TOUSER 導入的用戶列表,即要到哪個用戶中

FILE 導入文件,是dmp文件

SHOW 只列出文件內容 (Y 或 N) ,默認為 N

TABLES 要導入的表名列表

IGNORE 在導入過程中是否忽略錯誤 , 默認為 N

RECORDLENGTH 記錄的長度,默認為operating system-dependent

GRANTS 導入權限 (Y 或 N),默認為Y

INCTYPE 導入的類型是否為遞增(Y 或 N),默認為 N

INDEXES 導入索引 (Y 或 N) ,默認為Y

COMMIT 在導入過程中,是否導入一行數據,提交一行 (Y 或 N)默認為N,即在每個表導入后,進行提交

ROWS 導入行數據 (Y 或 N) ,默認為 Y

PARFILE 參數文件名

LOG 輸出的日志文件

DESTROY 是否覆蓋表空間上的數據文件 (Y 或 N) 默認為N

INDEXFILE 將表或索引信息寫到指定的文件中

CHARSET 導出文件的字符集,默認為 NLS_LANG

ANALYZE 在導入時執行ANALYZE語句 (Y 或 N) 默認為 Y

FEEDBACK 在導入時每個幾行顯示進度,默認為0

四、導出的命令參數說明

USERID 用戶名/密碼

FULL 是否全庫導入 (Y 或 N),默認為 N

BUFFER 數據緩沖的大小

OWNER 導出的用戶列表

FILE 導出文件,是dmp文件

TABLES 要導出的表名列表

COMPRESS 是否壓縮(Y 或 N), 默認為Y

RECORDLENGTH 輸入輸出記錄的長度,默認為operating system-dependent

GRANTS 導出權限 (Y 或 N),默認為Y

INCTYPE 導出的類型是否為遞增(Y 或 N),默認為 N

INDEXES 導出索引 (Y 或 N) ,默認為Y

RECORD 是否在系統SYS.INCEXP, SYS.INCFIL中記錄一個遞增或累計的導出(Y 或 N) , 默認為Y

ROWS 導出行數據 (Y 或 N) ,默認為 Y

PARFILE 參數文件名

CONSTRAINTS 是否導出約束,(Y 或 N) ,默認為 Y

CONSISTENT 在執行導出操作時是否加事務(Y 或 N),默認為 N

LOG 輸出的日志文件

STATISTICS 在導出時執行ANALYZE語句 (Y 或 N) 默認為 Y

DIRECT direct path (N)

FEEDBACK 在導出時每個幾行顯示進度,默認為0

五、導出的對象

1、 全庫模塊

可以導出除sys用戶擁有的所有數據庫對象,包括:表空間的定義、配置文件、用戶定義、角色、系統權限授權、角色授權、默認角色、resource costs、會滾段的定義、數據庫鏈接、虛列、所有目錄別名、所有外部函數庫、所有對象類型、所有簇定義;對於每個表,還可導出表使用的對象類型定義、表定義、表數據、嵌套表數據、表索引、表約束、表授權、分析表、列和表注釋、審核信息、所有引用的完整性約束、所有同義詞、所有視圖、所有存儲過程、包、函數、所有觸發器、分析簇、快照、job、all refresh groups and children

2、 用戶模塊

對象類型、數據庫鏈路、序列、簇定義,對於每個表,還可導出表使用的對象類型定義、表定義、表數據、嵌套表數據、表索引、表約束、表授權、分析表、列和表注釋、審核信息、屬於當前用戶的表所引用的完整性約束、同義詞、視圖、存儲過程、包、函數、觸發器、分析簇、快照、job、refresh groups

3、 表模式

可導出表使用的對象類型定義、表定義、表數據、嵌套表數據、表索引、表約束、表授權、分析表、列和表注釋、審核信息、表引用的完整性約束、觸發器,還可導出其他用戶擁有的觸發器、其他用戶用戶的索引

六、導入時的順序

1、 字符集

2、 表定義

3、 表數據

4、 表索引

5、 完整性約束、觸發器、bitmap索引

6、 視圖、函數、過程

7、 包

七、給你舉幾個栗子:

  數據導出:

  1、 將數據庫TEST完全導出,用戶名system 密碼manager 導出到D:\daochu.dmp中

    exp system/manager@TEST file=d:\daochu.dmp full=y

  2、 將數據庫中system用戶與sys用戶的表導出

    exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys)

  3、 將數據庫中的表table1 、table2導出

    exp system/manager@TEST file=d:\daochu.dmp tables=(table1,table2)

  4、 將數據庫中的表table1中的字段filed1以"00"打頭的數據導出

    exp system/manager@TEST file=d:\daochu.dmp tables=(table1) query=\" where filed1 like '00%'\"

  上面是常用的導出,對於壓縮我不太在意,用winzip把dmp文件可以很好的壓縮。

  不過在上面命令后面 加上 compress=y  就可以了

  數據的導入

   1、將D:\daochu.dmp 中的數據導入 TEST數據庫中。

    imp system/manager@TEST  file=d:\daochu.dmp

  上面可能有點問題,因為有的表已經存在,然后它就報錯,對該表就不進行導入。

  在后面加上 ignore=y 就可以了。

  2 將d:\daochu.dmp中的表table1 導入

    imp system/manager@TEST  file=d:\daochu.dmp  tables=(table1)

  基本上上面的導入導出夠用了。不少情況我是將表徹底刪除,然后導入。

八、對於備份數據庫而言:

  備份某個用戶模式下的所有對象。業務數據庫通常采用這種備份方式。
  若備份到本地文件,使用如下命令:
  exp icdmain/icd owner=icdmain rows=y indexes=n compress=n buffer=65536
  feedback=100000 volsize=0
  file=exp_icdmain_yyyymmdd.dmp
  log=exp_icdmain_yyyymmdd.log
  若直接備份到磁帶設備,使用如下命令:
  exp icdmain/icd owner=icdmain rows=y indexes=n compress=n buffer=65536
  feedback=100000 volsize=0
  file=/dev/rmt0
  log=exp_icdmain_yyyymmdd.log
  注:如果磁盤有空間,建議備份到磁盤,然后再拷貝到磁帶。如果數據庫數據量較小,可采用這種辦法備份。

導入時會出現的問題:

九、導入工具imp可能出現的問題

1、數據庫對象已經存在

  一般情況, 導入數據前應該徹底刪除目標數據下的表, 序列, 函數/過程,觸發器等;數據庫對象已經存在, 按缺省的imp參數, 則會導入失敗;如果用了參數ignore=y, 會把exp文件內的數據內容導入;如果表有唯一關鍵字的約束條件, 不合條件將不被導入,如果表沒有唯一關鍵字的約束條件, 將引起記錄重復

2、 數據庫對象有主外鍵約束
   這發生在將幾個包含表的DMP文件分別導入數據庫時,不符合主外鍵約束, 數據便會導入失敗;解決辦法: 先導入主表, 再導入依存表;disable目標
導入對象的主外鍵約束, 導入數據后, 再enable它們
3、 權限不夠          
  如果要把A用戶的數據導入B用戶下, 做導入操作的用戶需要有imp_full_database權限
4、 導入大表( 大於80M ) 時, 存儲分配失敗
  默認的EXP時, compress = Y, 也就是把所有的數據壓縮在一個數據塊上,導入時, 如果不存在連續一個大數據塊, 則會導入失敗,導出80M以上的大
表時, 記得compress= N, 則不會引起這種錯誤.
5、 imp和exp使用的字符集不同
  如果字符集不同, 導入會失敗, 可以改變unix環境變量或者NT注冊表里NLS_LANG相關信息,導入完成后再改回來.
6、 imp和exp版本不能往上兼容

  imp可以成功導入低版本exp生成的文件, 不能導入高版本exp生成的文件

以下鏈接還有詳解,部分出自以下鏈接: https://www.cnblogs.com/iampkm/archive/2013/02/27/2934927.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM