當前位置:
首頁 > 最新 > DBMS_DATAPUMP API 定義

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:墨香溪的溪 |