使用exp&imp工具進行數據庫備份及恢復
1、exp/imp使用方法介紹
exp/imp為一種數據庫備份恢復工具,也可以作為不同數據庫之間傳遞數據的工具,兩個數據庫所在的操作系統可以不同。exp可以將數據庫數據導出為二進制文件,imp可以將導出的數據文件再導入到相同的數據庫或不同的數據庫。說明:盡可能的用低版本的exp執行導出(源端和目標端數據庫數據庫版本中,哪個版低就用哪個執行導出),盡可能的用目標端數據庫的IMP版本執行導入。
數據庫導出有四種模式:full(全庫導出)、owner(用戶導出)、table(表導出)、tablespace(表空間導出)。
full(全庫導出):導出除ORDSYS、MDSYS、CTXSYS、ORDPLUGINS、LBACSYS這些系統用戶之外的所有用戶的數據。
owner(用戶導出):導出某個或某些用戶的所有權限和數據。
tables(表導出):導出某些表(可以是不同用戶的)的結構和數據。
tablespace(表空間導出):表空間導出數據。
執行exp有三種方法,交互式、命令行和參數文件,
交互式:直接輸入exp命令,用戶可以按照exp提示的信息一步一步操作,比較簡單。
命令行:輸入命令行exp username/password parameter=value。
參數文件:輸入命令行exp username/password parfile=filename,exp所需的參數從參數文件引入。
參數是可以重復的,優先級為命令行優於參數文件,后面的參數值覆蓋於前面的參數值。
下面介紹一些常用的參數,沒有標明的,表示exp/imp都適用,imp的參數不再單獨介紹。
參數介紹
buffer:緩沖區大小,如果此值設為0,則一次只導入一條記錄。對數據量大的導出可以設置較大,一般缺省值即可。
file:導出的文件列表,可以指定一個或多個文件名,缺省擴展名為.dmp,缺省導出文件名為expdat.dmp。
filesize(exp):導出文件的最大字節數,超出時,從文件列表中獲取下一個文件名,沒有,則提示輸入新的文件名。
help:顯示export參數幫助信息。
inctype:增量備份的類型,complete(完全)、cumulative(累積)和incremental(增量)。只可以在全庫導出模式下才可以做完全、累積或增量導出。累積導出只導出自上次累積導出或完全導出以來已經修改的表;增量導出只導出自上次增量、累積或完全導出以來已經修改的表;完全導出將數據庫中全部對象都導出,不管是否以及何時被修改。
log:日志文件,一般如果以命令行導入時,將log設置上比較好,可以看到所有的導入信息,哪兒出錯,導入了那些數據庫對象。
show(imp):只是用來顯示備份數據文件的內容,
full:為Y時表示在全庫方式下導出,缺省為N。
tables:導出的表列表,可以指定一個或多個表名。
fromuser(imp):可以將導出文件中的一個用戶模式的數據對象導入為另一個用戶模式的對象, 此參數表示導出文件中的用戶模式。
touser(imp):此參數表示導入到數據庫中時使用的用戶模式對象。譬如,使用全庫或者用戶模式導出cams用戶的所有對象到一個文件中,導入時,需要將用戶模式名稱改為cams1,此時,fromuser為cams,touser為cams1。
2、 exp常見用法及使用案例
2.1 交互式-用戶導出
交互式導出比較簡單,這里只舉用戶導出一種用法進行說明,全庫導出和表導出比較簡單,不再列出。
1、使用簡單命令exp命令導出數據 C:\Users\Administrator>exp Export: Release 11.2.0.1.0 - Production on 星期六 10月 4 15:17:38 2014 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. 用戶名: scott 口令: 連接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options 輸入數組提取緩沖區大小: 4096 > //交互式導出時大多數參數都有缺省值,如果選用缺省值,直接回車即可 導出文件: EXPDAT.DMP > scott20141004.dmp //可使用默認名字EXPDAT.DMP (2)U(用戶), 或 (3)T(表): (2)U > 導出權限 (yes/no): yes > 導出表數據 (yes/no): yes > 壓縮區 (yes/no): yes > 已導出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集 . 正在導出 pre-schema 過程對象和操作 . 正在導出用戶 SCOTT 的外部函數庫名 . 導出 PUBLIC 類型同義詞 . 正在導出專用類型同義詞 . 正在導出用戶 SCOTT 的對象類型定義 即將導出 SCOTT 的對象... . 正在導出數據庫鏈接 . 正在導出序號 . 正在導出簇定義 . 即將導出 SCOTT 的表通過常規路徑... . . 正在導出表 DEPT導出了 4 行 . . 正在導出表 EMP導出了 14 行 . . 正在導出表 EMP2導出了 14 行 . . 正在導出表 EMP_TEST導出了 14 行 . . 正在導出表 SALGRADE導出了 5 行 . 正在導出同義詞 . 正在導出視圖 . 正在導出存儲過程 . 正在導出運算符 . 正在導出引用完整性約束條件 . 正在導出觸發器 . 正在導出索引類型 . 正在導出位圖, 功能性索引和可擴展索引 . 正在導出后期表活動 . 正在導出實體化視圖 . 正在導出快照日志 . 正在導出作業隊列 . 正在導出刷新組和子組 . 正在導出維 . 正在導出 post-schema 過程對象和操作 . 正在導出統計信息 成功終止導出, 沒有出現警告。 ====================================== 說明:(1) 在交互式導出或導入時,如果輸錯值,不再想進行下面的步驟,但不知如何退出,此時請用“.”,回車即退出。
2.2 命令行-全庫導出
全庫導出必須要有dba權限,一般用system用戶來執行
exp userid=system/test2014@orcl full=y file=(d:\backup\2014100401.dmp, d:\backup\2014100402.dmp) filesize=2GB log=d:\backup\20141004.log
該命令導出全庫數據,導出到多個文件中,每個文件最大2GB,exp只生成最少的導出文件,譬如導出的數據不足2GB,exp只生成d:\backup\2014100401.dmp,如果file列表中的文件太少,不能存放所有的導出數據,exp會提示用戶輸入文件名,導出過程記錄日志。
2.3、命令行-用戶導出
C:\Users\Administrator>exp userid=scott/tiger@orcl owner=scott file=(D:\backup\backup_user\2014100401.dmp, D:\backup\backup_user\2014100402.dmp) filesize =50MB log=D:\backup\backup_user\log.20141004.log Export: Release 11.2.0.1.0 - Production on 星期六 10月 4 16:03:48 2014 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. 連接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options 已導出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集 即將導出指定的用戶... . 正在導出 pre-schema 過程對象和操作 . 正在導出用戶 SCOTT 的外部函數庫名 . 導出 PUBLIC 類型同義詞 . 正在導出專用類型同義詞 . 正在導出用戶 SCOTT 的對象類型定義 即將導出 SCOTT 的對象... . 正在導出數據庫鏈接 . 正在導出序號 . 正在導出簇定義 . 即將導出 SCOTT 的表通過常規路徑... . . 正在導出表 DEPT導出了 4 行 . . 正在導出表 EMP導出了 14 行 . . 正在導出表 EMP2導出了 14 行 . . 正在導出表 EMP_TEST導出了 14 行 . . 正在導出表 SALGRADE導出了 5 行 . 正在導出同義詞 . 正在導出視圖 . 正在導出存儲過程 . 正在導出運算符 . 正在導出引用完整性約束條件 . 正在導出觸發器 . 正在導出索引類型 . 正在導出位圖, 功能性索引和可擴展索引 . 正在導出后期表活動 . 正在導出實體化視圖 . 正在導出快照日志 . 正在導出作業隊列 . 正在導出刷新組和子組 . 正在導出維 . 正在導出 post-schema 過程對象和操作 . 正在導出統計信息 成功終止導出, 沒有出現警告。
2.4 命令行-表導出
C:\Users\Administrator>exp userid=scott/tiger@orcl tables=(emp,dept,salgrade) file=D:\backup\exp_table.dmp filesize=50MB log=D:\backup\exp_table \log.20141004.log Export: Release 11.2.0.1.0 - Production on 星期六 10月 4 16:17:47 2014 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. 連接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options 已導出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集 即將導出指定的表通過常規路徑... . . 正在導出表 EMP導出了 14 行 . . 正在導出表 DEPT導出了 4 行 . . 正在導出表 SALGRADE導出了 5 行 成功終止導出, 沒有出現警告。
2.5、命令行-完全導出
exp userid=scott/tiger@orcl full=y inctype=complete file=(D:\backup\exp_complete.dmp D:\backup\exp_complete2.dmp) filesize=100MB log=D:\backup\exp_complete.log
全庫導出時,增量導出類型缺省為complete(完全),所以例5和例2導出的結果是完全一樣的。並且會提示EXP-00041: INCTYPE 參數已廢棄,只能使用rman備份????
2.6、命令行-累積導出
exp scott/tiger@orcl full=y inctype=cumulative file=D:\backup\exp_cumulative\exp_cumulative.dmp filesize=200MB log=D:\backup\exp_cumulative\exp_cumulative.log
2.7 命令行-增量導出
exp userid=scott/tiger@orcl full=y inctype=incremental file=D:\backup\exp_incremental\exp_incremental.dmp filesize=10MB log=D:\back
up\exp_incremental\exp_incremental.log
累計型導出方式是導出自上次“完全”導出之后數據庫中變化了的信息,而增量導出是導出上一次導出之后改變過的數據。
2.8 參數文件-用戶導出
C:\Users\Administrator>exp parfile=D:\backup\exp_parfile\scott_exp.par
scott_exp.par文件內容如下:
userid=scott/scott@orcl tables=(emp,dept,salgrade) file=D:\backup\exp_parfile\exp_parfile.dmp filesize=50MB log=D:\backup\exp_parfile\log.20141004.log
為了不暴露scott用戶的密碼,可以將上面的userid的值寫為scott@orcl,此時exp會提示用戶輸入密碼,輸入的密碼不會顯示出來。
3、imp常用方法及使用案例
導入模式可以分為full(全文件導入)、owner(用戶導入)、table(表導入)
full(全文件導入):指導入文件中的所有數據,並不是指全庫導入,如果文件中只存在一個表的數據,全文件導入就只能導入一個表的數據。
fromuser,touser(用戶導入):指導入文件中該用戶的所有數據,如果文件中只存在一個表的數據,用戶導入就只能導入一個表的數據。
tables(表導入):指導入文件中該表的數據。
能夠導入何數據很大程度上依賴於導出文件。譬如需要導入某用戶的所有數據,導出文件中必須存在該用戶的所有數據,即導出時必須為全庫導出或用戶導出。
3.1 交互式-用戶導出與導入
C:\Users\Administrator>exp Export: Release 11.2.0.1.0 - Production on 星期日 10月 5 00:11:02 2014 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. 用戶名: rusky 口令: 連接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options 輸入數組提取緩沖區大小: 4096 > 導出文件: EXPDAT.DMP > (1)E(完整的數據庫), (2)U(用戶) 或 (3)T(表): (2)U > 導出權限 (yes/no): yes > 導出表數據 (yes/no): yes > 壓縮區 (yes/no): yes > 已導出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集 即將導出指定的用戶... 要導出的用戶: (按 RETURN 退出) > 成功終止導出, 沒有出現警告。 C:\Users\Administrator>imp //導入之前導出的用戶數據 Import: Release 11.2.0.1.0 - Production on 星期日 10月 5 00:11:44 2014 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. 用戶名: rusky 口令: 連接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options 僅導入數據 (yes/no): no > 導入文件: EXPDAT.DMP> 輸入插入緩沖區大小 (最小為 8192) 30720> 經由常規路徑由 EXPORT:V11.02.00 創建的導出文件 已經完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的導入 只列出導入文件的內容 (yes/no): no > 由於對象已存在, 忽略創建錯誤 (yes/no): no > 導入權限 (yes/no): yes > 導入表數據 (yes/no): yes > 導入整個導出文件 (yes/no): no > 用戶名: rusky 輸入表 (T) 或分區 (T: P) 名稱。空列表表示用戶的所有表 輸入表 (T) 或分區 (T: P) 的名稱或 。如果完成: . 正在將 RUSKY 的對象導入到 RUSKY 成功終止導入, 沒有出現警告。
3.2 交互式-表導入
C:\Users\Administrator> exp userid=scott/tiger@orcl tables=(emp,dept,salgrade) file=D:\scott_tables_exp.dmp filesize 10m log=D:\scott_exp_tables.log//導出scott用戶的三張表
C:\Users\Administrator>imp userid=rusky/rusky@orcl tables=(emp,dept,salgrade) file=D:\scott_tables_exp.dmp log=imp_scottToRusky.log//導入scott用戶的三張表到rusky用戶下 Import: Release 11.2.0.1.0 - Production on 星期六 10月 4 23:48:04 2014 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. 連接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options 經由常規路徑由 EXPORT:V11.02.00 創建的導出文件 警告: 這些對象由 SCOTT 導出, 而不是當前用戶 已經完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的導入 . 正在將 SCOTT 的對象導入到 RUSKY . 正在將 SCOTT 的對象導入到 RUSKY . . 正在導入表 "EMP"導入了 14 行 . . 正在導入表 "DEPT"導入了 4 行 . . 正在導入表 "SALGRADE"導入了 5 行 即將啟用約束條件... 成功終止導入, 沒有出現警告。
3.3 命令行-查看文件內容
imp userid=cams/cams@cams full=y show=y file=(D:\backup\exp_complete\exp_complete1.dmp, D:\backup\exp_complete\exp_complete2.dmp) log= D:\backup\exp_complete\imp2.log
該命令查看了文件中都有哪些數據,如果有多個文件,imp會提示用戶輸入文件名,導入過程記錄日志。
3.4 命令行-全文件導入
imp userid=cams/cams@cams full=y show=y file=(D:\backup\exp_complete\exp_complete1.dmp, D:\backup\exp_complete\exp_complete2.dmp) log= D:\backup\exp_complete\imp2.log
3.6 命令行-用戶導入
C:\Users\Administrator>imp userid=scott/tiger@orcl fromuser=scott touser=scott file=d:\exp_scott.dmp log=exp_scott.log ignore=y Import: Release 11.2.0.1.0 - Production on 星期日 10月 5 01:00:07 2014 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. 連接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options 經由常規路徑由 EXPORT:V11.02.00 創建的導出文件 已經完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的導入 成功終止導入, 沒有出現警告。
3.7 命令行-用戶導入-從增量導出文件中導入及參數文件導入同上。
imp userid=(指的是具有導入權限的用戶) fromuser=取出導出文件中該用戶的數據 touser=要導入數據的用戶
==============
==============
加上參數rows=n(默認y)則不導出表數據。
exp userid=lxj/1qaz2wsx@orcl DIRECT=Y RECORDLENGTH=65535 BUFFER=460000 FEEDBACK=2000 tables=tab_name1 file=C:\lxj\dataExportTest\tab_name1 .dmp log=C:\lxj\dataExportTest\tab_name1 .log
imp userid=lxj/1qaz2wsx@orcl RECORDLENGTH=65535 BUFFER=460000 FEEDBACK=2000 tables=tab_name1 file=C:\lxj\dataExportTest\FM_PRIMARYEVENT.dmp log=C:\lxj\dataExportTest\tab_name1 .log
加上參數rows=n時,則不導入表數據。這對於表結構的復制很有用。