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