共計 9027 個字符,預計需要花費 23 分鐘才能閱讀完成。
這篇文章主要介紹 Oracle 數據庫導入導出邏輯備份方法有哪些,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
【EXP 常用參數】
USERID 即用戶名 / 密碼該參數就必須且為第一個;
FILE 指定數據輸出文件路徑;
LOG 指定日志輸出文件路徑;
TABLES 導出指定表數據;
FULL 完全導出整個文件 (N);
ROWS 導出數據行 (Y);
QUERY 用于導出表的子集的 select 子句;
【示例】
1、【全庫模式】將數據庫 orcl 完全導出, 用戶名 scott 密碼 scott 數據文件導出到 D:/orcl/scott.dmp,日志文件到出到 D:/orcl/scott.log
exp scott/scott@orcl file = D:/orcl/scott.dmp log =D:/orcl/scott.log full = y
2、【表模式】將數據庫中的表 emp、dept 導出到 D:/orcl/scott_empdept.dmp
exp scott/scott@orcl file = D:/orcl/scott_empdept.dmptables = (emp,dept)
3、【用戶模式】將 243 數據庫中用戶 ng_lxj1 和 ng_lxj2 的所有數據導出到 D:/orcltest/ ng_lxj_user.dmp
exp system/manager@243 file = D:/orcltest/ng_lxj_user.dmpowner = (ng_lxj1, ng_lxj2)
4、將數據庫中的表 emp 中 SAL 字段大于 1000 的記錄導出到 D:/orcl/scott_emp.dmp
exp scott/scott@orcl file = D:/orcl/sys_scott.dmptables = (emp) query = \”where sal 1000\”
5、將數據庫中的表 emp 僅導出建表語句不導出數據行到 D:/orcl/scott_empddl.dmp
exp scott/scott@orcl file = D:/orcl/scott_empddl.dmptables = emp rows = n
【全部參數】
USERID 用戶名 / 口令 FULL 導出整個文件 (N)
BUFFER 數據緩沖區大小 OWNER 所有者用戶名列表
FILE 輸出文件 TABLES 表名列表
COMPRESS 導入到一個區 (Y) RECORDLENGTH IO 記錄的長度
GRANTS 導出權限 (Y) INCTYPE 增量導出類型
INDEXES 導出索引 (Y) RECORD 跟蹤增量導出 (Y)
DIRECT 直接路徑 (N) TRIGGERS 導出觸發器 (Y)
LOG 屏幕輸出的日志文件 STATISTICS 分析對象 (ESTIMATE)
ROWS 導出數據行 (Y) PARFILE 參數文件名
CONSISTENT 交叉表的一致性 (N) CONSTRAINTS 導出的約束條件 (Y)
OBJECT_CONSISTENT 只在對象導出期間設置為只讀的事務處理 (N)
FEEDBACK 每 x 行顯示進度 (0)
FILESIZE 每個轉儲文件的最大大小
FLASHBACK_SCN 用于將會話快照設置回以前狀態的 SCN
FLASHBACK_TIME 用于獲取最接近指定時間的 SCN 的時間
QUERY 用于導出表的子集的 select 子句
RESUMABLE 遇到與空格相關的錯誤時掛起 (N)
RESUMABLE_NAME 用于標識可恢復語句的文本字符串
RESUMABLE_TIMEOUT RESUMABLE 的等待時間
TTS_FULL_CHECK 對 TTS 執行完整或部分相關性檢查
TABLESPACES 要導出的表空間列表
TRANSPORT_TABLESPACE 導出可傳輸的表空間元數據 (N)
TEMPLATE 調用 iAS 模式導出的模板名
【IMP 常用參數】
USERID 即用戶名 / 密碼該參數就必須且為第一個;
FILE 指定數據輸出文件路徑;
LOG 指定日志輸出文件路徑;
IGNORE 忽略創建錯誤 (N),當要導入的表已存在時若該參數為 Y 則不報錯僅導入數據,否則將報錯;若導入的表不存在,則將自動新建該表,需要注意的是,該表所建的表空間一般是導出時表所在表空間,若導入的庫中無此表空間則會報錯;
FROMUSER 所有者用戶名列表;
TOUSER 用戶名列表;
TABLES 導出指定表數據;
FULL 完全導出整個文件 (N);
ROWS 導出數據行 (Y);
【示例】
1、【全庫模式】將備份數據庫文件中的數據導入數據庫 orcl 中, 用戶名 scott 密碼 scott,數據文件路徑 D:/orcl/scott.dmp,日志文件路徑 D:/orcl/scott.log
imp scott/scott@orcl file = D:/orcl/scott.dmp log =D:/orcl/scott.log full = y ignore = y
2、【表模式】將備份數據庫文件中的表 emp、dept 數據導入數據庫 orcl 中, 用戶名 scott 密碼 scott,數據文件路徑 D:/orcl/scott.dmp
imp scott/scott@orcl file = D:/orcl/scott.dmp log =D:/orcl/scott.log ignore = y tables = (emp,dept)
另外,如果導出時使用了表模式,導入時要導入所有表數據,則也可以使用 full = y,如:
imp scott/scott@orcl file = D:/orcl/scott_empdept.dmp ignore= y full = y
3、【用戶模式】備份數據文件中存在 ng_lxj1、ng_lxj2 兩用戶數據,數據文件路徑 D:/orcltest/ng_lxj_user.dmp
將 ng_lxj1 的數據導入到 ng_lxj 中:
imp system/manager@243 file = D:/orcltest/ng_lxj_user.dmpfromuser = ng_lxj1 touser = ng_lxj
將 ng_lxj1 和 ng_lxj2 的數據均導入到 ng_lxj 中:
imp system/manager@243 file = D:/orcltest/ng_lxj_user.dmpfromuser = (ng_lxj1,ng_lxj2) touser = (ng_lxj,ng_lxj)
注意 ng_lxj 要寫兩遍與之前的對應,若僅寫一個,Oracle 會默認沒得到對應的將導入到本用戶下,如:
imp system/manager@243 file = D:/orcltest/ng_lxj_user.dmpfromuser = (ng_lxj1,ng_lxj2)
該命令將從 ng_lxj1 導入 ng_lxj1,ng_lxj2 導入 ng_lxj2
將 ng_lxj1 的數據分別導入 ng_lxj1 和 ng_lxj2 兩個用戶:
不能寫成 imp system/manager@243 file = D:/orcltest/ng_lxj_user.dmpfromuser = (ng_lxj1,ng_lxj1) touser = (ng_lxj1,ng_lxj2)
否則會報錯:
IMP-00034: 警告: 在導出文件中未找到 FromUser NG_LXJ1
猜測:Oracle 將數據文件抽取到緩存區,一旦使用過就會進行清除。
所以,一個用戶導向兩個用戶需要分開寫兩條命令語句。
將 ng_lxj1 用戶下的 t1 表的數據導入 ng_lxj2 用戶中:
imp system/manager@243 file = D:/orcltest/ng_lxj_user.dmpfromuser = ng_lxj1 touser = ng_lxj2 tables = t1
4、從備份數據文件中,僅導入建表語句而不導入數據記錄,文件路徑 D:/orcl/scott.dmp
imp scott/scott@orcl file = D:/orcl/scott.dmp full = yignore = y rows = n
5、使用參數文件
imp system/manager@243 parfile=bible_tables.par
bible_tables.par 參數文件:
file = D:/orcltest/ng_lxj_user.dmp fromuser = ng_lxj1touser = ng_lxj
【全部參數】
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)
STREAMS_CONFIGURATION 導入流的一般元數據 (Y)
STREAMS_INSTANTIATION 導入流實例化元數據 (N)
DATA_ONLY 僅導入數據 (N)
下列關鍵字僅用于可傳輸的表空間
TRANSPORT_TABLESPACE 導入可傳輸的表空間元數據 (N)
TABLESPACES 將要傳輸到數據庫的表空間
DATAFILES 將要傳輸到數據庫的數據文件
TTS_OWNERS 擁有可傳輸表空間集中數據的用戶
【P.S.】
1、高版本的 Export 導出來的轉儲文件,低版本的 Import 讀不了;低版本的 Export 導出來的轉儲文件,高版本的 Import 可以進行讀取。
2、從 Oracle 低版本的 Export 數據可以 Import 到 Oracle 高版本中,但限于 Oracle 的相鄰版本,兩個不相鄰版本間進行轉換應借助中間版本。
3、Oracle 10g export 的文件且包含大字段通過 Oracle 11g 客戶端 Import 到 Oracle10g 數據庫時會報“IMP-00058”、“ORA-00942”表不存在的錯誤,且含幾個大字段會報幾次,但最終數據會成功導入且無錯誤。想不報錯就換個 10g 客戶端或用 11g 客戶端導入 11g 服務器數據庫。
4、exp/imp 可以做到在不同版本 Oracle、不同數據庫上的遷移,在進行不同數據庫上遷移時很可能會出現表空間不存在的報錯。解決方法:首先,我們可以嘗試先建表且指定新的表空間,然后使用 imp 且 ignore= y 僅導入數據;若仍報表空間不存在則最佳方法是改變 exp,將需要備份的表的表空間指定為 USERS(系統默認表空間);也可以在要導入的數據庫上建一個極小的與導出數據庫表空間同名的表空間。
5、在有主外鍵關鍵時,若主外鍵表均存在于備份文件,則 imp 會自動識別并在導入數據后建立約束,若僅導入外鍵表而不導入主鍵表則數據成功導入但會報錯且外鍵約束丟失。
6、多表多條件導出,tables 指定多表,而 query 不能針對不同表做不同條件限制,可以寫多條語句分別導出各表,也可以使用 expdp 來多表多條件導出。
7、導入大表時存儲分配失敗,默認的 EXP 時,compress = Y,也就是把所有的數據壓縮在一個數據塊上。導入時, 如果不存在連續一個大數據塊,則會導入失敗。導出 80M 以上的大表時,記得 compress= N,則不會引起這種錯誤。
8、導入導出時有三種可選模式(全庫、用戶、表),exp/imp 使用時必須選用其中一種模式且全文件模式時不能出現其他模式;
9、使用用戶模式導入導出時,USERID 需要使用高權限用戶如 system/manager;
10、借助 PL/SQL,在表中不存在大字段時,我們還可以借助 PL/SQL 的導出工具來導入導出;需要注意的是,從一個庫中導出的文件可能默認的時間格式與另一個庫不同而產生出錯,且導出的純 SQL insert 語句有時間不能直接用于 DB2,里面對于空、大字段等的定義是不同的。
11、從 Oracle 10g 開始提供了稱為數據泵新的工具 expdp/impdp,它為 Oracle 數據提供高速并行及大數據的遷移。imp/exp 可以在客戶端調用,但是 expdp/impdp 只能在服務端,因為在使用 expdp/impdp 以前需要在數據庫中創建一個 Directory。
數據泵的特點與傳統導出導入的區別
1. EXP 和 IMP 是客戶端工具程序,它們既可以在客戶端使用,也可以在服務端使用;EXPDP 和 IMPDP 是服務端的工具程序,他們只能在 ORACLE 服務端使用,不能在客戶端使用。
2.EXP 和 IMP 效率比較低.EXPDP 和 IMPDP 效率高
3. 數據泵功能強大并行、過濾、轉換、壓縮、加密、交互等等
4. 數據泵不支持 9i 以前版本,EXP/IMP 短期內還是比較適用
5. 數據泵導出包括導出表, 導出方案, 導出表空間, 導出數據庫 4 種方式,而 imp/exp 是 3 種
6.IMP 只適用于 EXP 導出的文件,不適用于 EXPDP 導出文件;IMPDP 只適用于 EXPDP 導出的文件,而不適用于 EXP 導出文件
【expdp/impdp】
該命令僅能在服務端使用!也就是說必須在數據庫導入或導出的服務器上使用該命令!
使用該命令需要邏輯目錄與物理目錄均存在!
如,導出本地 orcl 數據庫中 soctt 用戶的 emp,dept 兩表步驟:
1) 創建邏輯目錄
該命令不會在操作系統創建真正的目錄,最好以 system 等管理員創建
登錄 SQLPLUS:
sqlplus system/manager@orcl as sysdba
創建邏輯目錄:
create directory dptest as‘d:\dptest’;
2) 給導出用戶授權
grant read,write on directory dptest to scott;
3) 建立物理目錄
在 D 盤新建目錄 dptest
4) 導出 emp、dept 表
expdp scott/scott@orcl tables = emp,dept dumpfile =empdept_dp.dmp directory = dptest
【expdp 常用參數】
DIRECTORY 供轉儲文件和日志文件使用的目錄對象,需要在導出前創建;
DUMPFILE 指定導出數據文件名,不填寫目錄路徑則默認為 direcory 指定的目錄,也可指定已創建的目錄對象;
CONTENT 指定要導出的內容,可選參數有 all、data_only 和 metadata_only,默認為 all,當參數為 all 時將導出 DDL 及其數據,data_only 只導出數據,metadata_only 只導出 DDL;
EXCLUDE 排除特定的對象類型,例如 EXCLUDE=TABLE:EMP;
INCLUDE 包括特定的對象類型,例如 INCLUDE=TABLE_DATA;
JOB_NAME 要創建的導出任務的名稱,若不指定則會默認會創建一個類似于 SYS_EXPORT_SCHEMA_01 的對象作為 JOB 名;
LOGFILE 指定日志文件名 (export.log);
NOLOGFILE 不寫入日志文件 (N);
FULL 導出整個數據庫 (N);
SCHEMAS 要導出的方案的列表 (登錄方案);
TABLES 指定要導出的表的列表;
TABLESPACES 指定要導出的表空間的列表;
QUERY 用于導出表的子集的謂詞子句;
【示例】
1、【全庫模式】將本地數據庫全庫導出到已創建的目錄對象 dptest 中
expdp system/manager@orcl dumpfile = orcl_dp.dmp directory= dptest full = y
2、【表模式】將本地數據庫 scott 中的表 emp、dept 導出到已創建的目錄對象 dptest 中
expdp scott/scott@orcl tables = emp,dept dumpfile =empdept_dp.dmp directory = dptest
3、【用戶模式】將本地數據庫 scott 用戶數據導出到已創建的目錄對象 dptest 中
expdp scott/scott@orcl schemas = scott dumpfile = scott_dp.dmpdirectory = dptest
4、【表空間模式】將本地數據庫中 USERS 和 TEMP 表空間下數據導出到已創建的目錄對象 dptest 中
expdp system/manager@orcl dumpfile = users_temp_dp.dmpdirectory = dptest tablespace = users,temp
5、按表導出且指定條件(可實現多表多條件),將表 emp 中 SAL 字段大于 1000 的記錄導出
expdp scott/scott@orcl directory= dptest dumpfile=expdp.dmp tables=empquery= where sal 1000
6、并行進程 parallel
expdp scott/scott@orcl directory= dptest dumpfile=scott1.dmp parallel=40 job_name=scott1
【impdp 常用參數】
DIRECTORY 供轉儲文件和日志文件使用的目錄對象,需要在導入前創建;
DUMPFILE 指定導入數據文件名,不填寫目錄路徑則默認為 direcory 指定的目錄,也可指定已創建的目錄對象;
CONTENT 指定要導入的內容,可選參數有 all、data_only 和 metadata_only,默認為 all,當參數為 all 時將導入 DDL 及其數據,data_only 只導入數據,metadata_only 只導入 DDL;
EXCLUDE 排除特定的對象類型,例如 EXCLUDE=TABLE:EMP;
INCLUDE 包括特定的對象類型,例如 INCLUDE=TABLE_DATA;
JOB_NAME 要創建的導入任務的名稱;
LOGFILE 指定日志文件名 (import.log);
NOLOGFILE 不寫入日志文件 (N);
FULL 導出整個數據庫 (N);
SCHEMAS 要導出的方案的列表 (登錄方案);
TABLES 指定要導出的表的列表;
TABLESPACES 指定要導出的表空間的列表;
QUERY 用于導出表的子集的謂詞子句;
REMAP_SCHEMA 將一個方案中的對象加載到另一個方案;
REMAP_TABLESPACE 將表空間對象重新映射到另一個表空間,在不同數據庫導入導出時用于更改表空間;
【示例】
1、【全庫模式】將數據文件全庫導入本地數據庫,數據文件存放于到已創建的目錄對象 dptest 中
impdp system/manager@orcl dumpfile = orcl_dp.dmpdirectory = dptest full = y
2、【表模式】將數據文件中表 emp、dept 導入本地數據庫 scott 用戶下
impdp scott/scott@orcl tables = emp,dept dumpfile =empdept_dp.dmp directory = dptest
將數據文件中表 emp 導入本地數據庫且將其擁有者改為 system
impdp system/manager dumpfile = empdept_dp.dmpdirectory = dptest tables=scott.dept remap_schema=scott:system
3、【用戶模式】將數據文件導入本地數據庫 scott 用戶下
impdp scott/scott@orcldumpfile = scott_dp.dmp directory = dptest SCHEMAS=scott;
4、更換表空間
impdp scott/scott@orcl dumpfile = scott_dp.dmpdirectory = dptest remap_tablespace=users:temp
【大例子】
從一個用戶 expdp 導出再 impdp 導入到另一個用戶
如:Windows 為 A 服務器,Linux 為 B 服務器, 數據庫用戶為 test,把 A 服務器的數據遷移到 B 服務器中
在 A 服務器操作:
1、
SQL create directory expdp_dir as D:\mzl\backup
SQL grant read,write on directory expdp_dir totest;
2、在 windows 目錄創建目錄 D:\mzl\backup
3、在 DOS 命令窗口導出:
expdp test/test DIRECTORY=expdp_dir DUMPFILE=test.dmplogfile=testexpdp.log
在 B 服務器中操作:
4、SQL create directory impdp_diras /home/oracle/impdp_dir
SQL grantread,write on directory impdp_dir to test;
1、在系統中需要有 /home/oracle/impdp_dir 目錄,在 impdp_dir 目錄下必須有讀寫權限
(chmod 777 impdp_dir)
5、用 ftp 把 A 服務器導出的數據上傳到 B 服務器的 /home/oracle/impdp_dir 目錄中
在 A 服務器中配置好 B 服務器的服務器名, 在 A 服務器導入數據
6、在 DOS 命令窗口導出:
imppdp test/test@B_database DIRECTORY=impdp_dirDUMPFILE=test.dmp logfile=testimpdp.log
(這里注意大小寫,如果 test.dmp 在 linux 中為大寫,必須更改為大寫。Linux 區分大小寫)
以上是“Oracle 數據庫導入導出邏輯備份方法有哪些”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注丸趣 TV 行業資訊頻道!