一、exp命令導出數據庫
如何使exp的幫助以不同的字符集顯示:set nls_lang=simplified chinese_china.zhs16gbk,通過設置環境變量,可以讓exp的幫助以中文顯示,如果set nls_lang=American_america.字符集,那么幫助就是英文的了。
參數:
1.1 導出用戶全部數據
exp 登錄名稱/用戶密碼@服務命名 FILE=文件存儲的路徑以及名稱 log=日志存儲的路徑以及名稱 FULL=Y(表示導出全部數據,如視圖、索引關聯關系等等全部的東西)
exp hlsoa/hlsoa@orcl file=E:\test\file log=E:\test\log full=y 這是導出本地數據庫
如果要是導出遠程數據庫需要修改tnsnames.ora 在連接字符串中將HOST改為遠程數據庫地址也可以直接通過服務器地址加服務命名解決
exp hlsoa/hlsoa@192.168.1.227/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/hlsoa@orcl 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/hlsoa@orcl 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/manager@服務命名 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/manager@服務命名 inctype=complete file=990702.dmp
--“增量型”增量導出(incremental),即備份上一次備份后改變的數據
exp system/manager@服務命名 inctype=incremental file=990702.dmp
--“累計型”增量導出(cumulative),即備份上一次“完全”導出之后改變的數據
exp system/manager@服務命名 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/oracle@orcldev 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/system@orcl directory=dmp_dir dumpfile=fulldb.dmp full=y version=10.2.0.1.0
expdp test/test@orcl directory=dmp_dir dumpfile=fulldb.dmp full=y (高版本數據庫向低版本數據庫)
3.3.2推薦 用戶導出模式
Windows
expdp system/system@orcl ^ 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/system@orcl \ 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/test@orcl directory=dmp_dir dumpfile=userdum.dmp schemas=hgmmo
expdp system/system@orcl directory=dmp_dir dumpfile=emr.dmp schemas=wsemr
——導出單個用戶數據(dumpfile指定dump文件名;schemas指定要被導出數據的用戶)
expdp test/test@orcl directory=dmp_dir dumpfile=userdum.dmp schemas=hgmmo,hgmqo
——導出多個用戶數據(用戶之間用逗號隔開)
3.3.3表導出模式
expdp system/orcl@orcl directory=dmp_dir dumpfile=tabledum.dmp tables=test.emp, test.dept
——導出test用戶的emp和dept兩個表
expdp system/orcl@orcl directory=dmp_dir dumpfile=tabledum.dmp tables=test.emp query='WHERE deptno=20'
——導出表中符合指定條件的數據,使用query條件的語句較長時采用parfile方式
3.3.4表空間導出模式
expdp system/orcl@orcl directory=dmp_dir dumpfile=dumptbs.dmp tablespaces=tbs1,tbs2
3.3.5可移動表空間導出模式(只導出表空間的元數據,不真正導出數據)
expdp system/orcl@orcl 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/test@orcl directory=dmp_dir dumpfile=fulldb.dmp full=y
4.2用戶模式導入
impdp test/test@orcl directory=dmp_dir dumpfile=userdum.dmp schemas=hgmmo
impdp test/test@orcl directory=dmp_dir dumpfile=userdum.dmp remap_schema=user1:user2
——remap_schema參數相當於imp工具中的fromuser和touser參數,可以實現將一個用戶的數據導入到另一個用戶中
4.3 表空間模式導入
impdp system/orcl@orcl 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/test@orcl directory=dmp_dir dumpfile=userdum.dmp schemas=hgmmo version =11.2.0.0.0
impdp test/test@orcl directory=dmp_dir dumpfile=userdum.dmp schemas=hgmmo version =11.2.0.0.0
有時候由於expdp/impdp導出的數據量太大,而會話不小心關閉了,如何查看expdp進度如何?或者想查看任務進度
首先在視圖中查找datapump的job_name。
在Oracle中 select * from dba_datapump_jobs;
然后再命令行中 expdp/impdp 用戶名/密碼 attach=iob_name 然后就會出現一堆Job信息
並自動進入到 expdp/impdp 命令模式下 此時如果想要停止任務,輸入 stop_job 就會詢問你是否停止。而想通過kill進程是殺不掉的。
對於exp/imp 如果想要停止就可以先殺父進程再殺子進程: ps -ef |grep imp 查詢到pid,kill -9 pid 、kill -9 ppid 即可。