一、Data Pump 的概念:
Oracle Data Pump 技術可以非常快速地將一個資料庫的資料與中繼資料遷移到另一個資料庫。
Oracle Data Pump 由三大獨一無二的部分構成:
1. 命令列用戶端:expdp 和 impdp
2. DBMS_DATAPUMP PL/SQL 包(也稱為 Data Pump API)
3. DBMS_METADATA PL/SQL 包(也稱為 Metadata API)
與傳統的基於用戶端的 Export/Import 工具相比,Data Pump 是一種基於伺服器的工具 + 生產力。
Oracle Data Pump 與 Export/Import 的功能並不相容。
Oracle Data Pump 還可以使用 NETWORK_LINK 功能,在無需 dump 檔案的情況下,在兩個資料庫
之間利用網路技術從遠端資料庫遷移資料和中繼資料。
二、Data Pump 工具 + 生產力的安裝與配置
使用者需要一定的許可權才能運行 Data Pump。在 Oracle 10g 或更高版本運行 Export DataPump 或
Import DataPump job 所需的最低許可權要求如下:
- 系統許可權 CREATE SESSION (或 CONNECT 角色)
- 系統許可權 CREATE TABLE
- 對象許可權 對某個有效 directory 對象的讀寫權限 (CREATE DIRECTORY privilege with which a valid directory object was created)
- 對使用者的預設資料表空間需要足夠的資料表空間配額(需要建立 DataPump job 所使用的主抽樣表)。
此外,Data Pump 還需要 EXP_FULL_DATABASE 角色來執行以下任務:
- 運行全庫 Export DataPump 作業
- 運行傳輸資料表空間 Export DataPump 作業
- 運行帶有 TRACE 參數的 Export DataPump 作業
- 運行匯出其他 schema 的 Export DataPump 作業
注意,上述許可權要求適用於連結資料庫運行 Export DataPump 或 Import DataPump 作業的使用者,而非被匯出或匯入的使用者
這些許可權既可以通過顯式的方式授予也可以通過角色來授予,方法如下:
CONNECT system/manager
CREATE DIRECTORY my_dir AS 'full_pre_existing_directory_path_here';
GRANT create session, create table TO scott IDENTIFIED BY tiger;
GRANT read, write ON DIRECTORY my_dir TO scott;
ALTER USER scott QUOTA unlimited ON users;
或者:
CONNECT system/manager
CREATE DIRECTORY my_dir AS 'full_pre_existing_directory_path_here>>';
CREATE ROLE expdp_role;
GRANT create session, create table TO expdp_role;
GRANT read, write ON DIRECTORY my_dir TO expdp_role;
GRANT expdp_role TO scott;
ALTER USER scott DEFAULT ROLE all;
ALTER USER scott QUOTA unlimited ON users;
特權使用者:
特權使用者是指具有執行 Export DataPump 作業的 EXP_FULL_DATABASE 角色和執行
Import DataPump 作業的 IMP_FULL_DATABASE 或者包含這兩種角色的 DBA 角色:
SET lines 80
COL privilege FOR a40
SELECT grantee, granted_role, default_role
FROM dba_role_privs
WHERE granted_role IN ('DBA', 'EXP_FULL_DATABASE', 'IMP_FULL_DATABASE')
ORDER BY 1,2;
GRANTEE GRANTED_ROLE DEF
-------------------- ------------------------------ ---
DBA EXP_FULL_DATABASE YES
DBA IMP_FULL_DATABASE YES
SCOTT EXP_FULL_DATABASE YES
SCOTT IMP_FULL_DATABASE YES
SYS DBA YES
SYS EXP_FULL_DATABASE YES
SYS IMP_FULL_DATABASE YES
SYSMAN DBA YES
SYSTEM DBA YES
使用 DataPump LOGFILE 參數可以將進行中、已完成的工作以及遇到的錯誤相關的訊息全部寫入一個記錄檔。
在檢查 Data Pump 問題時應首先查看該記錄檔。
也可以指定未證實公開的 METRICS=y 參數在該記錄檔中記錄額外的對象數量以及所花時間相關的資訊。
記錄檔中報告的錯誤訊息並不意味著 Data Pump 作業執行失敗 。有些訊息報告的只是警告資訊和通知資訊。例如,
有關對象已存在和被跳過的資訊。在出現這種情況時,可以it過調整 IMPDP 目錄參數來重建這些對象或者往這些已
存在的對象附加資料。
與 DataPump job 許可權相關的實用sql指令碼
--查看串連資料庫執行 DataPump job 的使用者是否具有 CREATE SESSION 和 CREATE TABLE 許可權
SET lines 80 pages 50
COL privilege FOR a40
SELECT grantee, privilege
FROM dba_sys_privs
WHERE (grantee IN ('SCOTT', 'PUBLIC')
OR grantee IN (SELECT granted_role FROM dba_role_privs
WHERE grantee IN ('SCOTT', 'PUBLIC')))
AND privilege IN ('CREATE SESSION', 'CREATE TABLE')
ORDER BY 1,2;
GRANTEE PRIVILEGE
------------------------------ ----------------------------------------
SCOTT CREATE SESSION
SCOTT CREATE TABLE
--查看連結資料庫運行 DataPump job 的使用者所授予的角色及其預設角色
SET lines 80
SELECT grantee, granted_role, default_role
FROM dba_role_privs
WHERE grantee IN ('SCOTT', 'PUBLIC') ORDER BY 1,2;
GRANTEE GRANTED_ROLE DEF
------------------------------ ------------------------------ ---
SCOTT EXP_FULL_DATABASE YES
SCOTT IMP_FULL_DATABASE YES
查詢串連資料庫運行 DataPump job 的使用者所授予的 directory 許可權
SET lines 100
COL privilege FOR a10
COL grantee FOR a20
COL owner FOR a20
SELECT p.grantee, p.privilege, p.owner, d.directory_name
FROM dba_tab_privs p, dba_directories d
WHERE p.table_name=d.directory_name
AND (grantee IN ('SCOTT', 'PUBLIC')
OR grantee IN (SELECT granted_role FROM dba_role_privs
WHERE grantee IN ('SCOTT', 'PUBLIC')))
ORDER BY 4,3,2;
GRANTEE PRIVILEGE OWNER DIRECTORY_NAME
-------------------- ---------- -------------------- ----------------------
IMP_FULL_DATABASE READ SYS DATA_PUMP_DIR
EXP_FULL_DATABASE READ SYS DATA_PUMP_DIR
EXP_FULL_DATABASE WRITE SYS DATA_PUMP_DIR
IMP_FULL_DATABASE WRITE SYS DATA_PUMP_DIR
SCOTT READ SYS MY_DIR
SCOTT WRITE SYS MY_DIR
--查看串連資料庫運行 DataPump job 的使用者的預設資料表空間
SET lines 80
SELECT username, default_tablespace
FROM dba_users WHERE username IN ('SCOTT');
USERNAME DEFAULT_TABLESPACE
------------------------------ ------------------------------
SCOTT USERS
--查看連結資料庫運行 DataPump job 的使用者的資料表空間配額
SET lines 100 numwidth 12
SELECT q.username, q.tablespace_name, q.bytes, q.max_bytes
FROM dba_ts_quotas q, dba_users u
WHERE q.username=u.username AND q.username in ('SCOTT');
USERNAME TABLESPACE_NAME BYTES MAX_BYTES
-------------------- -------------------- ------------ ------------
SCOTT USERS 393216 -1
轉載請註明出處及原文連結:
http://blog.csdn.net/xiangsir/article/details/8627354