Oracle Data Pump 工具系列:Data Pump 使用权限配置详解

一、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

你可能感兴趣的:(Oracle Data Pump 工具系列:Data Pump 使用权限配置详解)