DBMS_DATAPUMP API 定義
DBMS_DATAPUMP包括以下子存儲過程:
ADD_FILE :
將dmp文件添加到導出,導入或SQL_FILE操作的dmp文件集中。除了dmp文件之外,還可以使用此過程提供的FILETYPE參數添加其他類型的文件。
語法以及參數如下:
DBMS_DATAPUMP.ADD_FILE (
handle IN NUMBER, --句柄,當前會話必須先通過調用open 或者attach 函數添加句柄
filename IN VARCHAR2,--文件名,文件名不用使用路徑。只需要文件名即可,這個地方有點奇怪,說有%t,%m 卻只能使用%u
directory IN VARCHAR2,--存放dmp的文件目錄,必須指定
filesize IN VARCHAR2 DEFAULT NULL,--指定dmp 文件大小,超過此文件大小,這個job 會失敗,但是可以重新開始。對於導入,這個參數會被忽略。
filetype IN NUMBER DEFAULT DBMS_DATAPUMP.KU$_FILE_TYPE_DUMP_FILE, --指定文件類型,KU$_FILE_TYPE_DUMP_FILE(dmp file),KU$_FILE_TYPE_LOG_FILE (日誌文件),KU$_FILE_TYPE_SQL_FILE (導出sql文件)
reusefile IN NUMBER DEFAULT NULL --0:如果dmp 存在會失敗,1:會覆蓋。默認為不覆蓋,此參數只針對導出有效,應該設置為not null,
);
/*
可能捕獲的錯誤:
INVALID_HANDLE. 指定的句柄未添加到導入,導出作業中
INVALID_ARGVAL. 存在無效的參數
INVALID_STATE. job正在完成,或者作業已超過導入或SQL_FILE作業的定義狀態,或者已超過LOG和SQL文件的定義狀態。
INVALID_OPERATION. 無效的操作,為通過impdp 通過dblink 遠程導入或者estimate_only指定了dmp 文件。
SUCCESS_WITH_INFO. 改存儲過程已經完成,但是可以通過dbms_datapump.get_status 獲得更多信息。
NO_SUCH_JOB. 指定的job不存在
使用注意事項:
1,使用本存儲過程,將文件添加到數據泵作業。可以向作業添加三種類型的文件:dmp文件以包含正在移動的數據,log文件以記錄與操作關聯的消息,
以及SQL文件以記錄SQL_FILE操作的輸出。 日誌和SQL文件將覆蓋以前存在的文件。轉儲文件永遠不會覆蓋以前存在的文件。 相反,將生成錯誤。
2,對於導入,以及轉儲SQL FILE必須在一開始就指定全部導入文件。而對於導出,則可以在導出的任何時間通過本API添加文件。如果添加的dmp文件已經存在,
除非指定reusefile=1 ,否則將報錯。
3,對於導出操作,並行參數必須小於等於dmp 文件個數。否則並行參數最大無法達到通過 SET_PARALLEL 存儲過程指定的並行數。
4,對於導入操作,並行也應小於等於dmp 文件數,如果沒有足夠的dmp 文件,也無法通過多線程訪問文件達到最佳性能。
5,如果存在%u變數,則可以通過單次調用add_file指定多個dmp文件,對於導出操作,將根據需要創建導出文件,以使得讓 SET_PARALLEL 指定的所有線程
處於活躍狀態。如果一個文件填滿,將生成一個新的dmp代替。如果指定了多個%u add_file 將循環生成文件。比如在一個6並行度的job中指定了expa%U,
expb%U,expc%U,則創建的文件如下例如expa01,expb01,expc01,expa02,expb02和expc02。expa01,expb01,expc01,expa02,expb02和expc02。
6,如果dmp文件指定如:expa%U,expb%U和expc%U,則通過嘗試打開dmp文件expa01,expb01和expc01開始導入或SQL_FILE操作。如果包含主表的dmp文件
是在此集合中找不到,該操作將通過遞增替換變數並查找新文件名(例如,expa02,expb02和expc02)來擴展其對轉儲文件的搜索。
DataPump API將繼續擴展搜索,直到找到包含主表的轉儲文件。如果DataPump API確定轉儲文件不存在或者在任何迭代中不是當前dmp的一部分,
則DataPump API將停止為出錯的dmp文件規範遞增替換變數。 找到主表後,將使用主表來確定何時找到轉儲文件集中的所有轉儲文件。
*/
ATTACH :
此函數用於訪問已創建datapump job
DBMS_DATAPUMP.ATTACH(
job_name IN VARCHAR2 DEFAULT NULL, --job 名稱,默認為job_onwer 用戶的下的job,假設該用戶下只有一個作業。
job_owner IN VARCHAR2 DEFAULT NULL
/*啟動job 的用戶名,如果該值為空,則默認為當前會話的用戶。要指定其他用戶的名,則必須擁有 DATAPUMP_EXP_FULL_DATABASE (導出)
或者 DATAPUMP_IMP_FULL_DATABASE(導入)角色許可權,擁有該許可權,可以使你監視其他用戶的job,但是無法重啟其他用戶的job。
*/
)
RETURN NUMBER;
-- 返回的值為job 的轉換句柄,此句柄值可以用作以下存儲過程:ADD_FILE, DATA_FILTER, DETACH, GET_STATUS, LOG_ENTRY, METADATA_FILTER,
-- METADATA_REMAP, METADATA_TRANSFORM, SET_PARALLEL, SET_PARAMETER,START_JOB, STOP_JOB, and WAIT_FOR_JOB.
/*
可能捕獲的錯誤:
INVALID_ARGVAL. 無效的參數
OBJECT_NOT_FOUND. 指定的job不再存在,或者指定的job 屬於其他用戶,同時自己沒有DATAPUMP_EXP_FULL_DATABASE 或者DATAPUMP_IMP_FULL_DATABASE 角色
SUCCESS_WITH_INFO. 執行成功,但是使用 GET_STATUS 存儲過程可以獲得更多信息.
NO_SUCH_JOB. 指定的job 不存在.
使用注意事項:
1,如果job處於「已停止」狀態,則job將進入「空閑」狀態。一旦ATTACH成功,就可以監控作業的進度或控制作業.
通過GET_STATUS過程返回的KU$_STATUS_WIP 和KU$_STATUS_JOB_ERROR 消息流將從客戶端的大致時間開始返回到新連接的作業。
在連接到job的客戶端之前,不會重複處理狀態和錯誤消息。
2,如果要對作業執行第二次附加,則必須從其他會話執行此操作。
3,如果ATTACH失敗,請在後續GET_STATUS調用中使用空句柄,以獲取有關失敗的更多信息。
*/
DATA_FILTER :
此存儲過程指定對導出數據的限制。
DBMS_DATAPUMP.DATA_FILTER (
handle IN NUMBER, --由open 函數返回的句柄。
name IN VARCHAR2, --過濾操作名
value IN NUMBER, --過濾值
table_name IN VARCHAR2 DEFAULT NULL, --指定此過濾操作需要應用到表的表名,如果沒有指定,則對所有表執行操作。
schema_name IN VARCHAR2 DEFAULT NULL);--指定此過濾操作需要作用到的用戶名,則對所有用戶執行,如果指定了用戶,必須指定表。
DBMS_DATAPUMP.DATA_FILTER(
handle IN NUMBER,
name IN VARCHAR2,
value IN VARCHAR2,
table_name IN VARCHAR2 DEFAULT NULL,
schema_name IN VARCHAR2 DEFAULT NULL);
DBMS_DATAPUMP.DATA_FILTER(
handle IN NUMBER,
name IN VARCHAR2,
value IN CLOB,
table_name IN VARCHAR2 DEFAULT NULL,
schema_name IN VARCHAR2 DEFAULT NULL);
/*
可能捕獲的錯誤:
INVALID_ARGVAL. 有以下幾種原因可能導致此錯誤:
錯誤的過濾名稱
使用了 TRANSPORTABLE 模式,該模式不支持過濾操作。
指定的表不存在
已在指定用戶表上使用了filter操作。
INVALID_STATE. 在job 不處於defining 狀態的時候調用 DATA_FILTER
INCONSISTENT_ARGS. 有值未提供,或者類型錯誤,或者提供了用戶名,但是未提供表名
PRIVILEGE_ERROR. 提供了用戶名, 但是該用戶不具備 DATAPUMP_EXP_FULL_DATABASE 或者 DATAPUMP_IMP_FULL_DATABASE 角色(??).
SUCCESS_WITH_INFO. 存儲過程調用成功,但是可以通過 GET_STATUS 獲得更多信息.
NO_SUCH_JOB. 指定的job不存在.
使用注意事項:
1,每個數據過濾只能在每個表,或者job中出現一次。如果不同的過濾使用相同的名字作用在同一個表上,則指定了特定表的過濾則優先作用在表上。
除INCLUDE_ROWS過濾外,在具有嵌套表或域索引的表上不支持數據過濾器。 在可傳輸表空間模式下執行的job不支持數據過濾器。
支持的數據過濾器如下:
INCLUDE_ROWS (number) :如果是非0,則表示job中應包含指定表的用戶數據,默認為1.
PARTITION_EXPR/PARTITION_LIST (text):對於導出,這些過濾器指定從資料庫導出哪些分區。對於導入,它們指定將哪些表分區載入到資料庫中。
如果job滿足指定的表達式(對於PARTITION_EXPR)或包含在列表中(對於PARTITION_LIST),則分區名稱包含在作業中。
雖然過濾器的表達式版本提供了更大的靈活性,但列表版本提供了對分區名稱的完全驗證。僅當分區名稱包含特殊字元時,才需要在分區名稱周圍使用雙引號。
使用dblink的job不支持PARTITION_EXPR。
默認為 ALL 處理全部分區。
SAMPLE(NUMBER):對於導出,指定導出百分比,可以用來對大表導出部分數據,以用來做測試。
SUBQUERY(TEXT):指定添加到表的SELECT語句末尾的子查詢。 如果在子查詢中指定WHERE子句,則可以限制所選的行。 指定ORDER BY子句對導出中dmp的行進行排序,
從而在從堆組織表遷移到索引組織表時提高性能。
*/
DATA_REMAP :
此過程指定在從資料庫導出或導入到資料庫時應用於列數據的轉換。
DBMS_DATAPUMP.DATA_REMAP(
handle IN NUMBER, --通過 open 函數調用返回的job 的句柄
name IN VARCHAR2, --remap 的名稱
table_name IN VARCHAR2, --指定要重新映射的表
column IN VARCHAR2, --指定要重新映射的列名
remap_function IN VARCHAR2,
/*remap_function 的格式為:[schema.]package.function 其含義取決於 name 的值。name參數引用PL/SQL包函數,調用該函數來修改指定列的數據。 該函數接受單個參數,
該參數與重新映射列具有相同的數據類型,並返回與重新映射列具有相同數據類型的值。 請注意,用戶的默認值是執行導出的用戶。
*/
schema IN VARCHAR2 DEFAULT NULL --指定要重映射的所有表/列所屬的schema,如果為null ,則重映射將應用到指定的所有表。
);
/*
可能捕獲的錯誤:
INVALID_ARGVAL. 使用 transportable 模式 或者 指定的表不存在 或者指定了無效的name.
INVALID_OPERATION. Data remaps 只支持導入導出操作.
INVALID_STATE. 在job 啟動後調用 DATA_REMAP 存儲過程.
NO_SUCH_JOB. job 不存在.
使用注意事項:
1,DATA_REMAP過程僅支持導出和導入操作。 它允許您操作導出或導入的用戶數據。 重映射的名稱決定了要執行的重映射操作。
2,對於導出操作,您可能希望定義數據重映射以隱藏敏感數據(如dmp文件中的信用卡號),但保留其餘數據以便可以讀取。 為實現此目的,
重新映射應將每個唯一的源編號轉換為不同的生成編號。 為了使映射在轉儲文件集中保持一致,應該為包含信用卡號的每個列調用相同的函數。對於導入操作,
您可能希望定義數據重映射,以便在將數據合併到包含衝突主鍵的現有表時重置主鍵。 應為定義或引用主鍵的所有列提供單個重映射功能,以確保保重映射是一致的。
3,執行此操作時,並行參數應該設置為1,並且不應該執行重啟操作。
*/
DETACH :
此存儲過程表示對指定的job 不再使用。
DBMS_DATAPUMP.DETACH(
handle IN NUMBER --job 句柄。
);
/*
可能出現的錯誤:
INVALID_HANDLE. 指定的句柄未連接到datapump
SUCCESS_WITH_INFO. 存儲過程執行完成,但是可以通過 GET_STATUS 存儲過程獲得更多信息.
NO_SUCH_JOB. 指定的job不存在.
使用注意事項:
通過此調用,可以指定對使用句柄分離。 在完成所有用戶與作業的分離之前,無法回收與已完成作業關聯的資源。
退出或中止用戶的會話時,將執行與句柄的隱式分離。 在與應用於句柄引用的作業的STOP_JOB關聯的超時到期時,還會執行與句柄的隱式分離。
重新啟動實例時,將釋放所有先前分配的DBMS_DATAPUMP句柄。
*/
GET_DUMPFILE_INFO :
此存儲過程返回有關dump文件的信息
DBMS_DATAPUMP.GET_DUMPFILE_INFO(
filename IN VARCHAR2, --文件名
directory IN VARCHAR2, --文件目錄
info_table OUT ku$_dumpfile_info, --存儲了dmp文件信息的PL/SQL表
filetype OUT NUMBER --文件類型
);
/*
可能捕獲的報錯:
NO_DUMPFILE_INFO:無法獲得指定文件的信息。
使用注意事項:
此工具無需job 運行。
1,可以使用GET_DUMPFILE_INFO過程來請求有關特定文件的信息。 如果文件未被識別為任何類型的轉儲文件,則返迴文件類型0(零)並且dmp文件info_table保持為空。
declare
cc ku$_dumpfile_info;
dd number;
begin
dbms_datapump.get_dumpfile_info("test1_01.dmp","DATADUMP",cc,dd) ;
dbms_output.put_line(dd);
--dbms_output.put_line(ku$_dumpfile_info);
end;
/
*/
GET_STATUS :
此存儲過程返回job 的狀態信息。
DBMS_DATAPUMP.GET_STATUS(
handle IN NUMBER, --句柄
mask IN BINARY_INTEGER, --標誌位,以代表以下狀態:KU$_STATUS_WIP,KU$_STATUS_JOB_DESC,KU$_STATUS_JOB_STATUS,KU$_STATUS_JOB_ERROR
timeout IN NUMBER DEFAULT NULL,
/*表示最大等待返回消息秒數,0表示立即返回,-1表示不限制等待時間. 如果請求KU_$_STATUS_WIP或KU_$_STATUS_JOB_ERROR信息
並在超時期間變為可用,則該過程在超時期限結束之前返回*/
job_state OUT VARCHAR2, --當前job的狀態,如果只需要當前的狀態,則比返回ku$_Status高效的多。
status OUT ku$_Status --將返回一個ku$_status
);
/*
這部分內容實在是比較複雜。也不說先,坑爹啊。
*/
LOG_ENTRY :
此存儲過程插入信息到日誌中。
DBMS_DATAPUMP.LOG_ENTRY(
handle IN NUMBER, --句柄
message IN VARCHAR2 --插入日誌信息
log_file_only IN NUMBER DEFAULT 0 --指定該消息是否只能寫入到日誌。否則還會被GET_STATUS 捕獲。
);
/*
使用注意事項:
1,log_file_only 默認為0,也就意味著通過此消息插入的信息會被廣播到調用get_status的用戶中。
2,LOG_ENTRY過程允許應用程序定製日誌流以匹配應用程序提供的抽象。 例如,命令行界面支持用戶定義的INCLUDE和EXCLUDE參數。
將這些值標識為對基礎METADATA_FILTER過程的調用會使用戶感到困惑。 因此,命令行界面可以在日誌中輸入文本,描述INCLUDE和EXCLUDE參數的設置。
3,從LOG_ENTRY在日誌流中輸入的行以字元串「;;;」作為前綴
*/
METADATA_FILTER :
此存儲過程過濾在此job中,哪些數據是你需要的。
DBMS_DATAPUMP.METADATA_FILTER(
handle IN NUMBER,通過open函數返回的句柄。
name IN VARCHAR2,過濾器的名稱
/*
NAME_EXPR/NAME_LIST (name objects):定義作業中包含的對象名稱。可以使用對象類型參數將過濾器限制為特定對象類型。對於表模式,標識要處理的表。
SCHEMA_EXPR/SCHEMA_LIST (schema objects):將作業限制為表達式滿足其用戶的對象。對於表模式,只有SCHEMA_EXPR 支持,如果指定,則只有單個用戶支持(例如, "IN (""SCOTT"")")
TABLESPACE_EXPR/TABLESPACE_LIST (TABLE, CLUSTER, INDEX, ROLLBACK_SEGMENT):將作業限制為存儲在表空間中的對象,該表空間的名稱由表達式滿足。
INCLUDE_PATH_EXPR/INCLUDE_PATH_LIST/EXCLUDE_PATH_EXPR/EXCLUDE_PATH_LIST(ALL):定義作業中包含或排除的對象路徑。 您可以使用這些過濾器從資料庫或
轉儲文件集中僅選擇某些對象類型。 滿足條件的路徑的對象包括(INCLUDE_PATH_ *)或從操作中排除(EXCLUDE_PATH_ *)。 這些過濾器不支持object_path參數。
EXCLUDE_TABLES(TABLE_EXPORT) :指定不導出的表。
VIEWS_AS_TABLES(TABLE_EXPORT):可將以逗號分隔的視圖以表的形式導出為表。
*/
value IN VARCHAR2,過濾值
object_path IN VARCHAR2 DEFAULT NULL
/*
過濾器應用的對象路徑。 如果使用默認值,則過濾器適用於所有適用的對象。 每種模式支持的對象路徑列表包含在DATABASE_EXPORT_OBJECTS,
SCHEMA_EXPORT_OBJECTS和TABLE_EXPORT_OBJECTS的目錄視圖中。(請注意,TABLE_EXPORT_OBJECTS視圖適用於表和表空間模式,因為它們的對象路徑相同)。
*/
);
DBMS_DATAPUMP.METADATA_FILTER(
handle IN NUMBER,
name IN VARCHAR2,
value IN CLOB,
object_path IN VARCHAR2 DEFAULT NULL);
/*
使用注意事項:
1,支持每個過濾器的兩個版本:SQL表達式和List。 過濾器的SQL表達式版本為標識對象提供了最大的靈活性(例如,使用LIKE來支持使用通配符)。表達式過濾器的名稱如下:
NAME_EXPR/SCHEMA_EXPR/TABLESPACE_EXPR/INCLUDE_PATH_EXPR/EXCLUDE_PATH_EXPR
過濾器的列表版本允許最大程度地驗證過濾器。 如果在源資料庫中找不到過濾器中的某個元素(對於導出和基於網路的作業),或者在轉儲文件中找不到(對於基於文件的Import和SQLFILE作業),
則會報告錯誤。 列表過濾器的名稱如下:NAME_LIST/SCHEMA_LIST/TABLESPACE_LIST/INCLUDE_PATH_LIST/EXCLUDE_PATH_LIST。
2,可以多次指定過濾器。
*/
METADATA_REMAP :
此存儲過程用來指定job中的重映射。
DBMS_DATAPUMP.METADATA_REMAP (
handle IN NUMBER, --句柄
name IN VARCHAR2,--remap 的名字。
/*
REMAP_SCHEMA(Schema objects):作業中與 object_type 參數匹配且位於old_value中的任何schema對象都將轉換為新的schema對象。特權用戶可以執行不受限制的
schema重映射。非特權用戶只有在其schema是重映射的目標schema時才能執行schema重映射。例如,SCOTT可以將BLAKE的對象重新映射到SCOTT,但是SCOTT無法將SCOTT的對象重新映射到BLAKE。
REMAP_TABLESPACE(TABLE, INDEX, ROLLBACK_SEGMENT, MATERIALIZED_VIEW, MATERIALIZED_VIEW_LOG,TABLE_SPACE):所有指定表空間下的對象類型都會重映射
REMAP_DATAFILE(LIBRARY, TABLESPACE, DIRECTORY):如果old_value和value都是完整文件名,則將重新定義作業中與object_type參數匹配的任何數據文件引用以及
引用old_value數據文件的任何數據文件引用以使用新的數據文件。如果old_value和value都是目錄路徑,則其對象路徑與old_value匹配的任何數據文件引用將使其路徑替換為新值。
REMAP_TABLE(TABLE):任何匹配old_value 的表名都會替換為新value 值,old_value 參數可以指定為分區,這允許用戶講分區錶轉換為非分區表。
*/
old_value IN VARCHAR2, --指定需要重新映射的舊值
value IN VARCHAR2, --指定需要映射為的值
object_type IN VARCHAR2 DEFAULT NULL
/*
指定重映射的對象類型,DATABASE_EXPORT_OBJECTS, SCHEMA_EXPORT_OBJECTS, TABLE_EXPORT_OBJECTS, 以及 TABLESPACE_EXPORT_OBJECTS 。默認情況下,
重映射適用於job中的所有適用對象。 object_type參數允許調用者為作業中的不同對象類型指定不同的參數。 顯式指定對象類型的重映射會覆蓋適用於所有對象類型的重映射。
*/
);
/*
可能捕獲的報錯:
INVALID_ARGVAL :可能由於以下原因引起:job 模式和指定模式不匹配,已經被指定過。
INVALID_OPERATION :數據重映射只支持SQL_FILE和導入操作,導出不支持。
INCONSISTENT_ARGS :沒有提供被映射值。即 value
PRIVILEGE_ERROR :許可權不足,無法執行重映射。
使用注意事項:
DataPump API的轉換是DBMS_METADATA.SET_TRANSFORM_PARAMETER API實現的重映射的子集。 可以為單個作業定義多個重映射。
但是根據其參數,定義的每個重映射必須是唯一的。 也就是說,兩個重映射不能指定衝突或冗餘重映射。
*/
METADATA_TRANSFORM
此過程指定在指定作業中處理對象時應用於對象的轉換。
DBMS_DATAPUMP.METADATA_TRANSFORM (
handle IN NUMBER, --句柄
name IN VARCHAR2, --轉換名稱
value IN VARCHAR2, --轉換參數的值
object_type IN VARCHAR2 DEFAULT NULL --對象類型
);
DBMS_DATAPUMP.METADATA_TRANSFORM (
handle IN NUMBER,
name IN VARCHAR2,
value IN NUMBER,
object_type IN VARCHAR2 DEFAULT NULL);
/*
這個東西作用很大,但是暫時不討論。
*/
OPEN
此函數用於使用Data Pump API聲明新作業。 返回的句柄用作調用所有其他過程的參數(但不用於ATTACH函數)。
DBMS_DATAPUMP.OPEN (
operation IN VARCHAR2, --操作類型,包括EXPORT,IMPORT,SQL_FILE
job_mode IN VARCHAR2, --作業模式
/*
FULL :除Oracle資料庫內部schema外,在完整資料庫或完整dmp文件集上運行。(可以指定Oracle Database內部模式中的某些表,以便在完整操作中導出和導入,
以便在導入期間提供一致的元數據。)在完整資料庫導出期間,TRANSPORTABLE參數可以設置為ALWAYS,以便通過可傳輸表空間而不是Data Pump轉儲文件中移動數據。
SCHEMA :在一組選定的schema 上運行。 默認為當前用戶的數據。 處理所選模式中的所有對象。 在SCHEMA模式下,無法指定Oracle內部架構(例如,SYS,XDB,ORDSYS,MDSYS,CTXSYS,ORDPLUGINS或LBACSYS)。
TABLE : 導出表,默認為當前用戶下的所有表,將會導出所有表以及其依賴對象。
TABLESPACE :導出指定的表空間,沒有默認行為,存儲在表空間中的表與表模式下會有相同操作。
TRANSPORTABLE :對一組選定表空間中的表(及其依賴對象)的元數據進行操作,以執行可傳輸表空間導出/導入。
*/
remote_link IN VARCHAR2 DEFAULT NULL,
job_name IN VARCHAR2 DEFAULT NULL, --job 名稱
/* 限定為128個字元,並且對於調用者,其名字必須唯一,如果作業因為缺少資源而暫停,則可以在DBA_RESUMABLE視圖中可以查詢到。
如果未提供名稱,則按照以下格式生成名稱。"SYS___%N" 為作業提供的名稱還將用於命名主表和與作業關聯的其他資源。
*/
version IN VARCHAR2 DEFAULT "COMPATIBLE") --版本
/*
要提取的資料庫對象的版本。 此選項僅對「export」,「DBLINK 導入」和「SQL_FILE」操作有效。 不會提取與版本不兼容的資料庫對象或屬性。 此參數的合法值如下:
COMPATIBLE:(默認)元數據的版本對應於資料庫兼容級別和功能的兼容性版本級別(在V$COMPATIBILITY視圖中給出)。 資料庫兼容性必須設置為9.2或更高。
LATEST - 元數據的版本對應於資料庫版本。
特定的資料庫版本,例如"11 .0.0"。
指定值12以允許將所有現有資料庫功能,組件和選項從Oracle Database 11g第2版(11.2.0.3)或更高版本導出到Oracle Database 12 c第1版(12.1)(多租戶容器資料庫( CDB)或非CDB)。
*/
RETURN NUMBER;
/*
可能捕獲的報錯:
INVALID_ARGVAL :指定了無效的operation ,operation
JOB_EXISTS : job 已經存在。
PRIVILEGE_ERROR:許可權不足
INTERNAL_ERROR :在錯誤的schema 下被創建,或者master table 的名字格式有誤。
使用注意事項:
創建作業時,將在調用方的默認表空間內的調用方模式下為作業創建主表。 返回引用該作業的句柄,該句柄將當前會話附加到作業。 連接後,句柄保持有效,
直到發生顯式或隱式分離。 句柄僅在調用者的會話中有效。 通過使用ATTACH功能,可以從其他會話將其他句柄附加到同一作業。
*/
SET_PARALLEL
此存儲過程用以指定job 並行數。
DBMS_DATAPUMP.SET_PARALLEL(
handle IN NUMBER, --句柄
degree IN NUMBER --並行數
);
/*
使用注意事項:
1,SET_PARALLEL 存儲過程只在企業版有用
2,在作業狀態為:Defining, Idling, 或 Executing.時,可以被任何attach 到的會話設置並行。
3,降低並行度,可能會延遲,因為datapump 必須找到有序的完成點。
4,提高並行,將會立即執行
5,並行設置與 init.ora 裡面的資源限制有關,PROCESSES ,SESSIONS
6,SQL_FILE 操作 或者 Transportable 模式下,並行度只有1.
*/
SET_PARAMETER
此過程用於指定job 的選項
DBMS_DATAPUMP.SET_PARAMETER(
handle IN NUMBER, --句柄
name IN VARCHAR2, --參數名
/*
CLIENT_COMMAND (TEXT):一個字元串,用於從客戶端的角度描述當前操作。命令行過程將使用此字元串來存儲用於調用作業的原始命令。
COMPRESSION (TEXT):指定壓縮的對象,支持:DATA_ONLY,METADATA_ONLY,ALL,NONE,(METADATA_ONLY ,NONE 在10.2以後,其他則需要11.1以後)
COMPRESSION_ALGORITHM :指定壓縮演算法,BASIC,LOW,MEDIUM,HIGH 需要12.0.0版本以上以及開啟了Oracle Advanced Compression 選件。
DATA_ACCESS_METHOD :指定檢索數據的方式。AUTOMATIC,DIRECT_PATH,EXTERNAL_TABLE 建議用AUTOMATIC
DATA_OPTIONS : 複雜,,,不說了
ENCRYPTION :加密的好幾個也不說了。。
ESTIMATE :預估導入導出時間,默認為 BLOCKS ,也可以指定為 STATISTICS
ESTIMATE_ONLY :預估size
FLASHBACK_SCN:
FLASHBACK_TIME:
INCLUDE_METADATA:
KEEP_MASTER: 指定在作業完成時候是否保留主表,對於未完成的,主表自動保留。
LOGTIME :表示是否記錄日誌時間,默認未 NONE ,不記錄時間,STATUS 在狀態信息下記錄,LOGFILE 只在日誌文件中記錄, ALL 全部。
MASTER_ONLY:
METRICS:指示是否應將有關作業的其他信息報告給Data Pump日誌文件。
REUSE_DATAFILES:指定是否重用已存在的文件以用來建立表空間,默認 0
SKIP_UNUSABLE_INDEXES:SKIP_UNUSABLE_INDEXES 不支持Transportable 模式,如果非0,行將插入到不可用的索引中,默認1
SOURCE_EDITION:應用程序版本,用於確定要為導出和網路導入卸載的對象。
STREAMS_CONFIGURATION:指定是否導入可能存在於導出轉儲文件中的任何Streams元數據。
TABLE_EXISTS_ACTION:TRUNCATE, REPLACE, APPEND, and SKIP 。導入時候默認為SKIP ,INCLUDE_METADATA 為0 時,默認為APPEND
TABLESPACE_DATAFILE:指定可傳輸表空間集中的數據文件的完整文件規範。 TABLESPACE_DATAFILE僅對可傳輸模式導入有效。可以多次指定TABLESPACE_DATAFILE,但為每個匹配項指定的值必須不同。
TARGET_EDITION:應用程序版本,用於確定載入對象的位置以進行導入和網路導入。
TRANSPORTABLE:此選項適用於在表模式下完成的導出操作,也適用於全模式導入和網路導入。 它允許使用可傳輸表空間移動數據。
ALWAYS >始終通過移動數據文件來移動數據。 此選項僅對table模式和full 模式有效。
NEVER > 數據文件永遠不會用於複製用戶數據 ,默認
TTS_FULL_CHECK:如果非零,則驗證可傳輸表空間集在集合外的對象上沒有依賴關係(特別是IN指針),Default=0。 僅對可傳輸模式導出有效
USER_METADATA:對於schema 模式操作,如果設置為非零,則重新創建用戶模式的元數據(例如,對導出模式的許可權授予)也應該是操作的一部分。
用戶必須有權明確設置此參數。USER_METADATA參數不能在表,表空間或可傳輸表空間模式下使用。如果用戶具有DATAPUMP_EXP_FULL_DATABASE角色,則默認值= 1; 否則為0。
*/
value IN VARCHAR2);
DBMS_DATAPUMP.SET_PARAMETER (
handle IN NUMBER,
name IN VARCHAR2,
value IN NUMBER);
START_JOB
此過程開始或繼續執行作業。
DBMS_DATAPUMP.START_JOB (
handle IN NUMBER,--句柄
skip_current IN NUMBER DEFAULT 0,
/*
如果非零,則會在作業重新啟動時跳過上次執行作業時「正在進行」的操作。 跳過僅適用於導入作業。 此機制允許用戶跳過觸發致命錯誤並導致作業提前終止的操作。 重新啟動時可以跳過多個操作。 日誌文件將標識跳過哪些操作。 如果正在處理域索引,則即使錯誤僅發生在域索引的子組件中,也會跳過域索引的所有部分。
將跳過的操作的描述輸入到日誌文件中。 對於作業中的初始START_JOB,將忽略skip_current。如果為零,則重新啟動時不會丟失任何數據或元數據。
*/
abort_step IN NUMBER DEFAULT 0,--值必須為0.在此參數中插入0以外的值會產生意想不到的後果。
cluster_ok IN NUMBER DEFAULT 1,--如果= 0,則在當前實例上啟動所有工作程序。 否則,工作人員將在作業可用的實例上啟動。
service_name IN VARCHAR2 DEFAULT NULL --如果指定,則指示用於將作業約束到特定實例或特定資源組的服務名稱。
);
/*
可能捕獲的錯誤:
INVALID_STATE :引起的原因可能有以下幾種:
1,沒有添加dmp文件,無網路導入,或者SQL_FILE job
2,SQL_FILE job 為調用ADD_FILE 存儲過程
3,Transportable 導入job 未定義 TABLESPACE_DATAFILE 參數
4,Transportable 或者Tablespace 模式導出,或者DBLINK job 未定義 TABLESPACE_EXPR 過濾。
5,在Import或SQL_FILE作業上設置的轉儲文件不完整或缺少主表規範
INTERNAL_ERROR :作業啟動時檢測到不一致。 可通過GET_STATUS程序獲得更多信息。
使用注意事項:
調用此過程以請求啟動或重新啟動相應的作業時,作業的狀態將從「define」或「idle」狀態更改為「執行」狀態。
如果在START_JOB過程之前未調用SET_PARALLEL過程,則作業中使用的初始並行度級別為1.如果在作業啟動之前調用了SET_PARALLEL,則上次SET_PARALLEL調用指定的度數將確定作業的並行度。 重新啟動時,並行性由作業的先前並行設置確定,除非它被另一個SET_PARALLEL調用覆蓋。
要重新啟動已停止的作業,必須在執行START_JOB過程之前執行ATTACH功能
*/
STOP_JOB
此過程終止作業,但可選擇保留作業的狀態。
DBMS_DATAPUMP.STOP_JOB (
handle IN NUMBER, --句柄,當過程完成時,自動detached
immediate IN NUMBER DEFAULT 0, --如果非零,則立即中止工作進程。這會快速停止作業,但如果作業重新啟動,則必須重新運行部分作業。如果為零,則允許工作進程在終止之前完成其當前工作項(元數據或表數據)。 當工人完成當前工作時,工作處於停止待處理狀態。
keep_master IN NUMBER DEFAULT NULL, --如果非零,則在作業停止時保留主表。 如果為零,則在作業停止時刪除主表。 如果刪除主表,則作業將無法重新啟動。 如果在導出作業期間刪除了主表,則會刪除創建的轉dmp文件。
delay IN NUMBER DEFAULT 60 --等待強制分離其他連接會話的秒數。 延遲允許通知作業的其他會話已執行停止。 作業一直運行,直到所有客戶端都已分離或延遲已滿足。 如果未指定延遲,則默認延遲為60秒。 如果使用較短的延遲,客戶端可能無法通過GET_STATUS過程檢索作業的最終消息。
);
/*
此過程用於請求相應的作業停止執行。
處於執行狀態的作業的終止可能需要幾分鐘才能以有序的方式完成。
對於「定義」,「空閑」或「完成」狀態中的作業,此過程在功能上等同於DETACH過程。
一旦作業停止,可以使用ATTACH函數和START_JOB過程重新啟動它,前提是主表和轉儲文件集保持不變。
如果未指定KEEP_MASTER參數,並且作業處於「定義」狀態或具有「可傳輸」模式,則會刪除主表。 否則,保留主表。
*/
WAIT_FOR_JOB
此過程運行作業,直到它正常完成或由於某些其他原因停止。
DBMS_DATAPUMP.WAIT_FOR_JOB (
handle IN NUMBER,--句柄
job_state OUT VARCHAR2 --作業停止執行時的狀態; 要麼STOPPED,要麼COMPLETED。
);
/*
此過程提供了等待完成數據泵作業的最簡單機制。
應該在調用WAIT_FOR_JOB之前啟動作業。 當WAIT_FOR_JOB返回時,作業將不再執行。 如果工作正常完成,最終狀態將完成。 如果作業因STOP_JOB請求或內部錯誤而停止執行,則最終狀態將為STOPPED。
*/
TAG:墨香溪的溪 |