数据泵(EXPDP和IMPDP)是10g的新增功能;而10g之前的替代工具是EXP和IMP;
注(官方文档):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.
(1)EXP和IMP是客户端工具程序,它们既可以在客户端使用,也可以在服务器端使用。
(2)EXPDP和IMPDP调用Server端的API在执行操作,在客户端可以使用,但是生成的dump文件存在于服务器上。
(3)IMP只适合EXP导出的文件,而不适合于EXPDP导出文件;IMPDP只适用于EXPDP导出的文件,而不适合于EXP导出的文件。
数据泵导出包括导出表、导出方案、导出表空间、导出数据库等4种模式。使用EXPDP工具时,转蓄文件只能存放在DRIXCEROY对象对应的OS目录中,而不能直接指定转蓄文件所在的OS目录。因此必须首先创建DRIXCEROY对象。并且需要为数据库用户授予使用DRIXCEROY对象的权限。普通用户只能导出自己方案下的表,如果要导出其他方案下的表或是导出其他方案或是表空间或是数据库,需要是EXP_FULL_DATABASE角色或是DBA角色;需要注意:导出数据库时,不会导出SYS、ORDSYS、ORDPLUGINS、STXSYS、CTXSYS、MDSYS、LBACSYS以及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 官方文档给出的解释