Oracle 10G的Data Pump (Part I)
作者: Fenng
出處: Http://www.DBAnotes.net
Oracle 10G的Data Pump技術能夠在不同數據庫間高速的移動數據庫和元數據. 這個技術的基礎是兩個數據移動工
具:Data Pump EXPort和Data Pump Import.
Oracle的Data Pump是通過一個PL/SQL包來實現的:DBMS_DataPump(也叫Data Pump API).Data Pump使用
直接路徑裝載和外部表機制進行數據的移動. Data Pump使用DBMS_METADATA PL/Sql包進行包括ETL過程在內的
所有的數據庫對象操作.
Data Pump 是Oracle一些其它要害特性(如基于流的復制、邏輯Standby等)的基礎。
Data Pump特性是集成到Oracle數據庫10G中的,但是標準版本10G并行度只有1.
要害概念
Master Table
Master Table(MT)是Data Pump技術的核心.Master Table 用來保存整個過程中的細節信息(也可以說是一些
元數據信息).有了MT,導出或者導入的重啟動才變為可能.這些細節信息包括:
產生Job狀態的報告 重新啟動Job 定位在Dump文件中的所有的對象.
主表在進行當前導出或者導入的操作的用戶模式中被創建.該用戶必須要有足夠空間. 主表的名字和創建它的Job名字相
同.這也就是說,你不能顯式的指定一個和現有的表或者視圖重名的Data Pump Job.
導出的時候,主表被創建,并在完成的時候寫到Dump文件中.在啟動導入的時候,主表從Dump文件集中載入到數據庫中,
并用來控制操作的順序.主表也可以用一些參數來進行初始化操作.要注重的是主表不能跨文件存儲.所以,指定的Dump
文件的大小至少要能夠容納得下MT.
主表依如下情況或被保留或者刪除:
Job成功完成,MT被刪除. 假如Job是使用STOP_JOB交互命令停掉的,MT將被保留以用來重啟動Job. 假如Job是使用KILL_JOB交互命令Kill掉的,MT將被刪除,并且Job不能重新啟動. 假如Job意外中止,MT總是被保留.
Master PRocess 主進程
每一個導出或者導入的Job都會產生一個主進程. 主進程控制整個Job,包括和客戶端通信,創建并控制worker 進程,
并進行日志操作.
Worker Process
Worker Process 是并行化進行實際的卸載與裝載元數據和表數據的進程.進程的數量和PARALLEL指定的數值相等
.在整個Job過程中,該數量可以進行調整.我們在前面已經提及,標準版下并行度為1.
網絡導出和導入
當你通過網絡運行Import操作,源是另一個系統,不是一個Dump的文件集.
基于服務器的處理方式
和原來的Export/Import方式不同的是,Data Pump的導出和導入基本是在服務器.這意味著:
因為文件的讀和寫大部分都是在服務器端,所以路徑的規范和數據庫目錄對象的解析都是針對服務器而不是客戶
端 因為對文件的訪問是在操作系統模式下,可能會存在數據安全問題. 假如使用默認的目錄信息,可能會產生文件沖突問題.
Dump、Log和SQL文件的默認位置
Dump、Log和SQL文件的默認位置基于服務器的。在你運行Data Pump Export或者Data Pump Import的時候 ,
必須由DBA或者是有 CREATE ANY DirectorY 權限的用戶創建一個目錄對象.在該對象創建之后,你需要對其他用戶
授權 READ/WRITE對象操作權限.
GRANT READ ON DIRECTORY data_pump_dir TO foo;
注重該目錄只有在數據庫服務器具有讀取權限的時候才可以.
Data Pump根據如下的順序決定文件的位置:
1. 對該文件指定的目錄對象;
2. 假如對一個文件沒有指定目錄對象,那么將默認使用初始化參數中的DIRECTORY指定的對象.
特權用戶和非特權用戶
Data Pump識別兩類的用戶:特權(Privileged)用戶和非特權(Nonprivileged)的用戶.
Privileged用戶具有EXP_FULL_DATABASE 和IMP_FULL_DATABASE權限. 非特權用戶不具備這些權限.
特權用戶可以作如下工作:
導出導入其他用戶擁有的數據庫對象. 導出導入非基于模式的對象(比如表空間和模式定義等內容). 對其他用戶啟動的Job進行一些操作.
Data Pump如何訪問數據?
直接路徑(Direct Path ,DP)和外部表(External Tables ,ET).ET模式下使用ORACLE_DATAPUMP驅動并使用直接
路徑API內部數據流格式.Oracle稱Data Pump會自動選擇最快的方法.
文件分配
Data Pump Job治理三種類型的文件:
Dump文件 Log文件 記錄一個操作的相關信息 SQL文件 記錄一個SQL_FILE操作輸出的記錄
指定文件和額外的附件文件
對于導出操作,你可以指定 Dump文件,隨著操作的進行你發現文件空間有些不夠,你可以使用交互模式下的 ADD_FILE
命令添加額外的文件.對于導入的操作.所有的dump文件必須在Job定義的時候指定. Log文件和SQL文件將覆蓋存在的
文件.Dump文件從不覆蓋已經存在的文件.
設定并行度
對于導出和導入 ,并行度的設定(通過 PARALLEL 參數指定)應該低于或者等于Dump文件的個數.假如文件個數不足,性
能可能會降低(多線程同時訪問一個Dump文件).前面已經提及,標準版本10G并行度只有1,所以,這個參數實際上對企業
版的10G才是有效的.
使用替代變量
在導出和導入操作中,可以使用%U替代變量來匹配文件名字,這樣在一定情況下便捷了許多.
Data Pump中的Export和Import的新的特性
相對于舊有的exp/imp,Data Pump中的Export和Import有很多新的特性,包括:
1 Data Pump Job執行到一半的時候指定最大線程數的能力.
2 Data Pump job是完全能重新啟動的.
3 從長時間運行的Job分離或者是重新附加上去而不會對Job本身有影響.
4 支持通過網絡的導出導入操作.
5 Remap_datafile.
6 支持完美粒度對象選擇.
7 支持對Job的交互命令行模式監控和交互.
8 對待導入的對象的空間評估.
9 具備指定數據庫版本對象移動能力.
未完待續
附MT結構描述
SQL> desc SYS_EXPORT_SCHEMA_01
名稱 是否為空? 類型
----------------------------------------- -------- -------------------
PROCESS_ORDER NUMBER
DUPLICATE NUMBER
DUMP_FILEID NUMBER
DUMP_POSITION NUMBER
DUMP_LENGTH NUMBER
DUMP_ALLOCATION NUMBER
COMPLETED_ROWS NUMBER
ERROR_COUNT NUMBER
ELAPSED_TIME NUMBER
OBJECT_TYPE_PATH VARCHAR2(200)
OBJECT_PATH_SEQNO NUMBER
OBJECT_TYPE VARCHAR2(30)
IN_PROGRESS CHAR(1)
OBJECT_NAME VARCHAR2(500)
OBJECT_SCHEMA VARCHAR2(30)
PARTITION_NAME VARCHAR2(30)
FLAGS NUMBER
COMPLETION_TIME DATE
OBJECT_TABLESPACE VARCHAR2(30)
SIZE_ESTIMATE NUMBER
OBJECT_ROW NUMBER
PROCESSING_STATE CHAR(1)
PROCESSING_STATUS CHAR(1)
BASE_OBJECT_TYPE VARCHAR2(30)
BASE_OBJECT_NAME VARCHAR2(30)
BASE_OBJECT_SCHEMA VARCHAR2(30)
PARALLELIZATION NUMBER
UNLOAD_METHOD NUMBER
GRANULES NUMBER
SCN NUMBER
DOMAIN_INDEX VARCHAR2(30)
DOMAIN_INDEX_SCHEMA VARCHAR2(30)
GRANTOR VARCHAR2(30)
NAME VARCHAR2(30)
VALUE_T VARCHAR2(4000)
VALUE_N NUMBER
IS_DEFAULT NUMBER
FILE_TYPE NUMBER
USER_DIRECTORY VARCHAR2(4000)
USER_FILE_NAME VARCHAR2(4000)
FILE_NAME VARCHAR2(4000)
EXTEND_SIZE NUMBER
FILE_MAX_SIZE NUMBER
EXTEND_ACTIVE NUMBER
OVERFLOW_TO NUMBER
PROCESS_NAME VARCHAR2(30)
LAST_UPDATE DATE
WORK_ITEM VARCHAR2(30)
NON_TRANSACTIONAL CHAR(1)
OBJECT_NUMBER NUMBER
COMPLETED_BYTES NUMBER
TOTAL_BYTES NUMBER
METADATA_IO NUMBER
DATA_IO NUMBER
CUMULATIVE_TIME NUMBER
OLD_VALUE VARCHAR2(4000)
SEED NUMBER
LAST_FILE NUMBER
USER_NAME VARCHAR2(30)
OperaTION VARCHAR2(30)
JOB_MODE VARCHAR2(30)
VERSION NUMBER
DB_VERSION VARCHAR2(30)
STATE VARCHAR2(30)
PHASE NUMBER
GUID RAW(16)
START_TIME DATE
BLOCK_SIZE NUMBER
METADATA_BUFFER_SIZE NUMBER
DATA_BUFFER_SIZE NUMBER
DEGREE NUMBER
LANGUAGE VARCHAR2(30)
PLATFORM VARCHAR2(100)
ABORT_STEP NUMBER
INSTANCE VARCHAR2(16)
參考文檔
1.Oracle10i Database Utilities
2.Data Pump in Oracle Database 10g From OTN
原文出處:
<a >http://www.dbanotes.net/Oracle/10G-Data-Pump-PartI.htm</a>