Oracle導(dǎo)入導(dǎo)出dmp文件的方法對比及示例
前言
在工作中,經(jīng)常會遇到需要備份庫,庫表遷移的場景,對于oracle會使用dmp文件進(jìn)行數(shù)據(jù)遷移和備份。基于一次遷移數(shù)據(jù)庫的經(jīng)歷,整理記錄dmp相關(guān)知識點,供后續(xù)工作參考使用。
一、什么是dmp?
● dmp
是"Data Pump"
的縮寫,它是Oracle獨有的一種數(shù)據(jù)導(dǎo)入導(dǎo)出文件格式。.dmp文件是一種數(shù)據(jù)庫導(dǎo)出文件的擴展名,通常用于存儲數(shù)據(jù)庫中的表、數(shù)據(jù)、視圖等對象的結(jié)構(gòu)和內(nèi)容。是一種特定數(shù)據(jù)庫系統(tǒng)的二進(jìn)制信息,因此不能直接用文本編輯器打開。
●.dmp文件一般包含數(shù)據(jù)定義語言(DDL)和數(shù)據(jù)操作語言(DML)。具體來說,DDL是用來定義數(shù)據(jù)庫對象,例如表、視圖、用戶等等;DML則是用來操作這些對象,例如插入、刪除、更新數(shù)據(jù)等。常用來進(jìn)行數(shù)據(jù)庫遷移或者備份操作。
●其他數(shù)據(jù)庫也有類似備份文件,比如MySQL數(shù)據(jù)庫
使用.sql文件
或者.dump文件
來表示數(shù)據(jù)庫導(dǎo)出文件,而SQL Server數(shù)據(jù)庫
使用.bak文件
來表示備份文件。
二、imp/impdp、exp/expdp對比及示例
imp/exp(Oracle導(dǎo)入導(dǎo)出實用程序)
是使用傳統(tǒng)的導(dǎo)出技術(shù),而impdp/expdp(數(shù)據(jù)泵導(dǎo)入實用程序)
是使用Oracle Data Pump技術(shù)。Data Pump是Oracle在10g版本中引入的高性能、可擴展的導(dǎo)入導(dǎo)出工具,即 Oracle 10g 之前的版本不可以使用 impdp/expdp。
1.區(qū)別
●imp和exp是傳統(tǒng)的導(dǎo)入和導(dǎo)出工具,而impdp和expdp是數(shù)據(jù)泵工具,采用了新的架構(gòu)和方法。
●imp和exp是基于基于二進(jìn)制文件
的,而impdp和expdp則是使用數(shù)據(jù)泵作業(yè)
來執(zhí)行數(shù)據(jù)移動操作,可以提供更高的性能和擴展性。
●imp和exp不支持在分布式環(huán)境中執(zhí)行,而impdp和expdp可以在分布式環(huán)境中執(zhí)行。
●數(shù)據(jù)泵通常指的是一種高性能的數(shù)據(jù)導(dǎo)入和導(dǎo)出工具,用于在數(shù)據(jù)庫系統(tǒng)中進(jìn)行快速的數(shù)據(jù)遷移和加載操作。數(shù)據(jù)泵工具能夠提供比傳統(tǒng)的導(dǎo)入導(dǎo)出工具更快速、更靈活的數(shù)據(jù)傳輸方式,通常支持并行處理、大容量數(shù)據(jù)傳輸和高性能加載等特點。
2.imp/impdp對比及示例
a. imp
可通過 imp help=y 命令查詢相關(guān)參數(shù)
- imp常用參數(shù)說明,可以根據(jù)需要指定不同的參數(shù)來控制導(dǎo)入的方式和內(nèi)容。
參數(shù) | 使用說明 |
---|---|
TOUSER | 指定要導(dǎo)入數(shù)據(jù)的用戶名。 |
FROMUSER | 指定導(dǎo)入數(shù)據(jù)來自的用戶名。 |
FILE | 指定要導(dǎo)入的文件路徑和名稱。例如,F(xiàn)ILE=/path/to/import.dmp。 |
IGNORE | 指定是否忽略導(dǎo)入過程中遇到的錯誤??梢允荵或N。 |
INDEXES | 指定是否導(dǎo)入索引??梢允荵或N。 |
ROWS | 控制是否導(dǎo)入表中的行數(shù)據(jù)??梢允荵或N。 |
DATA_ONLY | 指定只導(dǎo)入數(shù)據(jù),不包括對象定義??梢允荵或N。 |
IGNORECASE | 指定導(dǎo)入時是否忽略大小寫??梢允荵或N。 |
FULL | 指定導(dǎo)入前先刪除現(xiàn)有對象??梢允荵或N。 |
LOG | 指定導(dǎo)入操作的日志文件路徑和名稱。例如,LOG=/path/to/import.log。 |
BUFFER | 指定讀取導(dǎo)入文件時的緩沖區(qū)大小。 |
REMAP_SCHEMA | 指定要將導(dǎo)入的對象映射到的新模式名。 |
REMAP_TABLESPACE | 指定要將導(dǎo)入的表空間映射到的新表空間名。 |
TABLES | 指定要導(dǎo)入的特定表。舉例:IMP SCOTT/TIGER IGNORE=Y TABLES=(EMP,DEPT) FULL=N(or TABLES=(T1:P1,T1:P2) 表分區(qū)可用) |
- 命令格式:
imp 用戶名/密碼@數(shù)據(jù)庫實例 FILE=導(dǎo)入文件的路徑.dmp FROMUSER=源用戶名 TOUSER=目標(biāo)用戶名
- 命令示例:
--windows環(huán)境下 imp username/password@SERVICENAME:1521 file=e:\temp.dmp rows=y log=E:/test/dmp/kf_workflow_0512.log full = y; -linux環(huán)境路徑進(jìn)行替換
b. impbp
可通過 impbp help=y 命令查詢相關(guān)參數(shù)
- impbp常用參數(shù)說明,可以根據(jù)需要指定不同的參數(shù)來控制導(dǎo)入的方式和內(nèi)容。
參數(shù) | 使用說明 |
---|---|
ATTACH | 指定是否附加到正在運行的 impdp 作業(yè)。 |
DIRECTORY | 指定導(dǎo)入和導(dǎo)出文件所在的目錄對象。 |
DUMPFILE | 指定要導(dǎo)入的數(shù)據(jù)泵文件名。 |
REMAP_DATAFILE | 指定要將源數(shù)據(jù)文件映射到的目標(biāo)數(shù)據(jù)文件。 |
REMAP_SCHEMA | 指定要將源模式映射到的目標(biāo)模式。 |
REMAP_TABLESPACE | 指定要將源表空間映射到的目標(biāo)表空間。 |
TABLE_EXISTS_ACTION | 對于已存在的表,指定要采取的操作(SKIP、APPEND、TRUNCATE、REPLACE)。 |
TRANSFORM | 指定要應(yīng)用的數(shù)據(jù)轉(zhuǎn)換選項。 |
CONTENT | 指定要導(dǎo)入的對象類型(ALL、DATA_ONLY、METADATA_ONLY)。 |
PARALLEL | 指定并行執(zhí)行導(dǎo)入作業(yè)的程度。 |
LOGFILE | 指定導(dǎo)入操作的日志文件名。 |
INCLUDE/EXCLUDE | 指定要導(dǎo)入或排除的對象。 |
QUERY | 指定導(dǎo)入時使用的查詢條件。For example, QUERY=employees:“WHERE department_id > 10”. |
- 命令格式:
--命令參考 impdp 用戶名/密碼@數(shù)據(jù)庫實例 DIRECTORY=目錄名稱 DUMPFILE=導(dǎo)入文件的名稱.dmp REMAP_SCHEMA=源用戶名:目標(biāo)用戶名 --舉例 impdp user/password@SID DIRECTORY=DMPDATA DUMPFILE=fileName.dmp remap_tablespace=um_dev:um remap_schema=u_um_dev:u_um
參數(shù)說明:
- user/password@SID 用戶名/用戶密碼@數(shù)據(jù)庫實例;
- directory=dmpdata 導(dǎo)入的目錄,DMPDATA為數(shù)據(jù)庫虛擬路徑(參考目錄三中的目錄映射),即導(dǎo)入dmpdata下的文件也就是’/data/u01/dmpdata/';
- dumpfile=filename.dmp 導(dǎo)入的文件名,結(jié)合上面的 directory=dmpdata 就將’/data/u01/dmpdata/filename.dmp’;導(dǎo)入目標(biāo)服務(wù)器(需要注意大小寫);
- remap_tablespace=um_dev:um----->um_dev:導(dǎo)出表空間 ,um:導(dǎo)入表空間;
- remap_schema=u_um_dev:u_um ----> u_um_dev:導(dǎo)出用戶 u_um:導(dǎo)入用戶。
- 命令示例:
impdp kf_gs_workflow_0604/a@gfmisdev directory='DUMP_DIR' DUMPFILE='GSU_WORKFLOW_20240604.dmp' LOGFILE='GSU_WORKFLOW_20240604.log' REMAP_SCHEMA=GSU_WORKFLOW:kf_gs_workflow_0604 REMAP_TABLESPACE=GRP:USERS
3.exp/expdp對比及示例
a. exp
可通過 exp help=y 命令查詢相關(guān)參數(shù)
- imp常用參數(shù)說明,可以根據(jù)需要指定不同的參數(shù)來控制導(dǎo)入的方式和內(nèi)容。
參數(shù) | 使用說明 |
---|---|
TABLES | 指定要導(dǎo)出的表格。例如,TABLES=table1,table2。 |
FILE | 指定導(dǎo)出文件的路徑和名稱。例如,F(xiàn)ILE=/path/to/export.dmp。 |
LOG | 指定導(dǎo)出過程的日志文件路徑和名稱。例如,LOG=/path/to/export.log。 |
QUERY | 指定要導(dǎo)出數(shù)據(jù)的查詢條件。例如,QUERY=“ SELECT * FROM TABLE WHERE column_name=‘value’”。 |
ROWS | 控制是否導(dǎo)入表中的行數(shù)據(jù)??梢允荵或N。 |
STATISTICS | 指定是否導(dǎo)出統(tǒng)計信息??梢允茿LL、ESTIMATE或NONE。 |
GRANTS | 指定是否導(dǎo)出對象的授權(quán)信息??梢允荵、N或FULL。 |
CONSISTENT | 指定是否導(dǎo)出一致性視圖。可以是Y或N。 |
INDEXES | 指定是否導(dǎo)出索引??梢允荵或N。 |
COMPRESS | 指定是否壓縮導(dǎo)出文件。可以是Y或N。 |
- 命令格式:
exp username/password@[database] FILE=[導(dǎo)出文件路徑] TABLES=[要導(dǎo)出的表名]
- 命令示例:
--完全導(dǎo)出: exp user/password@SID file=E:/test/dmp/kf_workflow_0512.dmp full=y --導(dǎo)出A、B表 exp user/password@SID file= E:/test/dmp/kf_workflow_0512.dmp tables=(A,B)
b.expdp
可通過 expdp help=y 命令查詢相關(guān)參數(shù)
- imp常用參數(shù)說明,可以根據(jù)需要指定不同的參數(shù)來控制導(dǎo)入的方式和內(nèi)容。
參數(shù) | 使用說明 |
---|---|
SCHEMAS | 指定要導(dǎo)出的模式名。例如,SCHEMAS=schema1,schema2。 |
INCLUDE | 指定要包括的對象類型。例如,INCLUDE=TABLE,VIEW將只導(dǎo)出表和視圖。 |
EXCLUDE | 指定要排除的對象類型。例如,EXCLUDE=INDEX將排除索引的導(dǎo)出。 |
DIRECTORY | 指定導(dǎo)出文件的目錄對象。例如,DIRECTORY=datapump_dir。 |
DUMPFILE | 指定導(dǎo)出文件的名稱。例如,DUMPFILE=export.dmp。 |
LOGFILE | 指定導(dǎo)出操作的日志文件名稱。例如,LOGFILE=export.log。 |
PARALLEL | 指定并行導(dǎo)出的進(jìn)程數(shù)。 |
DIRECTORY | 指定導(dǎo)出文件的目錄對象。例如,DIRECTORY=datapump_dir。 |
COMPRESSION | 指定導(dǎo)出文件是否壓縮。可以是ALL、DATA_ONLY、METADATA_ONLY或NONE。 |
CONTENT | 指定導(dǎo)出內(nèi)容??梢允茿LL、DATA_ONLY、METADATA_ONLY或METADATA_ONLY_EXCLUDING_DATA。 |
QUERY | 指定導(dǎo)出的數(shù)據(jù)查詢條件。例如,QUERY=“WHERE column_name=‘value’”。 |
FILESIZE | 指定導(dǎo)出文件的最大文件大小。 |
JOB_NAME | 指定導(dǎo)出作業(yè)的名稱。 |
VERSION | 給定系統(tǒng)版本號的對象。例如,VERSION=SCN,SCN為版本號。 |
- 命令格式:
expdp 用戶名/密碼@數(shù)據(jù)庫實例 DIRECTORY=目錄名稱 DUMPFILE=導(dǎo)出文件名.dmp EXCLUDE=TABLE:"IN ('table1','table2')" INCLUDE=TABLE:"IN ('EMPLOYEES', 'DEPARTMENTS')" FULL=Y
- 命令示例:
--按用戶導(dǎo) expdp user/password@SID schemas=u_mom_um dumpfile=expdp.dmp directory=dmp logfile=expdlog.log; --按表名導(dǎo) expdp user/password@SID tables=test1,test2 dumpfile=expdp.dmp directory=dmp logfile=expdlog.log; --按查詢條件導(dǎo) expdp user/password@SID directory=dmp dumpfile=expdp.dmp Tables=test query='WHERE id<20' logfile=expdlog.log; --按表空間導(dǎo) expdp user/password@SID directory=dmp dumpfile=expdp.dmp TABLESPACES={#表空間1},{#表空間2} logfile=expdlog.log; --導(dǎo)整個庫 expdp user/password@SID directory=dmp dumpfile=expdp.dmp FULL=y logfile=expdlog.log;
- 具體命令示例:
--按照表空間導(dǎo) expdp user/password@SID directory=DMPDATA dumpfile=tbs2022.dmp TABLESPACES=tbs logfile=expdlog.log; --用EXCLUDE、INCLUDE時,對應(yīng)的符號需要進(jìn)行轉(zhuǎn)譯 expdp GSU_ELEMENT/yth2023 schemas=GSU_ELEMENT dumpfile=GSU_ELEMENT_20240604.dmp EXCLUDE=TABLE:\"IN\(\'GFM_TB_RESULT\',\'GAP_PAYEE_ACCOUNT\'\)\" directory=GSZX logfile=GSU_ELEMENT_20240604.log
3.其他事項
- 在執(zhí)行導(dǎo)入導(dǎo)出時需要進(jìn)入oracle去執(zhí)行。
--linux su oracle ;--到這就可執(zhí)行導(dǎo)入導(dǎo)出 sqlplus / as sysdba; --windows: win + r,cmd,enter; --到這可執(zhí)行導(dǎo)入導(dǎo)出 sqlplus 用戶名/口令@數(shù)據(jù)庫名 as sysdba;
- 在執(zhí)行導(dǎo)入、導(dǎo)出的命令時,可通過nohup來執(zhí)行,nohup是一個在Unix和類Unix操作系統(tǒng)上用來忽略HUP(掛起)信號并運行命令的實用程序。通過使用nohup,您可以使命令在后臺運行,即使當(dāng)前Shell終端窗口關(guān)閉,也能繼續(xù)運行。
- 使用exp 導(dǎo)出文件需要使用imp導(dǎo)入,數(shù)據(jù)泵類型需要一致。
- 用
EXCLUDE、INCLUDE
時,對應(yīng)的符號需要進(jìn)行轉(zhuǎn)譯;
三、執(zhí)行導(dǎo)入導(dǎo)出前置條件
如果數(shù)據(jù)庫用戶已經(jīng)存在,并有相關(guān)目錄跳過此步驟。
1.創(chuàng)建角色并授權(quán)
--創(chuàng)建角色 create user orcl identified by orclorcl; --授權(quán) grant dba ,connect ,resource ,select any table,create view to orcl; --查看用戶創(chuàng)建情況 select * from all_users;
2.創(chuàng)建目錄映射
CREATE DIRECTORY my_dir AS '/path/to/directory';
- 查詢現(xiàn)有目錄是否滿足條件
select * from DBA_DIRECTORIES;
- 創(chuàng)建文件夾
--linux mkdir /data/u01/dmpdata --windows下自行創(chuàng)建文件,記下目錄
- 文件夾創(chuàng)建后給oracle用戶授權(quán)
chown -R oracle /data/u01/dmpdata
- 數(shù)據(jù)庫里執(zhí)行SQL創(chuàng)建導(dǎo)入/導(dǎo)出目錄(目錄映射)
--目錄對象在數(shù)據(jù)庫中注冊,并映射到實際物理目錄的路徑。 create or replace directory DMPDATA as '/data/u01/dmpdata';
- 為建立的目錄賦權(quán)限,須要以其余用戶運行,建議在sys用戶下執(zhí)行
grant read,write on directory DMPDATA to {#用戶名};
總結(jié)
到此這篇關(guān)于Oracle導(dǎo)入導(dǎo)出dmp文件的方法對比及示例的文章就介紹到這了,更多相關(guān)Oracle導(dǎo)入導(dǎo)出dmp文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!