按計劃瞭解資料泵expdp/impdp
昨天接觸了exp/imp,今天再來練練Oracle10g之後的新工具,資料泵
資料泵同原來的匯入匯出工具最大的不同,資料泵是伺服器端的工具
而原來的匯入匯出工具是客戶端的
另外,按照Oracle文件的說法
新的資料泵工具,支援許多Oracle10g新特性
(不支援XML schema或以XML schema為基礎的表)
而且,在傳輸效能和易用性上比原匯入匯出工具改進不少
像並行傳輸,中斷/繼續傳輸,跨網傳輸,過濾物件,空間消耗測算等……
資料泵工具有三個組成部分
命令列形式的客戶端,就是expdp和impdp
名為DBMS_DATAPUMP的PL/SQL包,作為資料泵的API
名為DBMS_METADA他的PL/SQL包,作為後設資料API
今天個人是練習命令列客戶端的使用
命令列的匯入匯出是通過DBMS_DATAPUMP包中的儲存過程來實現的
在資料泵任務中,Oracle會建立一個主程式(master process)
用來控制包括與客戶端通訊,建立並控制工作程式,跟蹤日誌等功能
還要建立主表,為匯出任務記錄資料庫物件和其位置,並最終寫到轉儲檔案
為匯入任務從轉儲檔案中讀取需要的資料庫物件,並控制操作順序
其它步驟就要看使用者如何來呼叫資料泵(是否轉換物件,監視任務)
因為資料泵是伺服器端的工具,在使用前可能還需要建立一個目錄物件
並賦予相應使用者對此目錄的Oracle可讀寫許可權(不能直接讀寫)
以便整個執行過程使用
使用資料泵前,將此目錄物件設定為DATA_PUMP_DIR引數值
(未指定,Oracle將會使用自動設定值)
可通過下面語句檢視當前資料庫該值情況
SELECT directory_name, directory_path FROM dba_directories
WHERE directory_name='DATA_PUMP_DIR';
練習開始,先建立一個directory物件,並給hr使用者賦讀寫許可權
create directory dumptest as '/home/oracle/dumptest';
grant read,write on directory dumptest to hr;
另外,因為用的是Oracle的hr示例schema
資料庫中已經自動建立好了一些必要的資料庫物件
來看看匯出,expdp
下面的命令是先測試匯出hr的所有物件所需空間
expdp hr/hr ESTIMATE_ONLY=y NOLOGFILE=y
在呼叫expdp時,下面命令預設匯出hr全部物件和資料
expdp hr/hr directory=dumptest
再做一個僅僅匯出後設資料(描述資料格式用,可以理解為物件的定義)的例子
操作目錄就是剛才建立的dumptest,檔名為hr.dmp
CONTENT引數為METADATA_ONLY就是指僅匯出後設資料
expdp hr/hr DIRECTORY=dumptest DUMPFILE=hr.dmp CONTENT=METADATA_ONLY
再來利用引數檔案,匯出某個表的部分資料
expdp hr/hr parfile='/home/oracle/pump.par'
引數檔案內容:
DUMPFILE=exp.dmp
TABLES=empb
QUERY=empb:"WHERE department_id > 10 AND salary > 10000" #匯出資料的條件
DIRECTORY=dumptest
LOGFILE=exp.log
接下來練習一下資料泵與原先的exp工具最大不同(個人認為)
因為資料庫是服務端的工具,它可以停止/繼續某個任務
這裡可以新增一個JOB_NAME引數來指定任務名稱,也可使用Oracle自動生成的
要進行停止任務操作,需要在資料泵出現starting提示後,按ctrl+c組合鍵
expdp hr/hr parfile='/home/oracle/pump.par'
引數檔案內容:
DUMPFILE=exp.dmp
TABLES=t_test
DIRECTORY=dumptest
LOGFILE=exp.log
看到starting後迅速中斷,進入Export>提示符
輸入status檢視當前任務狀態:
Job: SYS_EXPORT_TABLE_01
Operation: EXPORT
Mode: TABLE
State: EXECUTING
Bytes Processed: 0
Current Parallelism: 1
Job Error Count: 0
Dump File: /home/oracle/dumptest/exp.dmp
bytes written: 4,096
Worker 1 Status:
State: EXECUTING
在提示符下輸入stop_job,然後會詢問是否停止
[yes]/no:#這裡直接按回車就可以,expdp自動退出
要繼續之前的任務,執行expdp hr/hr attach=SYS_EXPORT_TABLE_01
得到提示
Job: SYS_EXPORT_TABLE_01
Owner: HR
Operation: EXPORT
Creator Privs: FALSE
GUID: 600900F7324CC476E040007F010033B4
Start Time: Friday, 09 January, 2009 15:54:18
Mode: TABLE
Instance: test
Max Parallelism: 1
EXPORT Job Parameters:
Parameter Name Parameter Value:
CLIENT_COMMAND hr/******** parfile=/home/oracle/pump.par
State: IDLING
Bytes Processed: 0
Current Parallelism: 1
Job Error Count: 0
Dump File: /home/oracle/dumptest/exp.dmp
bytes written: 4,096
Worker 1 Status:
State: UNDEFINED
然後在Export>提示符下,start_job
輸入status檢視任務狀態,State: EXECUTING,任務又開始了
過一會兒,再次檢視狀態,State: WORK WAITING,任務已結束並進入等待狀態
如果匯出過程中出現異常中斷,可能任務還殘留在資料庫中
可以通過DBA_DATAPUMP_JOBS或USER_DATAPUMP_JOBS檢視查詢
根據得到的表名刪除任務
drop table hr.SYS_EXPORT_SCHEMA_01 purge;
這裡的purge子句,是不將表放入Oracle回收站,徹底刪除
Oracle回收站還可以用PURGE recyclebin來清空
也可PURGE TABLE tablename來指定清空之前刪除並放入回收站的表
匯入impdp的練習,先刪除t_test表內全部資料,再用dmp檔案匯入
impdp hr/hr parfile=/home/oracle/pump.par
引數檔案內容:
DUMPFILE=exp.dmp
TABLES=t_test
DIRECTORY=dumptest
JOB_NAME=impdp01
TABLE_EXISTS_ACTION=APPEND
LOGFILE=exp2.log
開始後,中斷,進入Import>提示符
status檢視狀態
Job: IMPDP01
Operation: IMPORT
Mode: TABLE
State: EXECUTING
Bytes Processed: 0
Current Parallelism: 1
Job Error Count: 0
Dump File: /home/oracle/dumptest/exp.dmp
Worker 1 Status:
State: EXECUTING
Object Schema: HR
Object Name: T_TEST
Object Type: TABLE_EXPORT/TABLE/TABLE_DATA
Completed Objects: 1
Completed Bytes: 138,009,296
Percent Done: 100
Worker Parallelism: 1
Import> stop_job
Are you sure you wish to stop this job ([yes]/no):
中斷後,執行impdp hr/hr attach=impdp01
Job: IMPDP01
Owner: HR
Operation: IMPORT
Creator Privs: FALSE
GUID: 60095FC1D1FD9DB0E040007F010036E6
Start Time: Friday, 09 January, 2009 16:19:28
Mode: TABLE
Instance: test
Max Parallelism: 1
EXPORT Job Parameters:
CLIENT_COMMAND hr/******** parfile=/home/oracle/pump.par
IMPORT Job Parameters:
Parameter Name Parameter Value:
CLIENT_COMMAND hr/******** parfile=/home/oracle/pump.par
TABLE_EXISTS_ACTION APPEND
State: IDLING
Bytes Processed: 0
Current Parallelism: 1
Job Error Count: 0
Dump File: /home/oracle/dumptest/exp.dmp
Worker 1 Status:
State: UNDEFINED
Object Schema: HR
Object Name: T_TEST
Object Type: TABLE_EXPORT/TABLE/TABLE_DATA
Completed Objects: 1
Completed Bytes: 138,009,296
Percent Done: 100
Worker Parallelism: 1
執行start_job(continue_client也可以),任務繼續執行直至完畢
因為開始只刪除了資料,保留了t_test表,所以匯入過程有錯誤
ORA-39152: Table "HR"."T_TEST" exists.
Data will be appended to existing table
but all dependent metadata will be skipped
due to table_exists_action of append
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
但資料已經匯入完畢
簡單練習就到此為止
還有許多高階應用等需要的時候再做練習
昨天和今天,簡單接觸了Oracle的邏輯備份恢復
從明天開始,計劃開始更多的接觸RMAN ^_^
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/556359/viewspace-534837/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料泵基礎(impdp/expdp)
- expdp impdp Data Pump(資料泵)使用解析
- EXPDP 和 IMPDP 資料泵的使用_1
- EXPDP 和 IMPDP 資料泵的使用_2
- Oracle資料泵匯出匯入(expdp/impdp)Oracle
- 使用資料泵(expdp、impdp)遷移資料庫流程資料庫
- Oracle使用資料泵 (expdp/impdp)實施遷移Oracle
- 資料庫泵(expdp/impdp)匯入匯出流程資料庫
- 10g 資料泵(Data Dump) -- EXPDP & IMPDP [zt]
- 使用impdp,expdp資料泵進入海量資料遷移
- Oracle使用資料泵expdp,impdp進行資料匯出匯入Oracle
- 資料泵datapump(expdp/impdp)的parfile用法,避免跳脫字元字元
- oracle10g expdp資料泵的bug,按schema匯出,匯入impdp時無jobOracle
- 【Datapump】Oracle資料泵遷移資料命令參考(expdp/impdp說明)Oracle
- 資料泵 impdp 操作
- 資料泵(expdp,impdp)高版本匯入低版本操作例項
- Impdp資料泵匯入
- 10G資料泵載入命令expdp/impdp的引數說明
- 【impdp】資料泵impdp工具選項詳解及應用示例
- 【impdp】IMPDP中的TRANSFORM引數--【資料泵】EXPDP匯出表結構(真實案例)後傳ORM
- Expdp Impdp詳解
- 使用資料泵impdp匯入資料
- oracle資料庫的impdp,expdpOracle資料庫
- EXPDP資料泵使用方法
- Linux下執行資料泵expdp和impdp命令,字元轉義案例兩則Linux字元
- expdp/impdp 用法詳解
- ORACLE expdp/impdp詳解Oracle
- expdp/impdp用法詳解
- Oracle12c中資料泵新特性之功能增強(expdp, impdp)Oracle
- 使用expdp、impdp遷移資料庫資料庫
- oracle資料泵備份(Expdp命令)Oracle
- expdp impdp 資料庫匯入匯出命令詳解資料庫
- 使用資料泵工具expdp工具匯出資料
- 【expdp】10g資料泵expdp工具選項詳解及應用示例
- 資料泵IMPDP 匯入工具的使用
- [zt] expdp / impdp 用法詳解
- Oracle expdp資料泵遠端匯出Oracle
- 資料泵 EXPDP 匯出工具的使用