oracle 数据库导入导出文章
Oracle數據導入導出imp/exp
功能:Oracle數據導入導出imp/exp就相當與oracle數據還原與備份。
?
大多情況都可以用Oracle數據導入導出完成數據的備份和還原(不會造成數據的丟失)。
?Oracle有個好處,雖然你的電腦不是服務器,但是你裝了oracle客戶端,并建立了連接
?(通過Net Configuration Assistant添加正確的服務命名,其實你可以想成是客戶端與服務器端 修了條路,然后數據就可以被拉過來了)
?這樣你可以把數據導出到本地,雖然可能服務器離你很遠。
?你同樣可以把dmp文件從本地導入到遠處的數據庫服務器中。
?利用這個功能你可以構建倆個相同的數據庫,一個用來測試,一個用來正式使用。
?
執行環境:可以在SQLPLUS.EXE或者DOS(命令行)中執行,
?DOS中可以執行時由于 在oracle 8i 中? 安裝目錄\$ora10g\BIN被設置為全局路徑,
?該目錄下有EXP.EXE與IMP.EXE文件被用來執行導入導出。
?oracle用java編寫,我想SQLPLUS.EXE、EXP.EXE、IMP.EXE這倆個文件是被包裝后的類文件。
?SQLPLUS.EXE調用EXP.EXE、IMP.EXE他們所包裹的類,完成導入導出功能。
?
下面介紹的是導入導出的實例,向導入導出看實例基本上就可以完成,因為導入導出很簡單。
數據導出:
?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)
?
?基本上上面的導入導出夠用了。不少情況我是將表徹底刪除,然后導入。
?
注意:
?你要有足夠的權限,權限不夠它會提示你。
?數據庫時可以連上的。可以用tnsping TEST 來獲得數據庫TEST能否連上。
?
數據導出:
exp hkb/hkb@boss_14 full=y file=c:\orabackup\hkbfull.dmp log=c:\orabackup\hkbfull.log;
導出注意事項:導出的是當前用戶的的數據,當前用戶如果有DBA的權限,則導出所有數據!
同名用戶之間的數據導入:
imp hkb/hkb@xe? file=c:\orabackup\hkbfull.dmp log=c:\orabackup\hkbimp.log full=y
不同名之間的數據導入:
imp system/test@xe fromuser=hkb touser=hkb_new file=c:\orabackup\hkbfull.dmp
log=c:\orabackup\hkbimp.log;
------------------------------------------------------------------------------------------------------------
百度文庫資料
Oracle數據庫文件資料收集:
一、Oracle數據導入導出imp/exp命令 10g以上expdp/impdp命令 詳細
A) 數據導出: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 將數據庫中的表inner_notify、notify_staff_relat導出
??? exp aichannel/aichannel@TESTDB2 file= d:datanewsmgnt.dmp tables=(inner_notify,notify_staff_relat)
4 將數據庫中的表table1中的字段filed1以"00"打頭的數據導出
?? exp system/manager@TEST file=d:daochu.dmp tables=(table1) query=" where filed1 like '00%'"
? 上面是常用的導出,對于壓縮,既用winzip把dmp文件可以很好的壓縮。
? 也可以在上面命令后面 加上 compress=y 來實現。
B) 數據的導入
1 將D:daochu.dmp 中的數據導入 TEST數據庫中。
?? imp system/manager@TEST? file=d:daochu.dmp
?? imp aichannel/aichannel@HUST full=y? file=d:datanewsmgnt.dmp ignore=y
?? 上面可能有點問題,因為有的表已經存在,然后它就報錯,對該表就不進行導入。
?? 在后面加上 ignore=y 就可以了。
2 將d:daochu.dmp中的表table1 導入
imp system/manager@TEST? file=d:daochu.dmp? tables=(table1)
*注:要先是將表徹底刪除,然后導入。
操作者要有足夠的權限,權限不夠它會提示。
數據庫時可以連上的。可以用tnsping TEST 來獲得數據庫TEST能否連上
當然,上面的方法在導出數據時可能會導出很大的包,那是因為你的用戶可能在授權的時候授予了DBA的權限,所以可以采用下面方法來進行數據庫備份:
二、數據庫備份
建議系統過渡后,每周進行一次備份?;蛘咴跀祿戆l生重大改變前,對要改變的數據表進行備份。
執行以下步驟,進行備份。
在命令行里,敲入“cmd”,回車,進入命令行窗口。
在窗口中,輸入:
exp mas/123456@mas
系統提示:輸入數組提取緩沖區大小: 4096 >
可以直接回車;
系統提示:導出文件: EXPDAT.DMP>
此處輸入導出文件的位置,其路徑必須存在,Oracle在這里不會自動建立路徑,但可以建立文件名。備份文件以dmp作為后綴。
輸入內容如:e:\work\mas_db_090925v1.dmp 回車
系統提示: (1)E(完整的數據庫),(2)U(用戶) 或 (3)T(表): (2)U > u
此處可以輸入u,也可以直接回車,因為系統此時默認的是U
系統提示:導出權限(yes/no):yes>回車
系統提示:導出表數據(yes/no):yes>回車
系統提示:壓縮區(yes/no):yes>回車
系統提示:要導出的用戶: (RETURN 以退出) > mas
系統提示:要導出的用戶: (RETURN 以退出) > 回車
此時系統會自動進行備份
?
經驗總結:
A.說明
?oracle 的exp/imp命令用于實現對數據庫的導出/導入操作;
?? exp命令用于把數據從遠程數據庫服務器導出至本地,生成dmp文件;
?? ?imp命令用于把本地的數據庫dmp文件從本地導入到遠程的Oracle數據庫中。
B.語法
可以通過在命令行輸入 imp help=y 獲取imp的語法信息:
C:\Documents and Settings\auduser>imp help=y
? Import: Release 9.0.1.1.1 - Production on 星期二 5月 20 18:21:57 2008
? (c) Copyright 2001 Oracle Corporation.? All rights reserved.
? 可以通過輸入 IMP 命令和您的用戶名/口令
? 后接用戶名/口令的命令:
??A.導入:例程: IMP SCOTT/TIGER
?
或者, 可以通過輸入 IMP 命令和各種參數來控制“導入”
? 按照不同參數。要指定參數,您可以使用關鍵字:
?
? 格式: IMP KEYWORD=value 或 KEYWORD=(value1,value2,...,vlaueN)
? 例程: IMP SCOTT/TIGER IGNORE=Y TABLES=(EMP,DEPT) FULL=N
? 或 TABLES=(T1: P1,T1: P2),如果 T1 是分區表
? USERID 必須是命令行中的第一個參數。
? 關鍵字? 說明(默認)??????? 關鍵字????? 說明(默認)
? --------------------------------------------------------------------------
? USERID?? 用戶名/口令?????????? FULL???????? 導入整個文件 (N)
? BUFFER?? 數據緩沖區大小???????? FROMUSER???? 所有人用戶名列表
? FILE???? 輸入文件 (EXPDAT.DMP)??? TOUSER?????? 用戶名列表
? 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)
?
? 下列關鍵字僅用于可傳輸的表空間
? TRANSPORT_TABLESPACE 導入可傳輸的表空間元數據 (N)
? TABLESPACES 將要傳輸到數據庫的表空間
? DATAFILES 將要傳輸到數據庫的數據文件
? TTS_OWNERS 擁有可傳輸表空間集中數據的用戶
==============================================
同樣可以通過輸入 exp help=y 獲取exp的語法信息
? Microsoft Windows XP [版本 5.1.2600]
? (C) 版權所有 1985-2001 Microsoft Corp.
? C:\Documents and Settings\auduser>exp help=y
? Export: Release 9.0.1.1.1 - Production on 星期二 5月 20 18:26:34 2008
? (c) Copyright 2001 Oracle Corporation.? All rights reserved.
? 通過輸入 EXP 命令和用戶名/口令,您可以
? 后接用戶名/口令的命令:
?
B .導出例程: EXP SCOTT/TIGER?
? 或者,您也可以通過輸入跟有各種參數的 EXP 命令來控制“導出”
? 按照不同參數。要指定參數,您可以使用關鍵字:
?
? 格式: EXP KEYWORD=value 或 KEYWORD=(value1,value2,...,valueN)
? 例程: EXP SCOTT/TIGER GRANTS=Y TABLES=(EMP,DEPT,MGR)
? 或 TABLES=(T1: P1,T1: P2),如果 T1 是分區表
?
? USERID 必須是命令行中的第一個參數。
?
? 關鍵字? 說明(默認)??????? 關鍵字????? 說明(默認)
? --------------------------------------------------------------------------
? USERID?? 用戶名/口令?????????? FULL???????? 導出整個文件 (N)
? BUFFER?? 數據緩沖區大小???????? OWNER???? 所有者用戶名列表
? FILE?????? 輸出文件 (EXPDAT.DMP)? TABLES?????? 表名稱列表
? COMPRESS?? 導入到一個區 (Y) RECORDLENGTH IO 記錄的長度
? GRANTS? 導出權限 (Y)?????????? INCTYPE????? 增量導出類型
? INDEXES??? 導出索引 (Y)???????? RECORD?????? 跟蹤增量導出 (Y)
? DIRECT???? 直接路徑 (N)??????????? TRIGGERS???? 導出觸發器 (Y)
? LOG??????? 屏幕輸出的日志文件? STATISTICS?? 分析對象 (ESTIMATE)
? ROWS??? 導出數據行 (Y)??????? PARFILE????? 參數文件名
? CONSISTENT 交叉表一致性??? CONSTRAINTS? 導出約束條件 (Y)
? FEEDBACK???????????? 每 x 行顯示進度 (0)
? FILESIZE???????????? 每個轉儲文件的最大大小
? FLASHBACK_SCN??????? 用于回調會話快照的 SCN
? FLASHBACK_TIME?????? 用來獲得最接近于指定時間的 SCN 的時間
? QUERY??????????????? 用來導出表的子集的選擇子句
? RESUMABLE??????????? 遇到與空格有關的錯誤時掛起 (N)
? RESUMABLE_NAME?????? 用來標識可恢復語句的文本字符串
? RESUMABLE_TIMEOUT??? RESUMABLE 的等待時間
? TTS_FULL_CHECK?????? 對 TTS 執行完全或部分相關性檢查
? TABLESPACES????????? 要導出的表空間列表
? TRANSPORT_TABLESPACE 導出可傳輸的表空間元數據 (N)
? TEMPLATE 調用 iAS 模式導出的模板名稱
?
三、使用示例
3.1 數據導出:
?1 將數據庫SampleDB完全導出,用戶名system 密碼manager 導出到E:\SampleDB.dmp中
?? exp system/manager@TestDB file=E:\sampleDB.dmp full=y
?2 將數據庫中system用戶與sys用戶的表導出
?? exp system/manager@TestDB file=E:\sampleDB.dmp? owner=(system,sys)
?3 將數據庫中的表 TableA,TableB 導出
??? exp system/manager@TestDB? file=E:\sampleDB.dmp? tables=(TableA,TableB)
?4 將數據庫中的表tableA中的字段filed1 值為 "王五" 的數據導出
?? exp system/manager@TestDB? file=E:\sampleDB.dmp? tables=(tableA)? query=' where filed1='王五'
?? 如果想對dmp文件進行壓縮,可以在上面命令后面 加上 compress=y 來實現。
3.2 數據的導入
?1 將備份數據庫文件中的數據導入指定的數據庫SampleDB 中,如果 SampleDB 已存在該表,則不再導入;
?? imp system/manager@TEST? file=E:\sampleDB.dmp? full=y? ignore=y
?2 將d:\daochu.dmp中的表table1 導入
?imp system/manager@TEST? file=E:\sampleDB.dmp? tables=(table1)
3. 導入一個完整數據庫
?imp system/manager file=bible_db log=dible_db full=y ignore=y
4. 導入一個或一組指定用戶所屬的全部表、索引和其他對象
?imp system/manager file=seapark log=seapark fromuser=seapark imp
?system/manager file=seapark log=seapark fromuser=(seapark,amy,amyc,harold)
5. 將一個用戶所屬的數據導入另一個用戶
?imp system/manager file=tank log=tank fromuser=seapark touser=seapark_copy
?imp system/manager file=tank log=tank fromuser=(seapark,amy)
?touser=(seapark1, amy1)
6. 導入一個表
?imp system/manager file=tank log=tank fromuser=seapark TABLES=(a,b)
7. 從多個文件導入
?imp system/manager file=(paycheck_1,paycheck_2,paycheck_3,paycheck_4)
log=paycheck, filesize=1G full=y
8. 使用參數文件
?imp system/manager parfile=bible_tables.par
bible_tables.par參數文件:
?#Import the sample tables used for the Oracle8i Database Administrator's
Bible. fromuser=seapark touser=seapark_copy file=seapark log=seapark_import
參數文件示例見附錄
9. 增量導入
?imp system./manager inctype= RECTORE FULL=Y? FILE=A
*注:不少情況下要先將表徹底刪除,然后導入。
?
四、參數說明
4.1、8i EXP常用選項
?1、FULL,這個用于導出整個數據庫,在ROWS=N一起使用時,可以導出整個數據庫的結構。例如:
?exp sys file=./db_str.dmp log=./db_str.log full=y rows=n compress=y direct=y
?2、BUFFER和FEEDBACK,在導出比較多的數據時,我會考慮設置這兩個參數。例如:
?exp new file=yw97_2003.dmp log=yw97_2003_3.log feedback=10000 buffer=100000000 tables=WO4,OK_YT
?3、FILL和LOG,這兩個參數分別指定備份的DMP名稱和LOG名稱,包括文件名和目錄,例子見上面。
?需要說明的是,EXP可以直接備份到磁帶中,即使用FILE=/dev/rmt0(磁帶設備名),但是一般我們都不這么做,原因有二:一、這樣做的速度會慢很多,二、現在一般都是使用磁帶庫的,不建議直接對磁帶進行操作。至于沒有使用磁帶庫的朋友可以考慮和UNIX的TAR結合使用。
?如果你真想使用EXP直接到磁帶,你可以參考Metalink文章“EXPORTING TO TAPE ON UNIX SYSTEMS”(文檔號:30428.1),該文中有詳細解釋。
?4、COMPRESS參數將在導出的同時合并碎塊,盡量把數據壓縮到initial的EXTENT里,默認是N,一般建議使用。DIRECT參數將告訴EXP直接讀取數據,而不像傳統的EXP那樣,使用SELECT來讀取表中的數據,這樣就減少了SQL語句處理過程。一般也建議使用。不過有些情況下DIRECT參數是無法使用的。
?5、如何使用SYSDBA執行EXP/IMP?
?這是一個很現實的問題,有時候我們需要使用SYSDBA來執行EXP/IMP,如進行傳輸表空間的EXP/IMP,以及在9i下用SYS用戶來執行EXP/IMP時,都需要使用SYSDBA才可。我們可以使用下面方式連入EXP/IMP:
?exp "'sys/sys as sysdba'" file=1.dmp tables=gototop.t rows=n
?6、QUERY參數后面跟的是where條件,值得注意的是,整個where子句需要使用""括起來,where子句的寫法和SELECT中相同,如果是UNIX平臺所有"和'都需要使用\u26469屏蔽它們的特殊含義:
?exp gototop/gototop file=1.dmp log=1.log tables=cyx.t query="where c1=20 and c2=gototop"
?如果是windows平臺,則使用下面的格式:
????? exp c/c@ncn file=c.dmp log=c.log tables=t query="""where id=1 and name='gototop'"""
4.2、8i IMP常用選項
?1、FROMUSER和TOUSER,使用它們實現將數據從一個SCHEMA中導入到另外一個SCHEMA中。
?2、IGNORE、GRANTS和INDEXES,其中IGNORE參數將忽略表的存在,繼續導入,這個對于需要調整表的存儲參數時很有用,我們可以先根據實際情況用合理的存儲參數建好表,然后直接導入數據。而GRANTS和INDEXES則表示是否導入授權和索引,如果想使用新的存儲參數重建索引,或者為了加快到入速度,我們可以考慮將INDEXES設為N,而GRANTS一般都是Y。
?另外一個EXP/IMP都有的參數是PARFILE,它是用來定義EXP/IMP的參數文件,也就是說,上面的參數都可以寫在一個參數文件中,但我們一般很少使用。
4.4、Oracle9i EXP功能描述
?Oracle9i EXP在原有的基礎上新增了部分新的參數,按功能主要分為以下幾個部分:
?1、OBJECT_CONSISTENT - 用于設置EXP對象為只讀以保持對象的一致性。默認是N。
?2、FLASHBACK_SCN和FLASHBACK_TIME - 用于支持FLASHBACK功能而新增。
?3、RESUMABLE、RESUMABLE_NAME和RESUMABLE_TIMEOUT - 用于支持RESUMABLE空間分配而新增。
?4、TTS_FULL_CHECK - 用于在傳輸表空間時使用依賴性檢查。
?5、TEMPLATE - 用于支持iAS。
?6、TABLESPACES - 設置表空間導出模式。個人覺得對于一般用戶而言,這個才是新增參數中最實用的一個,可以讓用戶在原來的FULL、OWNER、TABLES的基礎上多了一種選擇,使得EXP更加靈活。
?
五、不同版本的EXP/IMP問題?
一般來說,從低版本導入到高版本問題不大,麻煩的是將高版本的數據導入到低版本中,在Oracle9i之前,不同版本Oracle之間的EXP/IMP可以通過下面的方法來解決:
?1、在高版本數據庫上運行底版本的catexp.sql;
?2、使用低版本的EXP來導出高版本的數據;
?3、使用低版本的IMP將數據庫導入到底版本數據庫中;
?4、在高版本數據庫上重新運行高版本的catexp.sql腳本。
?但在9i中,上面的方法并不能解決問題。如果直接使用底版本EXP/IMP會出現如下錯誤:
?EXP-00008: ORACLE error %lu encountered
?ORA-00904: invalid column name
?這已經是一個公布的BUG,需要等到Oracle10.0才能解決,BUG號為2261,你可以到METALINK上去查看有關此BUG的詳細信息。
?BUG歸BUG,我們的工作還是要做,在沒有Oracle的支持之前,我們就自己解決。在Oracle9i中執行下面的SQL重建exu81rls視圖即可。
?CREATE OR REPLACE view exu81rls
?(objown,objnam,policy,polown,polsch,polfun,stmts,chkopt,enabled,spolicy)
?AS select u.name, o.name, r.pname, r.pfschma, r.ppname, r.pfname,
?decode(bitand(r.stmt_type,1), 0,'', 'SELECT,')
?|| decode(bitand(r.stmt_type,2), 0,'', 'INSERT,')
?|| decode(bitand(r.stmt_type,4), 0,'', 'UPDATE,')
?|| decode(bitand(r.stmt_type,8), 0,'', 'DELETE,'),
?r.check_opt, r.enable_flag,
?DECODE(BITAND(r.stmt_type, 16), 0, 0, 1)
?from user$ u, obj$ o, rls$ r
?where u.user# = o.owner#
?and r.obj# = o.obj#
?and (uid = 0 or
?uid = o.owner# or
?exists ( select * from session_roles where role='SELECT_CATALOG_ROLE')
?)
?/
?grant select on sys.exu81rls to public;
?/
六、其他問題
本文只討論了Oracle8i和9i中的EXP/IMP的一些情況,對于之前的版本,在8.0.X中,除了QUERY參數不能用外,其它差別不大。針對沒有QUERY的情況,我們可以先在數據庫中使用查詢條件建立臨時中間表,然后使用EXP導出這個中間表即可。至于Oracle7因為目前使用的人較少,gototop不打算在此做詳細解釋了,如果讀者朋友有需求,你可以參考Metalink文檔:“Overview of Export and Import in Oracle7”(文檔號:61949.1)。關于EXP/IMP的詳細參數信息你可以通過EXP/IMP HELP=Y來獲得。
?另外關于傳輸表空間的更多信息可以參考下面的Metelink文檔,本文不再詳述。
?[NOTE:77523.1] Transportable Tablespaces -- An Example to setup and use.
?[NOTE:100698.1] Perform tablespace point-in-time recovery using Transportable Tablespace.
?在進行并行EXP/IMP的時候,如果IMP過程建索引的話不建議同時運行5個以上的IMP,如果你想加快速度,可以在IMP的時候不建索引,這樣只要內存允許,可以多跑幾個,然后是SQL腳本創建需要的索引。
?
注意:*
?操作者要有足夠的權限,權限不夠它會提示。
?數據庫是否可以連上, 可以用tnsping TestDB? 來獲得數據庫 TestDB 能否連上。
附錄一:
?給用戶增加導入數據權限的操作
?第一, 啟動sql*puls
?第二,以system/manager登陸
?第三,create user 用戶名 IDENTIFIED BY 密碼(如果已經創建過用戶,這步可以省略)
?第四,GRANT CREATE USER,DROP USER,ALTER USER ,CREATE ANY VIEW ,
?? ????DROP ANY VIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,
????? ?DBA,CONNECT,RESOURCE,CREATE SESSION? TO 用戶名字
?第五, 運行-cmd-進入dmp文件所在的目錄,
????? imp userid=system/manager full=y file=*.dmp
????? 或者 imp userid=system/manager full=y file=filename.dmp
附錄二:
?Oracle 不允許直接改變表的擁有者, 利用Export/Import可以達到這一目的.
? 先建立import9.par,
? 然后,使用時命令如下:imp parfile=/filepath/import9.par
? 例 import9.par 內容如下:
??????? FROMUSER=TGPMS??????
??????? TOUSER=TGPMS2????
(注:把表的擁有者由FROMUSER改為TOUSER,FROMUSER和TOUSER的用戶可以不同)?????????
??????? ROWS=Y
??????? INDEXES=Y
??????? GRANTS=Y
??????? CONSTRAINTS=Y
??????? BUFFER=409600
??????? file==/backup/ctgpc_20030623.dmp
??????? log==/backup/import_20030623.log
?
?
?
?
?
?
?
?
?
?
exp 命令的參數:
將數據庫內的各對象以二進制方式下載成dmp文件,方便數據遷移。
buffer:下載數據緩沖區,以字節為單位,缺省依賴操作系統
consistent:下載期間所涉及的數據保持read only,缺省為n
direct:使用直通方式 ,缺省為n
feeback:顯示處理記錄條數,缺省為0,即不顯示
file:輸出文件,缺省為expdat.dmp
filesize:輸出文件大小,缺省為操作系統最大值
indexes:是否下載索引,缺省為n,這是指索引的定義而非數據,exp不下載索引數據
log:log文件,缺省為無,在標準輸出顯示
owner:指明下載的用戶名
query:選擇記錄的一個子集
rows:是否下載表記錄
tables:輸出的表名列表
導出整個實例
exp dbuser/oracle file=oradb.dmp log=oradb.log full=y consistent=y direct=y
user應具有dba權限
導出某個用戶所有對象
exp dbuser/oracle file=dbuser.dmp log=dbuser.log owner=dbuser buffer=4096000 feedback=10000
導出一張或幾張表
exp dbuser/oracle file=dbuser.dmp log=dbuser.log tables=table1,table2 buffer=4096000 feedback=10000
導出某張表的部分數據
exp dbuser/oracle file=dbuser.dmp log=dbuser.log tables=table1 buffer=4096000 feedback=10000 query=\”where col1=\’…\’ and col2 \<…\”
不可用于嵌套表
以多個固定大小文件方式導出某張表
exp dbuser/oracle file=1.dmp,2.dmp,3.dmp,… filesize=1000m tables=emp buffer=4096000 feedback=10000
這種做法通常用在:表數據量較大,單個dump文件可能會超出文件系統的限制
直通路徑方式
direct=y,取代buffer選項,query選項不可用
有利于提高下載速度
consistent選項
自export啟動后,consistent=y凍結來自其它會話的對export操作的數據對象的更新,這樣可以保證dump結果的一致性。但這個過程不能太長,以免回滾段和聯機日志消耗完
imp
將exp下載的dmp文件上載到數據庫內。
buffer:上載數據緩沖區,以字節為單位,缺省依賴操作系統
commit:上載數據緩沖區中的記錄上載后是否執行提交
feeback:顯示處理記錄條數,缺省為0,即不顯示
file:輸入文件,缺省為expdat.dmp
filesize:輸入文件大小,缺省為操作系統最大值
fromuser:指明來源用戶方
ignore:是否忽略對象創建錯誤,缺省為n,在上載前對象已被建立往往是一個正?,F象,所以此選項建議設為y
indexes:是否上載索引,缺省為n,這是指索引的定義而非數據,如果上載時索引已建立,此選項即使為n也無效,imp自動更新索引數據
log:log文件,缺省為無,在標準輸出顯示
rows:是否上載表記錄
tables:輸入的表名列表
touser:指明目的用戶方
導入整個實例
imp dbuser/oracle file=oradb.dmp log=oradb.log full=y buffer=4096000 commit=y ignore=y feedback=10000
導入某個用戶所有對象
imp dbuser/oracle file=dbuser.dmp log=dbuser.log fromuser=dbuser touser=dbuser2 buffer=2048000 commit=y ignore=y feedback=10000
導入一張或幾張表
imp dbuser2/oracle file=user.dmp log=user.log tables=table1,table2 fromuser=dbuser touser=dbuser2 buffer=2048000 commit=y ignore=y feedback=10000
以多個固定大小文件方式導入某張表
imp dbuser/oracle file=\(1.dmp,2.dmp,3.dmp,…\) filesize=1000m tables=emp fromuser=dbuser touser=dbuser2 buffer=4096000 commit=y ignore=y feedback=10000
?
exp/imp已經很好用了,但是唯一的確定是速度太慢,如果1張表的數據有個百千萬的,常常導入導出就長時間停在這個表這,但是從Oracle 10g開始提供了稱為數據泵新的工具expdp/impdp,它為Oracle數據提供高速并行及大數據的遷移。
?
?imp/exp可以在客戶端調用,但是expdp/impdp只能在服務端,因為在使用expdp/impdp以前需要在數據庫中創建一個Directory
create directory dump_test as '/u01/oracle10g';
grant read, write on directory dump_test to piner
然后就可以開始導入導出
expdp piner/piner directory=dump_test dumpfile=user.dmp? 導出用戶的數據
expdp piner/piner directory=dump_test dumpfile=table.dmp tables=test1,test2 導出表數據
impdp piner/piner directory=dump_test dumpfile=user.dmp 導入該用戶數據
impdp piner/piner directory=dump_test dumpfile=table.dmp? 導出表數據
my test:
SQL> create directory dump_test as '/home/oracle/oracle10g';
Directory created.
SQL> drop directory dump_test;
Directory dropped.
SQL>? create directory dump_test as '/u01/oracledmp';
Directory created.
--接下來記得創建directory在系統上,并賦好權限
[oracle@localhost ~]$ expdp anlen/anlen123 directory=dumpdir dumpfile=anlen.dmp
Export: Release 10.2.0.4.0 - Production on Saturday, 12 June, 2010 14:43:20
Copyright (c) 2003, 2007, Oracle.? All rights reserved.
Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting "ANLEN"."SYS_EXPORT_SCHEMA_01":? anlen/******** directory=dumpdir dumpfile=anlen.dmp
Estimate in progress using BLOCKS method...
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 1.125 MB
Processing object type SCHEMA_EXPORT/USER
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/ROLE_GRANT
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/SEQUENCE/SEQUENCE
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/COMMENT
. . exported "ANLEN"."DBA_01"??????????????????????????? 571.2 KB?? 20000 rows
. . exported "ANLEN"."DBA_02"??????????????????????????? 278.4 KB?? 20000 rows
Master table "ANLEN"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded
******************************************************************************
Dump file set for ANLEN.SYS_EXPORT_SCHEMA_01 is:
? /u01/dmpdir/anlen.dmp
Job "ANLEN"."SYS_EXPORT_SCHEMA_01" successfully completed at 14:43:41
?
總結
以上是生活随笔為你收集整理的oracle 数据库导入导出文章的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【C语言经典案例】用*号输出字母C的图案
- 下一篇: 云时代,最好用的MySQL客户端工具推荐