10G才开始提供的新工具EXPDP IMPDP
与EXP和IMP类似 可以算是他们的加强版 但各自独立 互不通用 导出文件只能在服务器端(借助了数据库目录)
EXP和EMP的功能 数据泵基本都涵盖
数据泵导出包括导出表,导出方案,导出表空间,导出数据库4种方式
要使用数据泵必须先创建数据库目录
数据库目录只允许sys创建
普通用户使用 必须授权
SQL> ! mkdir dp_dir
SQL> create directory dp_dir as '/home/oracle/dp_dir/';
Directory created.
SQL> grant read,write on directory dp_dir to scott;
Grant succeeded.
SQL>
数据泵导出方法:
expdp
导出表emp和dept
[oracle@sql dp_dir]$ expdp scott/seker directory=dp_dir dumpfile=exp%U.dmp tables=dept,emp
Export: Release 10.2.0.1.0 - Production on Wednesday, 27 April, 2011 1:39:29
Copyright (c) 2003, 2005, Oracle. All rights reserved.
Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
Starting "SCOTT"."SYS_EXPORT_TABLE_01": scott/******** directory=dp_dir dumpfile=exp%U.dmp tables=dept,emp
Estimate in progress using BLOCKS method...
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 128 KB
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/INDEX/INDEX
Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type TABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
. . exported "SCOTT"."DEPT" 5.656 KB 4 rows
. . exported "SCOTT"."EMP" 7.828 KB 14 rows
Master table "SCOTT"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SCOTT.SYS_EXPORT_TABLE_01 is:
/home/oracle/dp_dir/exp01.dmp
Job "SCOTT"."SYS_EXPORT_TABLE_01" successfully completed at 01:39:35
[oracle@sql dp_dir]$ ls
exp01.dmp expdat.dmp export.log
[oracle@sql dp_dir]$
scott/seker 连接用户验证
directory=dp_dir 使用的数据库目录
dumpfile=exp%U.dmp 导出文件名 %U 是双位数字序列号 并行导时有意义 默认并行度为1
tables=dept,emp 要导出的表
参数content=设置值
可以导出表结构(metadata_only),表数据(data_only),表结构+表数据(all)
默认值是all
参数tables=设置值
可以指定多个表 用逗号分隔
不写这个参数 就是导出模式下的所有
导出模式下的所有对象 要求对指定模式有足够的权限
schemas=模式名
导出全库 需要使用权限较高的用户sys或system
full=y
expdp '/ as sysdba' directory=dp_dir dumpfile=exp_full_db.dmp full=y
并行度设置 根据CPU的数量设置
PARALLEL=2
导出表空间内的所有数据
tablespaces=表空间名
导出表空间的定义 用于表空间传输
TRANSPORT_TABLESPACES=
NLS_CHARSET_ID
NLS_CHARSET_NAME
alter database character set INTERNAL_USE AL32UTF8;
select * from v$transportable_platform;
SQL> EXECUTE DBMS_TTS.TRANSPORT_SET_CHECK('TBS_SINGLE',true);
PL/SQL 过程已成功完成。
SQL> SELECT * FROM TRANSPORT_SET_VIOLATIONS;
未选定行
说明表空间是自包含的
也可以将参数写在文件中 加载
parfile=参数文件
按where条件导
query=
expdp scott/seker directory=dp_dir dumpfile=exp_emp_deptno_10b.dmp tables=emp query='"where DEPTNO=20"'
排查对象 可以过滤的对象有table,index,trigger,procedure
写在参数文件中不需要转义 写在命令行要转义
include 和 exclude
expdp userid=scott/seker directory=dp_dir dumpfile=exp_emp_deptno_10e.dmp exclude=table:\"\=\'EMP\'\"
[oracle@sql dp_dir]$ cat p.txt
userid=scott/seker
directory=dp_dir
dumpfile=exp_emp_deptno_10d.dmp
exclude=table:"='EMP'"
[oracle@sql dp_dir]$ expdp parfile=p.txt
expdp userid=scott/seker directory=dp_dir dumpfile=exp_emp_deptno_10f.dmp include=table:\"in\(\'EMP\',\'DEPT\'\)\"
[oracle@sql dp_dir]$ cat p.txt
userid=scott/seker
directory=dp_dir
dumpfile=exp_emp_deptno_10g.dmp
include=table:"in('EMP','DEPT')"
[oracle@sql dp_dir]$
数据泵导入方法:
impdp
[oracle@sql dp_dir]$ impdp scott/seker directory=dp_dir dumpfile=exp_schema_scott.dmp tables=emp
Import: Release 10.2.0.1.0 - Production on Wednesday, 27 April, 2011 2:00:55
Copyright (c) 2003, 2005, Oracle. All rights reserved.
Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
Master table "SCOTT"."SYS_IMPORT_TABLE_01" successfully loaded/unloaded
Starting "SCOTT"."SYS_IMPORT_TABLE_01": scott/******** directory=dp_dir dumpfile=exp_schema_scott.dmp tables=emp
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
. . imported "SCOTT"."EMP" 7.828 KB 14 rows
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Job "SCOTT"."SYS_IMPORT_TABLE_01" successfully completed at 02:00:59
[oracle@sql dp_dir]$
scott/seker 连接数据库的验证信息
directory=dp_dir 使用的数据库目录
dumpfile=exp_schema_scott.dmp 导入的文件
tables=emp 导出的表
参数使用方法和导出基本一致
参数content=设置值
可以导出表结构(metadata_only),表数据(data_only),表结构+表数据(all)
默认值是all
参数tables=设置值
可以指定多个表 用逗号分隔
不写这个参数 就是导出模式下的所有
导出模式下的所有对象 要求对指定模式有足够的权限
schemas=模式名
导出全库 需要使用权限较高的用户sys或system
full=y
impdp '/ as sysdba' directory=dp_dir dumpfile=exp_full_db.dmp full=y
并行度设置 根据CPU的数量设置
PARALLEL=2
导出表空间内的所有数据
tablespaces=表空间名
导出表空间的定义 用于表空间传输
TRANSPORT_TABLESPACES=
按where条件导
query=
expdp scott/seker directory=dp_dir dumpfile=exp_emp_deptno_10b.dmp tables=emp query='"where DEPTNO=20"'
排查对象 可以过滤的对象有table,index,trigger,procedure
写在参数文件中不需要转义 写在命令行要转义
include 和 exclude
expdp userid=scott/seker directory=dp_dir dumpfile=exp_emp_deptno_10e.dmp exclude=table:\"\=\'EMP\'\"
[oracle@sql dp_dir]$ cat p.txt
userid=scott/seker
directory=dp_dir
dumpfile=exp_emp_deptno_10d.dmp
exclude=table:"='EMP'"
[oracle@sql dp_dir]$ expdp parfile=p.txt
expdp userid=scott/seker directory=dp_dir dumpfile=exp_emp_deptno_10f.dmp include=table:\"in\(\'EMP\',\'DEPT\'\)\"
[oracle@sql dp_dir]$ cat p.txt
userid=scott/seker
directory=dp_dir
dumpfile=exp_emp_deptno_10g.dmp
include=table:"in('EMP','DEPT')"
[oracle@sql dp_dir]$
REMAP_DATAFILE
该选项用于将源数据文件名转变为目标数据文件名,在不同平台之间搬移表空间时可能需要该选项.
REMAP_DATAFIEL=source_datafie:target_datafile
REMAP_SCHEMA
该选项用于将源方案的所有对象装载到目标方案中.
REMAP_SCHEMA=source_schema:target_schema
[oracle@sql dp_dir]$ impdp \''/ as sysdba'\' directory=dp_dir dumpfile=exp_full_db.dmp schemas=scott remap_schema=scott:u1
REMAP_TABLESPACE
将源表空间的所有对象导入到目标表空间中
REMAP_TABLESPACE=source_tablespace:target:tablespace
利用db_like实现模式复制 不需要导出 直接使用导入命令即可
SQL> create public database link ln_db20 connect to system identified by oracle using 'DB20';
Database link created.
SQL> grant connect,resource to u2 identified by u2;
[oracle@sql dp_dir]$ impdp \''/ as sysdba'\' network_link=ln_db20 schemas=scott remap_schema=scott:u2