关于数据泵技术介绍: expdp和impdp是oracle数据库之间移动数据的工具。是oracle10g引入了最新的数据泵(data dump)技术,expdp和impdp只能在数据库服务端使用,不能在客户端使用。
数据泵技术作用: 1.实现逻辑备份和逻辑恢复 2.在数据库用户之间移动对象 3.在数据库之间移动对象 4.实现表空间搬迁 数据泵导出导入与传统导出导入的区别: 在10g之前,传统的导出和导入分别使用exp工具和imp工具,从10g开始,不仅保留了原有的exp和imp工具,还提供了数据泵导出导入工具expdp和impdp.使用expdp和impdp时应该注意的事项: 1)exp和imp是客户端工具程序,它们既可以在可以客户端使用,也可以在服务端使用。 2)expdp和impdp是服务端的工具程序,他们只能在oracle服务端使用,不能在客户端使用。 3)imp只适用于exp导出文件,不适用于expdp导出文件;impdp只适用于expdp导出文件,而不适用于exp导出文件。
一、创建测试表空间,测试表 创建测试用户
说明:源库10.0.0.9 oracle实例为 orcl001;源库实例orcl001上创建测试数据
采用sys或者system等管理员创建
export ORACLE_SID=orcl001; sqlplus system/oracle123123
create tablespace zhangsan_db01 datafile '/u01/oracle/tools/oracle11g/oradata/zhangsan_db01' size 10m autoextend on;
create user zhangsan identified by pass123321 default tablespace zhangsan_db01 quota 3m on users;
ALTER USER zhangsan QUOTA UNLIMITED ON zhangsan_DB01;
--grant all privileges to zhangsan; 生成上不允许这么授权,权限太大
--登陆用户zhangsan
sqlplus zhangsan/pass123321
--创建测试表插入数据
CREATE TABLE zhangsan01 (
employee_id NUMBER PRIMARY KEY,
first_name VARCHAR2(50),
last_name VARCHAR2(50),
hire_date DATE,
salary NUMBER
);
INSERT INTO zhangsan01(employee_id, first_name, last_name, hire_date, salary)VALUES (1, 'zhangsan01', 'Doe', '01-Jan-2021', 001);
INSERT INTO zhangsan01(employee_id, first_name, last_name, hire_date, salary)VALUES (2, 'zhangsan02', 'Doe', '01-Jan-2021', 002);
commit;
create table zhangsan03(id number,name varchar2(255));
insert into zhangsan03 values(1,'zhangsan03');
insert into zhangsan03 values(2,'zhangsan03');
commit;
create tablespace wangwu_db01 datafile '/u01/oracle/tools/oracle11g/oradata/wangwu_db01' size 10m autoextend on;
create user wangwu identified by pass123321 default tablespace wangwu_db01 quota 3m on users;
ALTER USER wangwu QUOTA UNLIMITED ON WANGWU_DB01;
GRANT CREATE SESSION to wangwu;
GRANT CREATE ANY TABLE to wangwu;
export ORACLE_SID=orcl001; sqlplus wangwu/pass123321
CREATE TABLE wangwu01 (
employee_id NUMBER PRIMARY KEY,
first_name VARCHAR2(50),
last_name VARCHAR2(50),
hire_date DATE,
salary NUMBER
);
INSERT INTO wangwu01(employee_id, first_name, last_name, hire_date, salary)VALUES (1, 'wangwu01', 'Doe', '01-Jan-2021', 001);
commit;
create table wangwu02(id number,name varchar2(255));
insert into wangwu02 values(1,'wangwu02');
commit;
二、关于expdp导出文件前的设置
--directory相关SQL语句:
select * from dba_directories;
create directory zhangsan_backdir as '/u01/oracle/tools/oracle11g/admin/orcl/dpdump/zhangsan_backdir';
grant read,write on directory zhangsan_backdir to zhangsan;
注意: 导数的数据库用户需要拥有对directory_object的读写权限; 操作系统中需要已经存在directory_object指定的路径; oracle用户拥有对directory_object指定路径的读写权限; system用户导出用户,会将创建用户和授予系统权限的元数据也导出,普通用户不能导出这些元数据。
默认DATA_PUMP_DIR路径是/u01/oracle/tools/oracle11g/admin/orcl/dpdump/
SQL> select * from dba_directories WHERE DIRECTORY_NAME='DATA_PUMP_DIR';
OWNER
--------------------------------------------------------------------------------
DIRECTORY_NAME
--------------------------------------------------------------------------------
DIRECTORY_PATH
--------------------------------------------------------------------------------
SYS
DATA_PUMP_DIR
/u01/oracle/tools/oracle11g/admin/orcl/dpdump/
--创建相应的back dir并且授权
select * from dba_directories;
create directory zhangsan_backdir as '/u01/oracle/tools/oracle11g/admin/orcl/dpdump/zhangsan_backdir';
grant read,write on directory zhangsan_backdir to zhangsan;
--备注:删除目录语句: DROP DIRECTORY my_dir; --操作系统oracle用户下创建对应的目录
[oracle@dbstandby08 ~]$ mkdir -p /u01/oracle/tools/oracle11g/admin/orcl/dpdump/zhangsan_backdir
三、expdp命令示例
数据泵导出包括导出表,导出方案,导出表空间,导出数据库4种方式
3.1 导出表案例说明
导出一张表,例:
export ORACLE_SID=orcl001; expdp system/oracle123123 directory=zhangsan_backdir dumpfile=expdp-zhangsan.dmp logfile=expdp-zhangsan.log tables=zhangsan.zhangsan01
expdp zhangsan/pass123321 directory=zhangsan_backdir dumpfile=expdp-zhangsan.dmp logfile=expdp-zhangsan.log tables=zhangsan.zhangsan01
**提示:**导出表时 采用system账户和普通用户导出信息都是一样的
导出多张表,例:
expdp system/oracle123123 directory=zhangsan_backdir dumpfile=expdp-zhangsan.dmp logfile=expdp-zhangsan.log tables=\(zhangsan.zhangsan01,zhangsan.zhangsan02\)
指定一类的表名进行导出,比如导出表名前缀为zhang的所有表:
expdp zhangsan/pass123321 directory=zhangsan_backdir dumpfile=expdp-zhangsan.dmp logfile=expdp-zhangsan.log tables=zhang%
expdp zhangsan/pass123321@10.0.0.8/orcl directory=zhangsan_backdir dumpfile=expdp-zhangsan.dmp logfile=expdp-zhangsan.log tables=zhangsan%
导出表时,排除ZHANGSAN01表,注意表名称必须大写,而且必须用单引号引起来,而且需要使用转义符 例:
expdp zhangsan/pass123321 directory=zhangsan_backdir dumpfile=expdp-zhangsan.dmp logfile=expdp-zhangsan.log exclude=table:\"in\(\'ZHANGSAN01\'\)\"
expdp zhangsan/pass123321 directory=zhangsan_backdir dumpfile=expdp-zhangsan.dmp logfile=expdp-zhangsan.log exclude=table:\"in\(\'ZHANGSAN01\',\'ZHANGSAN02\'\)\"
3.2导出schemas用户
导出一个用户(导出这个用户下所有对象)例:
expdp system/oracle123123 directory=zhangsan_backdir dumpfile=expdp-zhangsan.dmp logfile=expdp-zhangsan.log schemas=zhangsan
expdp zhangsan/pass123321 directory=zhangsan_backdir dumpfile=expdp-zhangsan.dmp logfile=expdp-zhangsan.log schemas=zhangsan
采用普通用户和system账户expdp导出数据是不一样的,system账户导出用户对象会多出USER,DEFAULT_ROLE,SYSTEM_GRANT,TABLESPACE_QUOTA system账户对用户zhangsan导出过程:
[oracle@oracle zhangsan_backdir]$ expdp system/oracle123123 directory=zhangsan_backdir dumpfile=expdp-zhangsan.dmp logfile=expdp-zhangsan.log schemas=zhangsan
Export: Release 11.2.0.1.0 - Production on Thu Oct 24 10:47:40 2024
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting "SYSTEM"."SYS_EXPORT_SCHEMA_01": system/******** directory=zhangsan_backdir dumpfile=expdp-zhangsan.dmp logfile=expdp-zhangsan.log schemas=zhangsan
Estimate in progress using BLOCKS method...
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 192 KB
Processing object type SCHEMA_EXPORT/USER
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/TABLESPACE_QUOTA
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
. . exported "ZHANGSAN"."ZHANGSAN01" 6.648 KB 1 rows
. . exported "ZHANGSAN"."ZHANGSAN02" 5.421 KB 1 rows
. . exported "ZHANGSAN"."ZHANGSAN03" 5.437 KB 2 rows
Master table "SYSTEM"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SYSTEM.SYS_EXPORT_SCHEMA_01 is:
/u01/oracle/tools/oracle11g/admin/orcl/dpdump/zhangsan_backdir/expdp-zhangsan.dmp
Job "SYSTEM"."SYS_EXPORT_SCHEMA_01" successfully completed at 10:48:00
[oracle@oracle zhangsan_backdir]$
zhangsan账户对用户zhangsan导出过程:
[oracle@oracle zhangsan_backdir]$ expdp zhangsan/pass123321 directory=zhangsan_backdir dumpfile=expdp-zhangsan.dmp logfile=expdp-zhangsan.log schemas=zhangsan
Export: Release 11.2.0.1.0 - Production on Thu Oct 24 10:48:20 2024
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting "ZHANGSAN"."SYS_EXPORT_SCHEMA_01": zhangsan/******** directory=zhangsan_backdir dumpfile=expdp-zhangsan.dmp logfile=expdp-zhangsan.log schemas=zhangsan
Estimate in progress using BLOCKS method...
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 192 KB
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/TABLE/TABLE
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/COMMENT
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
. . exported "ZHANGSAN"."ZHANGSAN01" 6.648 KB 1 rows
. . exported "ZHANGSAN"."ZHANGSAN02" 5.421 KB 1 rows
. . exported "ZHANGSAN"."ZHANGSAN03" 5.437 KB 2 rows
Master table "ZHANGSAN"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded
******************************************************************************
Dump file set for ZHANGSAN.SYS_EXPORT_SCHEMA_01 is:
/u01/oracle/tools/oracle11g/admin/orcl/dpdump/zhangsan_backdir/expdp-zhangsan.dmp
Job "ZHANGSAN"."SYS_EXPORT_SCHEMA_01" successfully completed at 10:48:36
-- 可以远程跨服务器执行expdp命令来备份,但是前提是源端服务器库必须提前创建directory,并且源端服务器系统提前创建好$oracle_home/admin/orcl/dpdump/zhangsan_backdir目录
expdp zhangsan/pass123321@10.0.0.8/orcl directory=zhangsan_backdir dumpfile=expdp-zhangsan.dmp logfile=expdp-zhangsan.log schemas=zhangsan
导出多个用户,例:
expdp system/oracle123123 directory=zhangsan_backdir dumpfile=expdp-zhangsan_zhangsan.dmp logfile=expdp-zhangsan_zhangsan.log schemas=\(zhangsan,wangwu\)
3.3 按查询条件导出为例
--按条件name=zhangsan02导出
expdp zhangsan/pass123321 directory=zhangsan_backdir dumpfile=expdp-zhangsan.dmp logfile=expdp-zhangsan.log tables=zhangsan01 query=\"where FIRST_NAME\=\'zhangsan01\'\"
expdp zhangsan/pass123321 directory=zhangsan_backdir dumpfile=expdp-zhangsan.dmp logfile=expdp-zhangsan.log tables=zhangsan02 query=\"where NAME\=\'zhangsan02\'\"
--定义导出多张表:
expdp zhangsan/pass123321 directory=zhangsan_backdir dumpfile=expdp-zhangsan.dmp logfile=expdp-zhangsan.log tables=zhangsan01,zhangsan02 query=zhangsan01:\"where FIRST_NAME\=\'zhangsan01\'\",zhangsan02:\"where NAME\=\'zhangsan02\'\"
具体执行过程如下:
[oracle@oracle zhangsan_backdir]$ expdp zhangsan/pass123321 directory=zhangsan_backdir dumpfile=expdp-zhangsan.dmp logfile=expdp-zhangsan.log tables=zhangsan01,zhangsan02 query=zhangsan01:\"where FIRST_NAME\=\'zhangsan01\'\",zhangsan02:\"where NAME\=\'zhangsan02\'\"
Export: Release 11.2.0.1.0 - Production on Thu Oct 24 12:16:54 2024
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting "ZHANGSAN"."SYS_EXPORT_TABLE_01": zhangsan/******** directory=zhangsan_backdir dumpfile=expdp-zhangsan.dmp logfile=expdp-zhangsan.log tables=zhangsan01,zhangsan02 query=zhangsan01:"where FIRST_NAME='zhangsan01'",zhangsan02:"where NAME='zhangsan02'"
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/CONSTRAINT/CONSTRAINT
Processing object type TABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
. . exported "ZHANGSAN"."ZHANGSAN01" 6.648 KB 1 rows
. . exported "ZHANGSAN"."ZHANGSAN02" 5.421 KB 1 rows
Master table "ZHANGSAN"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded
******************************************************************************
Dump file set for ZHANGSAN.SYS_EXPORT_TABLE_01 is:
/u01/oracle/tools/oracle11g/admin/orcl/dpdump/zhangsan_backdir/expdp-zhangsan.dmp
Job "ZHANGSAN"."SYS_EXPORT_TABLE_01" successfully completed at 12:17:03
--按条件 ID<=3导出
expdp system/oracle123123 directory=zhangsan_backdir dumpfile=expdp-zhangsan.dmp logfile=expdp-zhangsan.log tables=zhangsan.zhangsan03 query=\"WHERE ID \<\=\'3\'\"
执行过程如下:
[oracle@oracle zhangsan_backdir]$ expdp system/oracle123123 directory=zhangsan_backdir dumpfile=expdp-zhangsan.dmp logfile=expdp-zhangsan.log tables=zhangsan.zhangsan03 query=\"WHERE ID \<\=\'3\'\"
Export: Release 11.2.0.1.0 - Production on Thu Oct 24 11:16:16 2024
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting "SYSTEM"."SYS_EXPORT_TABLE_01": system/******** directory=zhangsan_backdir dumpfile=expdp-zhangsan.dmp logfile=expdp-zhangsan.log tables=zhangsan.zhangsan03 query="WHERE ID <='3'"
Estimate in progress using BLOCKS method...
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 64 KB
Processing object type TABLE_EXPORT/TABLE/TABLE
. . exported "ZHANGSAN"."ZHANGSAN03" 5.437 KB 2 rows
Master table "SYSTEM"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SYSTEM.SYS_EXPORT_TABLE_01 is:
/u01/oracle/tools/oracle11g/admin/orcl/dpdump/zhangsan_backdir/expdp-zhangsan.dmp
Job "SYSTEM"."SYS_EXPORT_TABLE_01" successfully completed at 11:16:19
3.4导出一个用户为例:
并行导出用户zhangsan(导出这个用户下所有对象):
expdp system/oracle123123 directory=zhangsan_backdir dumpfile=expdp%U.dmp logfile=expdp.log schemas=zhangsan parallel=5
导出用户元数据(包含表定义、存储过程、函数等等):
expdp system/oracle123123 directory=zhangsan_backdir dumpfile=expdp%U.dmp logfile=expdp.log schemas=zhangsan content=metadata_only
**只导出用户的数据
expdp zhangsan/pass123321 directory=zhangsan_backdir dumpfile=expdp%U.dmp logfile=expdp.log schemas=zhangsan content=data_only
导出用户存储过程,例:
expdp system/oracle123 directory=zhangsan_backdir dumpfile=expdp%U.dmp logfile=expdp.log schemas=zhangsan include=procedure
导出用户函数和视图,例:
expdp system/oracle123 directory=zhangsan_backdir dumpfile=expdp.dmp logfile=expdp.log schemas=zhangsan include=\(function,view\)
导出一个用户,但不包括索引,例:
expdp system/oracle123 directory=zhangsan_backdir dumpfile=expdp.dmp logfile=expdp.log schemas=zhangsan exclude=index
导出整个数据库(sys、ordsys、mdsys的用户数据不会被导出)例:
expdp system/oracle123123 directory=zhangsan_backdir dumpfile=expdp-full.dmp logfile=expdp.log full=yes
3.5 导出表空间
**导出表空间 **
expdp zhangsan/pass123321 directory=zhangsan_backdir dumpfile=expdp-zhangsan.dmp logfile=expdp-zhangsan.log tablespaces=zhangsan_db01
导出可移动表空间 注意: --expdp需要使用system用户; --tablespace要进行read only设置
sqlplus system/oracle123
SQL> alter tablespace zhangsan_db01 read only;
expdp system/oracle123 directory=zhangsan_backdir dumpfile=expdp-zhangsan.dmp logfile=expdp-zhangsan.log transport_tablespaces=zhangsan_db01
四、expdp参数说明
attach=[schema_name.]job_name
说明:nodefault。连接到作业,进入交互模式。
导出模式,以下五个参数互斥。
full=[yes|no]
说明:nodefault。导出所有数据和元数据。要执行完全导出,需要具有datapump_exp_full_database角色。
schemas=schema_name[,...]
说明:default current user's schema。导出用户。
tables=[schema_name.]table_name[:partition_name][,...]
说明:nodefault。导出表。
tablespaces=tablespace_name[,...]
说明:nodefault。导出表空间。
transport_tablespaces=tablespace_name[,...]
说明:nodefault。导出可移动表空间。
过滤条件,以下三个参数互斥:
query=[schema.][table_name:] query_clause
说明:nodefault。按查询条件导出。
exclude=object_type[:name_clause][,...]
说明:nodefault。排除特定的对象类型。
include=object_type[:name_clause][,...]
说明:nodefault。包括特定的对象类型。
其他参数:
directory=directory_object
说明:default:data_pump_dir。导出路径。
dumpfile=[directory_object:]file_name[,...]
说明:default:expdat.dmp。导出的文件名。
logfile=[directory_object:]file_name
说明:default:export.log。导出的日志文件名。
content=[all|data_only|metadata_only]
说明:default:all。指定要导出的数据。
parallel=integer
说明:default:1。并行度,该值应小于等于dmp文件数量,或可以为'dumpfile='使用替换变量'%U'。
RAC环境中,并行度大于1时,注意目录应该为共享目录。
compression=[all|data_only|metadata_only|none]
说明:default:metadata_only。压缩。
parfile=[directory_path]file_name
说明:nodefault。指定导出参数文件名称。
network_link=source_database_link
说明:nodefault。连接到源数据库进行导出。
filesize=integer[b|kb|mb|gb|tb]
说明:default:0不限制大小。指定每个dmp文件的最大大小。
如果此参数小于将要导出的数据大小,将报错ORA-39095。
job_name=jobname_string
说明:default:system-generated name of the form SYS_EXPORT_<mode>_NN。指定job名称。
version=[compatilble|latest|version_string]
说明:default:compatible。默认兼容模式,可以指定导出dmp文件的版本。
五、IMPDP导入示例
5.1 注意事项
expdp导出的文件不能使用imp导入,只能通过impdp导入数据库; 导入时遇到已存在的对象,默认会跳过这个对象,继续导入其他对象; 导入时应确认dmp文件和目标数据库的tablespace、schema是否对应; 导入dmp文件时,应确定dmp文件导出时的命令,以便顺利导入数据。
拿到一个dmp文件,如果忘记了导出命令,可以通过以下方法确认(非官方,生产数据勿使用):确认dmp文件是exp导出还是expdp导出:
1)xxd test.dmp | more
expdp导出的文件开头为0301,exp导出的文件开头为0303
2)strings test.dmp | more
expdp导出的dmp文件头信息:
"SYS"."SYS_EXPORT_TABLE_01" -----job名称
x86_64/Linux 2.4.xx -----操作系统版本
bjdb -----数据库名称
ZHS16GBK -----数据库字符集
11.02.00.04.00 -----数据库版本
exp导出的dmp文件头信息:
iEXPORT:V11.02.00 -----版本
USCOTT -----用户
RTABLES -----对象
确认expdp导出的dmp文件的导出命令
strings test.dmp | grep CLIENT_COMMAND
5.2关于文件导入的设置
**目标库上也得提前创建dba_directories 系统os上对应的zhangsan_backdir目录也得创建 **
--directory相关SQL语句
select * from dba_directories;
create directory zhangsan_backdir as '/u01/oracle/tools/oracle11g/admin/orcl/dpdump/zhangsan_backdir';
grant read,write on directory zhangsan_backdir to zhangsan;
5.3 impdp命令示例
说明:目标库为10.0.0.8机器,oracle实例为orcl
导入dmp文件中的所有数据,例:
impdp system/oracle directory=my_dir dumpfile=expdp.dmp logfile=impdp.log full=yes
**并行导入: **
impdp system/oracle directory=my_dir dumpfile=expdp%U.dmp logfile=impdp.log parallel=5
导入元数据(包含表定义、存储过程、函数等等):
impdp system/oracle directory=my_dir dumpfile=expdp.dmp logfile=impdp.log content=metadata_only
导入存储过程,例:
impdp system/oracle directory=my_dir dumpfile=expdp.dmp logfile=impdp.log include=procedure
导入函数和视图,例:
impdp system/oracle directory=my_dir dumpfile=expdp.dmp logfile=impdp.log include=\(function,view\)
导入数据,但不包括索引,例:
impdp system/oracle directory=my_dir dumpfile=expdp.dmp logfile=impdp.log exclude=index
重命名表名导入,例:
impdp system/oracle directory=my_dir dumpfile=expdp.dmp logfile=impdp.log remap_table=scott.emp:emp1
重命名schema名导入,例
impdp system/oracle directory=my_dir dumpfile=expdp.dmp logfile=impdp.log remap_schema=scott:tim
重命名表空间名导入,例:
impdp system/oracle directory=my_dir dumpfile=expdp.dmp logfile=impdp.log remap_tablespace=users:apptbs
导入时忽略所有对象的段属性,这样导入时对象都创建在目标数据库用户默认的表空间上
impdp system/oracle directory=my_dir dumpfile=expdp.dmp logfile=impdp.log transform=segment_attributes:n
将dmp文件的ddl语句导入到一个文件,不导入数据库,例
impdp system/oracle directory=my_dir dumpfile=expdp.dmp logfile=impdp.log sqlfile=import.sql
六、expdp导出和impdp导入测试
6.1源库导出表zhangsan01数据,然后在测试库恢复
在原库上执行
SELECT TABLE_NAME,OWNER,TABLESPACE_NAME FROM dba_TABLES WHERE TABLE_NAME = 'WANGWU01';--此处WANGWU01名称要大写。
导出zhangsan01表数据: 提前确定导出的表的owner,TABLESPACE_NAME,然后在目标库上提前创建对应的用户,表空间以及用户对表空间的读写权限
如果目标库不存在对应的用户和表空间,以及表空间的读写权限,可能会报下面错误:
ORA-39083: Object type TABLE:"ZHANGSAN"."ZHANGSAN01" failed to create with error:
ORA-01918: user 'ZHANGSAN' does not exist
ORA-39083: Object type TABLE:"ZHANGSAN"."ZHANGSAN01" failed to create with error:
ORA-01950: no privileges on tablespace 'ZHANGSAN_DB01'
ORA-39083: Object type TABLE:"ZHANGSAN"."ZHANGSAN01" failed to create with error:
ORA-01647: tablespace 'ZHANGSAN_DB01' is read-only, cannot allocate space in it
报错解决办法就是目标库创建对应的用户,表空间和表空间的读写权限
源库导出指令:
expdp system/oracle123 directory=zhangsan_backdir dumpfile=expdp-zhangsan.dmp logfile=expdp-zhangsan.log tables=zhangsan.zhangsan01
目标库sql指令:
sqlplus / as sysdba
create tablespace zhangsan_db01 datafile '/u01/oracle/tools/oracle11g/oradata/zhangsan_db01' size 10m autoextend on;
create user zhangsan identified by pass123321 default tablespace zhangsan_db01 quota 3m on users;
ALTER USER zhangsan QUOTA UNLIMITED ON zhangsan_DB01; 或者ALTER TABLESPACE ZHANGSAN_DB01 READ WRITE;
源库导入指令:
impdp system/oracle directory=zhangsan_backdir dumpfile=expdp-zhangsan.dmp logfile=impdp.log tables=zhangsan.zhangsan01
重命名表名导入,例:
impdp system/oracle directory=zhangsan_backdir dumpfile=expdp-zhangsan.dmp logfile=expdp-zhangsan.log remap_table=zhangsan.zhangsan01:test01
6.2源库导出schemas用户数据,然后在测试库恢复
1)expdp system/oracle123 directory=zhangsan_backdir dumpfile=expdp-zhangsan.dmp logfile=expdp.log schemas=zhangsan
2)导入到指定用户下
impdp system/oracle directory=zhangsan_backdir dumpfile=expdp-zhangsan.dmp logfile=impdp.log schemas=zhangsan
3)改变表的owner 导入 并导入到指定用户wangwu下 目标库不需要提前创建用户zhangsan和wangwu,会自己创建账户wangwu,而且目标库wangwu/pass123321可以登录查看导入的数据
impdp system/oracle directory=zhangsan_backdir dumpfile=expdp-zhangsan.dmp logfile=impdp.log REMAP_SCHEMA=zhangsan:wangwu
6.3导出表空间
将数据移到不同用户名下的不同表空间
源库全备份
expdp system/oracle123 directory=zhangsan_backdir dumpfile=expdp.dmp logfile=impdp.log full=yes
将数据从zhangsan账户表空间zhangsan_db01迁移到账户wangwu表空间wangwu_db01下
impdp system/oracle directory=zhangsan_backdir dumpfile=expdp.dmp logfile=expdp-zhangsan.log remap_schema=zhangsan:wangwu remap_tablespace=zhangsan_db01:wangwu_db01 full=y
将数据移到test1相同用户名下的不同表空间test2_data
impdp test1/test123 directory=dpdata1 dumpfile=XXX.dmp remap_tablespace=ts_test1_prod:test2_data
将数据移到wangwu相同用户名下的不同表空间 多个表空间转换用逗号隔开
impdp wangwu/pass123321 directory=dpdata1 dumpfile=XXX.dmp remap_tablespace=ts_test1_prod:test2_data,ts_test1_prod1:test2_data
6.4追加表数据
impdp system/oracle123 directory=zhangsan_backdir dumpfile=expdp-wangwu.dmp logfile=impdp.log schemas=wangwu TABLE_EXISTS_ACTION=append