ORACLE 数据泵技术

来源:互联网 发布:诺基亚c6 01视频软件 编辑:程序博客网 时间:2024/04/30 15:04

一.    理论部分

数据泵(EXPDPIMPDP)10g的新增功能;而10g之前的替代工具是EXPIMP;

注(官方文档):The Data Pump API provides a high-speed mechanism to move all or part of the data and metadata for a site from one database to another. To use the Data Pump API, you use the procedures provided in the DBMS_DATAPUMP PL/SQL package. The Data Pump Export and Data Pump Import utilities are based on the Data Pump API.

1EXPIMP是客户端工具程序,它们既可以在客户端使用,也可以在服务器端使用。

 

2EXPDPIMPDP调用Server端的API在执行操作,在客户端可以使用,但是生成的dump文件存在于服务器上。

 

3IMP只适合EXP导出的文件,而不适合于EXPDP导出文件;IMPDP只适用于EXPDP导出的文件,而不适合于EXP导出的文件。

 

数据泵导出包括导出表、导出方案、导出表空间、导出数据库等4种模式。使用EXPDP工具时,转蓄文件只能存放在DRIXCEROY对象对应的OS目录中,而不能直接指定转蓄文件所在的OS目录。因此必须首先创建DRIXCEROY对象。并且需要为数据库用户授予使用DRIXCEROY对象的权限。普通用户只能导出自己方案下的表,如果要导出其他方案下的表或是导出其他方案或是表空间或是数据库,需要是EXP_FULL_DATABASE角色或是DBA角色;需要注意:导出数据库时,不会导出SYSORDSYSORDPLUGINSSTXSYSCTXSYSMDSYSLBACSYS以及XDB等方案的对象。相应的越权导入需要有IMP_FULL_DATABASE角色或DBA角色;导入方案是既可以将方案所有对象导入到源方案中,也可以将方案所有对象导入到其他方案中。如果要将方案导入到其他方案中,必须指定REMAP_SCHEMA选项。

 

 

二.    实战部分

有一用户A的所有表所占用的都是users表空间,为了管理方便和提高效率,决定新建立一个表空间TS,然后把A的所有表转移到此表空间下!

 

此问题涉及一个从一个表空间到另一个表空间的转换,所以要用到数据泵技术。(以内网数据库为例)

首先创建表空间TS

Create tablespace TS

datafile ‘/opt/oracle/product/10.1.0/oradata/orcl/ts.dbf’

size 500 M

extent management local

uniform size 1M;

 

然后在Linux下的/opt/oracle/中创建数据泵导入导出数据目录和日志目录etl

Mkdir /opt/oracle/etl

 

之后用PL/SQL在数据库中注册刚才创建数据泵导入导出数据目录和日志目录

Create directory data_dir as ‘/opt/oracle/etl’

Create directory log_dir as ‘/opt/oracle/etl’

随后就把这两个目录的读写权限授予用户A

Grant read,write on directory data_dir to A

Grant read,write on directory log_dir to A

再在/opt/oracle/etl里创建数据泵导出文件并编辑

Touch expdpA.txt

Vi expdpA.txt

 

DIRECTORY=data_dir

SCHEMAS=A

DUMPFILE=SCHEMA_A.DAT

 

最后在Linux里执行数据泵操作

Cd /opt/oracle/etl

Expdp system/admin parfile=expdpA.txt

 

这样就把A的数据表给全部导出来了,并随日志文件一起放在刚才创建的目录下。

 

接下来是数据泵的导入操作

在刚才创建的目录里创建数据泵导入文件并编辑

Touch impdpA.txt

Vi impdpA.txt

 

DIRECTORY=data_dir

DUMPFILE=SCHEMA_A.DAT

REMAP_TABLESPACE=USERS:TS

如果是不同的用户的话可以加上这一句(例如导入到用户B里面。REMAP_SCHEMA=A:B

最后在Linux里执行数据泵操作

Cd /opt/oracle/etl

Expdp system/admin parfile=impdpA.txt

 

 

 

此问题得到解决。

 

注:最近在操作时由于要导入的内容过大,目标表空间空间不足(目标表空间为非自动扩展),就会出现如下告警:

ORA-39171: Job is experiencing a resumable wait.
ORA-01652: unable to extend temp segment by 8192 in tablespace TS_SALES

这时你在另外一个sid里扩展该表空间,待等待结束就会重新唤起该等待的任务;

oracle 官方文档给出的解释

ORA-39171: Job is experiencing a resumable wait.string
Cause: The Data Pump job is stalled with one or more of its sessions having a resumable wait. Resumable waits are typically caused by a non-expandable tablespace running out of space. The follow-on message describes the nature of the wait.
Action: Correct the condition causing the wait. This will typically involve adding datafiles to the tablespace that is full.

 

原创粉丝点击