1. 程式人生 > >exp/expdp 與 imp/impdp命令導入導出數據庫詳解

exp/expdp 與 imp/impdp命令導入導出數據庫詳解

鏈接 lena attach 64bit lap 路徑 定時 存放位置 traints

一、exp命令導出數據庫

如何使exp的幫助以不同的字符集顯示:set nls_lang=simplified chinese_china.zhs16gbk,通過設置環境變量,可以讓exp的幫助以中文顯示,如果set nls_lang=American_america.字符集,那麽幫助就是英文的了。

技術分享

參數:

技術分享

1.1 導出用戶全部數據

exp 登錄名稱/用戶密碼@服務命名 FILE=文件存儲的路徑以及名稱 log=日誌存儲的路徑以及名稱 FULL=Y(表示導出全部數據,如視圖、索引關聯關系等等全部的東西)

exp hlsoa/[email protected] file=E:\test\file log=E:\test\log full=y 這是導出本地數據庫

如果要是導出遠程數據庫需要修改tnsnames.ora 在連接字符串中將HOST改為遠程數據庫地址也可以直接通過服務器地址加服務命名解決

exp hlsoa/[email protected]/orcl file=E:\test\file log=E:\test\log full=y

註意:在test文件夾下可以新建file.dmp、log.log文件也可以不建,系統會自動創建。上面命令中可以加文件後綴,也可以不加。但是test這個文件夾必須要存在。

1.2導出數據庫結構而不導出數據

exp 登錄名稱/用戶密碼@服務命名 file=文件存儲的路徑以及名稱 log=日誌存儲的路徑以及名稱 full=y rows=n(不導出行數據)

exp hlsoa/[email protected] file=E:\test\file log=E:\test\log full=y rows=n

1.3導出一個或者多個指定表

exp 登錄名稱/用戶密碼@服務命名 file=文件存儲的路徑以及名稱 log=日誌存儲的路徑以及名稱 tables=表名字

exp 登錄名稱/用戶密碼@服務命名 file=文件存儲的路徑以及名稱 log=日誌存儲的路徑以及名稱 tables=(表1,表2,表3,表N)

1.4 導出某個用戶所擁有的數據庫表

exp 用戶名/密碼@服務命名 file=存放位置\存放文件名.dmp log=存放位置\存放文件名.log owner=擁有者用戶名

exp hlsoa/[email protected] file=E:\test\file log=E:\test\log owner=(hlsoa)

1.5 用多個文件分割一個導出文件

exp system/manager file=(paycheck_1,paycheck_2,paycheck_3,paycheck_4) log=paycheck, filesize=1G tables=hr.paycheck

1.6使用參數文件導出數據

exp system/[email protected]服務命名 parfile=bible_tables.par

bible_tables.par(參數示例文件):

#Export the sample tables used for the Oracle8i Database Administrator‘s Bible.

file=bible_tables(文件存儲的路徑以及名稱)

log=bible_tables(日誌存儲的路徑以及名稱)

tables=(

amy.artist

amy.books

seapark.checkup

seapark.items

)

1.7 增量導出數據

--“完全”增量導出(complete),即備份整個數據庫

exp system/[email protected]服務命名 inctype=complete file=990702.dmp

--“增量型”增量導出(incremental),即備份上一次備份後改變的數據

exp system/[email protected]服務命名 inctype=incremental file=990702.dmp

--“累計型”增量導出(cumulative),即備份上一次“完全”導出之後改變的數據

exp system/[email protected]服務命名 inctype=cumulative file=990702.dmp

導出某個用戶所擁有的數據庫表:

exp 用戶名/密碼@服務命名 file=存放位置\存放文件名.dmp log=存放位置\存放文件名.log owner=擁有者用戶名

1.8估計導出文件的大小

--整個數據庫全部表總字節數:

SELECT sum(bytes)/1024/1024/1024 "占用空間:單位GB"

FROM dba_segments

WHERE segment_type = ‘TABLE‘;

--指定用戶所屬表的總字節數:

SELECT sum(bytes)

FROM dba_segments

WHERE owner = ‘SEAPARK‘

AND segment_type = ‘TABLE‘;

seapark用戶下的aquatic_animal表的字節數:

SELECT sum(bytes)

FROM dba_segments

WHERE owner = ‘SEAPARK‘

AND segment_type = ‘TABLE‘

AND segment_name = ‘AQUATIC_ANIMAL‘

二、imp 命令導入數據庫

參數:

技術分享

2.1 導入一個完整數據庫

imp 登錄名稱/用戶密碼@服務命名 FILE=數據文件存儲的路徑以及名稱 log=日誌存儲的路徑以及名稱 FULL=Y IGNORE=y(因為有的表已經存在,然後它就報錯,對該表就不進行導入,然後忽略該報錯)

imp system/manager file=bible_db log=dible_db full=y ignore=y

2.2導入一個或一組指定用戶所屬的全部表、索引和其他對象

imp system/manager file=seapark log=seapark fromuser=seapark

imp system/manager file=seapark log=seapark fromuser=(seapark,amy,amyc,harold)

2.3 將一個用戶所屬的數據導入另一個用戶

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)

2.4 導入一個或者多個表

imp system/manager file=tank log=tank fromuser=seapark TABLES=(a,b)

2.5 從多個文件導入

imp system/manager file=(paycheck_1,paycheck_2,paycheck_3,paycheck_4) log=paycheck, filesize=1G full=y

2.6 使用參數文件

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

2.7 增量導入

imp system./manager inctype= RECTORE FULL=Y FILE=A

三、expdp命令導出數據庫

3.1 參數介紹

序號

關鍵字

說明 (默認)

01

ATTACH

連接到現有作業, 例如 ATTACH [=作業名]。

02

COMPRESSION

減小有效的轉儲文件內容的大小關鍵字值為: (METADATA_ONLY) 和 NONE。

03

CONTENT

指定要卸載的數據, 其中有效關鍵字為:(ALL),DATA_ONLY 和 METADATA_ONLY。

04

DIRECTORY

供轉儲文件和日誌文件使用的目錄對象。

05

DUMPFILE

目標轉儲文件 (expdat.dmp) 的列表,例如 DUMPFILE=scott1.dmp, scott2.dmp, dmpdir:scott3.dmp。

06

ENCRYPTION_PASSWORD

用於創建加密列數據的口令關鍵字。

07

ESTIMATE

計算作業估計值, 其中有效關鍵字為: (BLOCKS) 和 STATISTICS。

08

ESTIMATE_ONLY

在不執行導出的情況下計算作業估計值。

09

EXCLUDE

排除特定的對象類型, 例如 EXCLUDE=TABLE:EMP。

10

FILESIZE

以字節為單位指定每個轉儲文件的大小。

11

FLASHBACK_SCN

用於將會話快照設置回以前狀態的 SCN。

12

FLASHBACK_TIME

用於獲取最接近指定時間的 SCN 的時間。

13

FULL

導出整個數據庫 (N)。

14

HELP

顯示幫助消息 (N)。

15

INCLUDE

包括特定的對象類型, 例如 INCLUDE=TABLE_DATA。

16

JOB_NAME

要創建的導出作業的名稱。

17

LOGFILE

日誌文件名 (export.log)。

18

NETWORK_LINK

鏈接到源系統的遠程數據庫的名稱。

19

NOLOGFILE

不寫入日誌文件 (N)。

20

PARALLEL

更改當前作業的活動 worker 的數目。

21

PARFILE

指定參數文件。

22

QUERY

用於導出表的子集的謂詞子句。

23

SAMPLE

要導出的數據的百分比;

24

SCHEMAS

要導出的方案的列表 (登錄方案)。

25

STATUS

在默認值 (0) 將顯示可用時的新狀態的情況下, 要監視的頻率 (以秒計) 作業狀態。

27

TABLES

標識要導出的表的列表 - 只有一個方案。

28

TABLESPACES

標識要導出的表空間的列表。

29

TRANSPORT_FULL_CHECK

驗證所有表的存儲段 (N)。

30

TRANSPORT_TABLESPACES

要從中卸載元數據的表空間的列表。

31

VERSION

要導出的對象的版本, 其中有效關鍵字為: (COMPATIBLE), LATEST 或任何有效的數據庫版本。

32

ADD_FILE

向轉儲文件集中添加轉儲文件。

33

CONTINUE_CLIENT

返回到記錄模式。如果處於空閑狀態, 將重新啟動作業。

35

EXIT_CLIENT

退出客戶機會話並使作業處於運行狀態。

36

FILESIZE

後續 ADD_FILE 命令的默認文件大小 (字節)。

37

HELP

總結交互命令。

38

KILL_JOB

分離和刪除作業。

39

PARALLEL

更改當前作業的活動 worker 的數目。 PARALLEL=<worker 的數目>。

40

START_JOB

啟動/恢復當前作業。

41

STATUS

在默認值 (0) 將顯示可用時的新狀態的情況下, 要監視的頻率 (以秒計) 作業狀態。 STATUS[=interval]

42

STOP_JOB

順序關閉執行的作業並退出客戶機。 STOP_JOB=IMMEDIATE 將立即關閉 數據泵作業。

3.1.1參數:schemas

導出orcldev這個schema的所用對象[schemas or full]

eg:expdp orcldev/[email protected] directory=backup_path dumpfile=orcldev_schema.dmp logfile=orcldev_schema_2017.log schemas=orcldev

3.1.2參數:tables

導出orcldev這個用戶下的某些表[tables]

eg:C:\>expdp orcldev/oracle directory=dackup_path dumpfile=orcldev_table.dmp logfile=orcldev_table_2017.log tables=(‘TAB_TEST‘,‘TAB_A‘)

3.1.3參數:content

只導出orcldev這個用戶的元數據[content]

eg:C:\>expdp orcldev/oracle directory=dackup_pathdumpfile=orcldev_meta.dmp logfile=orcldev_meta_2017.log SCHEMAS=orcldev CONTENT=METADATA_ONLY

3.1.4參數:sample

只導出orcldev這個用戶50%的抽樣數據[sample]

eg:C:\>expdp orcldev/oracle directory=dackup_pathdumpfile=orcldev_samp.dmp logfile=orcldev_samp_2017.log schemas=orcldevsample=50

3.1.5參數:exclude

導出orcldev這個方案對象,但不包含索引[exclude]

eg: --可以剔除的對象有:VIEW,PACKAGE,FUNCTION,index,constraints,table,schema,user等等

C:\>expdp orcldev/oracle directory=dackup_path dumpfile=orcldev_exclude.dmp logfile=orcldev_exclude.log SCHEMAS=orcldev EXCLUDE=index

C:\>expdp orcldev/oracle directory=dackup_path dumpfile=orcldev_exclude.dmp logfile=orcldev_exclude.log SCHEMAS=orcldev EXCLUDE=INDEX:"LIKE ‘TEST%‘" --導出這個orcldev方案,剔除以TEST開頭的索引

C:\>expdp orcldev/oracle directory=dackup_path dumpfile=orcldev_exclude.dmp logfile=orcldev_exclude.log EXCLUDE=SCHEMA:"=‘SCOTT‘"

C:\>expdp orcldev/oracle directory=dackup_path dumpfile=orcldev_exclude.dmp logfile=orcldev_exclude.log EXCLUDE=USER:"=‘SCOTT‘"

--備份整庫但剔除SCOTT這個用戶的對象。  

註意:include與exclude不能同時使用。

3.1.6參數:PARFILE

expdp命令可以調用parfile文件,在parfile裏可以寫備份腳本,可以使用query選項。

如expdp.txt內容如下:

USERID=orcldev/oracle directory=dackup_path dumpfile=orcldev_parfile.dmp logfile=orcldev_parfile.log TABLES=‘TAB_TEST‘ QUERY="WHERE TRAN_DATE=TO_DATE(‘2017-09-15‘,‘YYYY-MM-DD‘)"

執行方法:expdp parfile=expdp.txt 即可執行備份

使用parfile好處是使用query選項是不用使用轉義字符,如果將query參數放到外邊的話,需要將""進行轉義。

eg:

UNIX寫法:

expdp orcldev/oracle directory=backup_path dumpfile=2017.dmp logfile=2017.log schemas=orcldev INCLUDE=TABLE:\"IN\‘TESTA\‘,\‘TESTB\‘\" --在Unix系統執行是需要將單引號進行轉義操作,否則會報錯。

WINDOWS寫法:

expdp orcldev/oracle directory=backup_path dumpfile=2017.dmp logfile=2017.log schemas=orcldev INCLUDE=TABLE:"IN \(‘TEST_A‘,‘TEST_B‘)"

3.1.7參數:TABLESPACE

TABLESPACE導出表空間

eg:expdp orcldev/oracle directory=backup_path dumpfile=2017.dmplogfile =2017.log tablespaces=user,orcldev

3.1.8參數:Version

VERSION選項默認值是COMPATIBLE,即兼容模式。在我們備份的時候,可以指定版本號。

eg:expdp orcldev/oracle directory=backup_path dumpfile=2017.dmplogfile =2017.log full=Y VERSION=10.2.0.4

3.1.9參數:FLASHBACK_TIME

指定導出特定時間點的表數據,可以聯系一下FLASHBACK功能。

eg:C:\>expdp orcldev/oracle directory=dackup_path dumpfile=orcldev_flash.dmp logfile=orcldev_flash.log SCHEMAS=orcldev FLASHBACK_TIME="TO_TIMESTAMP(‘2017-09-15 14:30:00‘,‘DD-MM-YYYYHH24:MI:SS‘)"

3.2 準備工作

3.2.1 連接目標數據庫,查看服務器端字符集

SQL> select userenv(‘language‘) from dual;

USERENV(‘LANGUAGE‘)

----------------------------------------------------

SIMPLIFIED CHINESE_CHINA.ZHS16GBK

SQL>

3.2.2退出當前會話,設置客戶端字符集使之與服務端字符集一致

SQL> exit

從 Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options 斷開

C:\>SET NLS_LANG= SIMPLIFIED CHINESE_CHINA.ZHS16GBK

3.2.3 創建邏輯目錄,並賦予Oracle對其的讀寫權限

使用EXPDP工具時,其轉存儲文件只能被存放在directory對象對應的OS目錄中,而不能直接指定轉存儲文件所在的OS目錄。在此,先在操作系統創建目錄C:\dump

以system等管理員身份登錄sqlplus,授予用戶test對目錄對象dmp_dir的讀寫權限。

create directory dmp_dir as ‘C:\dump‘

grant read, write on directory dmp_dir to hlsbi;

  創建路徑需要sys權限,需要有create any directory權限才可以創建路徑。

  選項:DIRECTORY=directory_object

Directory_object用於指定目錄對象名稱。需要註意,目錄對象是使用CREATE DIRECTORY語句建立的對象,而不是OS目錄。

3.3 導出方式

與exp命令不同,expdp如果需要導出遠程數據庫就要用dblink

是本地客戶端直接修改tnsnams.ora文件在其中添加鏈接服務端字符串

EXPTEST =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.88)(PORT = 1521))

)

(CONNECT_DATA =

(SERVICE_NAME = ORCL)

)

)

然後直接在客戶端數據庫創建dblink進行鏈接

create public database link db10_rc connect to username identified by password using ‘connect_string‘;

註意:username和password是服務端的,並且特別註意該處的connect_string 就為tnsnames.ora中的服務名.或者直接使用‘=’號後面的字符串

create public database link db10_rc connect to username identified by password using ‘

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.88)(PORT = 1521))

)

(CONNECT_DATA =

(SERVICE_NAME = ORCL)

)

) ’

在客戶端創建文件夾,並給導出的用戶授權。

create or replace directory dir as ‘directory‘;

grant read,write on directory dir to username;

這裏的username是客戶端的當前用戶名,用於導出數據用的。

使用expdp導出遠程的數據到本地。

expdp user/pass network_link=db10_rc directory=trans_dir dumpfile=test1.dmp schemas=hlsoa

//這裏的username用創建dblink的那個用戶,directory也是客戶端數據庫創建的。

也可以直接將遠程的用戶導入本地用戶,跳過生成DUMPFILE(省了導出)這一步

SQL> impdp system/manager network_link=db10_rc directory=trans_dir tables=hlsoa.test remap_schema=hlsoa:hlsbi

3.3.1全庫導出模式

expdp system/[email protected] directory=dmp_dir dumpfile=fulldb.dmp full=y version=10.2.0.1.0

expdp test/[email protected] directory=dmp_dir dumpfile=fulldb.dmp full=y (高版本數據庫向低版本數據庫)

3.3.2推薦 用戶導出模式

Windows

expdp system/[email protected] ^

directory=dmp_dir ^

dumpfile=HLSHIS%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%_%time:~0,2%%time:~3,2%.DMP ^

logfile=HLSHIS%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%_%time:~0,2%%time:~3,2%.LOG ^

schemas=hisrun ^

parallel=4

linux

expdp system/[email protected] \

directory=dmp_dir \

dumpfile=HLSHIS$(date -d "today" +"%Y%m%d_%H%M%S").DMP \

logfile=HLSHIS$(date -d "today" +"%Y%m%d_%H%M%S").LOG \

schemas=hisrun \

parallel=4

expdp test/[email protected] directory=dmp_dir dumpfile=userdum.dmp schemas=hgmmo

expdp system/[email protected] directory=dmp_dir dumpfile=emr.dmp schemas=wsemr

——導出單個用戶數據(dumpfile指定dump文件名;schemas指定要被導出數據的用戶)

expdp test/[email protected] directory=dmp_dir dumpfile=userdum.dmp schemas=hgmmo,hgmqo

——導出多個用戶數據(用戶之間用逗號隔開)

3.3.3表導出模式

expdp system/[email protected] directory=dmp_dir dumpfile=tabledum.dmp tables=test.emp, test.dept

——導出test用戶的emp和dept兩個表

expdp system/[email protected] directory=dmp_dir dumpfile=tabledum.dmp tables=test.emp query=‘WHERE deptno=20‘

——導出表中符合指定條件的數據,使用query條件的語句較長時采用parfile方式

3.3.4表空間導出模式

expdp system/[email protected] directory=dmp_dir dumpfile=dumptbs.dmp tablespaces=tbs1,tbs2

3.3.5可移動表空間導出模式(只導出表空間的元數據,不真正導出數據)

expdp system/[email protected] directory=dmp_dir dumpfile=dumptbs.dmp transport_tablespaces=tbs1

3.3.6采用並行方式備份整庫[parallel]

    parallel參數只有在oracle10g之後的版本(包含10g)有效。

oracle_online:you can use the DUMPFILE parameter during export operations tospecify multiple dump files, by using a substitution variable (%U) in thefilename. This is called a dump file template. The new dump files are createdas they are needed, beginning with 01 for %U, then using 02,03,and so on.

   eg:C:\>expdporcldev/oracle directory=dackup_path dumpfile=orcldev_parallel_%U.dmplogfile=orcldev_parallel_2013.log parallel=4

    "%U"表示自動生成遞增的序列號。

四、impdp命令導入數據庫

4.1全庫模式導入

impdp test/[email protected] directory=dmp_dir dumpfile=fulldb.dmp full=y

4.2用戶模式導入

impdp test/[email protected] directory=dmp_dir dumpfile=userdum.dmp schemas=hgmmo

impdp test/[email protected] directory=dmp_dir dumpfile=userdum.dmp remap_schema=user1:user2

——remap_schema參數相當於imp工具中的fromuser和touser參數,可以實現將一個用戶的數據導入到另一個用戶中

4.3 表空間模式導入

impdp system/[email protected] directory=dmp_dir dumpfile=dumptbs.dmp tablespaces=tbs1

4.4 追加數據

impdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=system TABLE_EXISTS_ACTION=append

4.5 將高版本數據庫數據導入到低版本數據庫中

1.查詢oracle版本信息

SQL>show parameter compatible

2.使用version參數導入導出數據

expdp test/[email protected] directory=dmp_dir dumpfile=userdum.dmp schemas=hgmmo version =11.2.0.0.0

impdp test/[email protected] directory=dmp_dir dumpfile=userdum.dmp schemas=hgmmo version =11.2.0.0.0

exp/expdp 與 imp/impdp命令導入導出數據庫詳解