溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Oracle數據庫導入導出邏輯備份方法有哪些

發布時間:2021-11-11 09:54:33 來源:億速云 閱讀:203 作者:小新 欄目:數據庫

這篇文章主要介紹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數據庫導入導出邏輯備份方法有哪些”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女