当前位置: 代码网 > it编程>数据库>Oracle > 基于Oracle数据泵(expdp/impdp)的数据导入导出指南

基于Oracle数据泵(expdp/impdp)的数据导入导出指南

2025年10月14日 Oracle 我要评论
引言数据泵(expdp/impdp)是oracle 10g 之后进行高效数据迁移的标准工具,支持多线程操作与灵活参数配置‌。数据泵实际上是后台存储过程作业,由dw进程进行工作,此进程可以并发

引言

数据泵(expdp/impdp)是oracle 10g 之后进行高效数据迁移的标准工具,支持多线程操作与灵活参数配置‌。数据泵实际上是后台存储过程作业,由dw进程进行工作,此进程可以并发多个运行,相关作业状态可以由dba_datapump_jobs视图查看。在终端关闭或者ctrl c啥的依然不会影响作业的运行,若要进行作业管理需要attach。利用数据泵可以做到逻辑的备份,数据迁移,传输表空间等,dba比较常用的工具; imp/exp 是原始导入导出工具。

数据导出(expdp)

数据的导出为数据库的存储过程作业,所以需要用到目录对象,定义导出dump文件、日志文件等的路径信息;

导出任务发起,作业会数据库自动创建,作业会自动创建master表记录作业信息,作业状态也会记录在dba_datapump_jobs视图;

数据导出源端为数据库,目标端为dump文件,也就是灵活将数据库的相关对象写入到dump物理文件,理解链接关系,跟目标库是无关系的;

当然需要用到exp_full_database角色权限,目录对象的执行读写权限。

查看表空间

set line 300 pages 100
col tablespace_name for a40
col owner for a30
select distinct tablespace_name,owner from dba_tables
where owner in (select username from dba_users where account_status='open' and username not in ('sys','system','dbsnmp'))
order by 2;

查看索引

set line 300 pages 100
col tablespace_name for a40
col owner for a30
select distinct tablespace_name,owner from dba_indexes
where owner in (select username from dba_users where account_status='open' and username not in ('sys','system','dbsnmp'))
order by 2;


查看数据库大小

select sum(bytes)/1024/1024/1024 from dba_segments;

查看所有directory目录

col directory_name for a25
col directory_path for a80
select directory_name,directory_path from dba_directories;

创建目录

mkdir /backup/dumpfile
chown oracle.oinstall /backup/dumpfile

数据库中创建并授权

create directory mydir as '/backup/dumpfile';
grant read,write on directory mydir to sys;

默认是用sys进行创建,普通用户需要进行授权。

导出数据

参数文件

vi /home/oracle/wl_full.par

userid=system/*******
directory=dumpdir
dumpfile=xl20250216_%u.dmp
logfile=xl20250216_exp.log
job_name=xl_export_full
logtime=all
schema=xl
exclude=statistics
compression=all
parallel=8
cluster=no

userid 为用户凭证,普通用户操作需要授权
directory 为目录对象
dumpfile 为导出文件名称
logfile 为导出日志名称
job_name 为作业名称,自定义作业名称方便管理
logtime all为记录每个环节的时间
schema 为模式名称,通俗讲也就是导出哪个业务用户的数据
exclude 为排除不导出的内容,这里列举为统计信息,当然可以是其他的对象信息
compression 为导出数据的压缩级别,all为数据和元数据全部压缩,最高压缩类型,当然可以结合压缩算法compression_algorithm达到更高级别的压缩
parallel 为并行度,也就是定义dw进程的个数
cluster 为rac特有参数,定义作业是否在每个节点运行

设置方案

schemas=schema1,schema2

作用:指定要导出的 schema(方案或用户)列表,多个 schema 用逗号分隔。
注意事项:
导出多个 schema 时,确保目标数据库有足够的存储空间。
schema 中的对象(如表、索引、存储过程)会被一并导出。

设置导出文件与目录

directory=data_pump_dir

作用:指定导出文件存放的 oracle 目录对象(对应服务器上的物理路径)。

注意事项:

data_pump_dir 是 oracle 的预定义目录,需拥有dba 提前创建并授权:

create directory data_pump_dir as 'd:\dir';
grant read, write on directory data_pump_dir to system;

实际路径需在数据库服务器上存在且有写入权限,而非客户端机器。不要设置电脑桌面目录下文件,可能权限有影响,导入报错访问不了文件。

设置导出文件名

dumpfile=filename_%u.dmp

作用:定义导出文件的名称格式,%u 表示自动生成两位数字编号(如 multischema_01.dmp)。

注意事项:

当导出数据量较大时,结合 parallel 参数会生成多个文件。
分片文件名需包含通配符(如 %u%l),否则并行导出会报错。

执行

expdp parfile=/home/oracle/wl_full.par

查看作业状态

set line 300 pages 100
col owner_name for a20
col job_name for a30
col state for a20
select owner_name,job_name,state from dba_datapump_jobs;

owner_name	     job_name			    state
-------------------- ------------------------------ --------------------
system		     xl_export_full		    executing

登录作业

expdp system attach=xl_export_full

status,查看状态
stop_job,停止作业,可以继续启动,dba_datapump_jobs信息依然存在
start_job,继续启动停止的作业
kill_job,强制终止作业,dba_datapump_jobs信息会清除

数据导入

数据的导入也是数据库的存储过程作业,所以需要用到目录对象,定义dump文件、日志文件等的路径信息;
导入任务发起,作业会数据库自动创建,作业会自动创建master表记录作业信息,作业状态也会记录在dba_datapump_jobs视图;
数据导入源端为dump文件,目标端为数据库,也就是灵活将dump文件的相关对象写入到目标数据库,理解链接关系,跟源库是无关系的;
当然需要用到imp_full_database角色权限,目录对象的执行读写权限。

创建用户和表空间

create tablespace test datafile size 31g autoextend on;
create user test identified by "test" default tablespace test quota unlimited on test;

关键是定义好表空间,用户可以不用创建。
若不同表空间需要利用remap_tablespace重新映射表空间。
若需要导入不同的用户,可以利用remap_schema重新映射用户。
当然表结构和数据也可以重新映射。

创建目录对象

目录

mkdir /backup/dumpfile
chown oracle.oinstall /backup/dumpfile

保存信息到数据库

create directory mydir as '/backup/dumpfile';

创建参数文件

vi /home/oracle/imp_full.par

userid=system/*******
directory=mydir
dumpfile=xl20250216_%u.dmp
logfile=xl20250216_imp.log
job_name=xl_import_full
logtime=all
cluster=no
parallel=8
transform=disable_archive_logging:y
remap_tablespace=users:cismt_data
table_exists_action=replace

userid 为导出用户凭证
directory 为目录对象
dumpfile 为导出文件名称
logfile 为导入日志名称
job_name 为作业名称,自定义作业名称方便管理
logtime all为记录每个环节的时间
schema 为模式名称,通俗讲也就是导出哪个业务用户的数据
exclude 为排除不导出的内容,这里列举为统计信息,当然可以是其他的对象信息
compression 为导出数据的压缩级别,all为数据和元数据全部压缩
parallel 为并行度,也就是定义dw进程的个数,要跟dmp文件数对应上
cluster 为rac特有参数,定义作业是否在每个节点运行
transform为转换参数,disable_archive_logging:y也就是不写归档,12c新特性
remap_tablespace为重新映射表空间,源:目标
table_exists_action为当表存着如何操作,replace为替换,重新创建表

remap_schema 模式映射

remap_schema=schema1:newschema1,schema2:newschema2
作用:将源模式映射到目标模式。
schema1 → newschema1
schema2 → newschema2
目标模式需提前存在,或确保执行用户有权限创建(需 create user 权限)。
映射失败会导致对象导入到原模式(若存在)或报错。

remap_tablespace 表空间映射

remap_tablespace=old_ts1:new_ts1,old_ts2:new_ts2
:每个源表空间只能映射一次。若需将 user_me 中的不同对象分配到不同目标表空间,需结合 remap_schema 和 include 参数。
作用:将源表空间映射到目标表空间。
old_ts1 → new_ts1
old_ts2 → new_ts2

目标表空间需提前创建。
每个源表空间只能映射一次。
old_ts1 → new_ts1
old_ts1→ new_ts2
若这样会执行不了命令
若未映射,对象将尝试导入到原表空间(若不存在则报错)。

忽略段属性(存储参数)

transform=segment_attributes:n
作用:忽略段属性(存储参数),包括:
表空间(tablespace)
存储参数(如 initial, next 等)
日志模式(logging/nologging)
适用场景:
目标环境表空间结构与源库不同,需依赖 remap_tablespace 参数。
避免存储参数(如分区表大小)与目标环境不匹配。
注意:需与 remap_tablespace 配合使用,否则对象可能导入到默认表空间。

数据存储的目录

directory=data_pump_dir

作用:指定数据库目录对象,用于定位转储文件(.dmp)和日志文件。

注意:

data_pump_dir 需在目标数据库中预定义。
路径权限需允许 oracle 进程读写。

数据存储的文件(.dmp)

作用:指定导入的转储文件名,%u 通配符自动匹配多个文件(如 multischema_01.dmp, multischema_02.dmp)。

注意:

需确保所有分片文件均存在于 data_pump_dir 目录。
若导出时未分片,直接指定文件名(如 dumpfile=full.dmp)。

已存在表时

table_exists_action=replace

作用:当目标表已存在时,替换其结构及数据。

替换行为:删除原表,重新创建并导入数据。

对比其他选项:

  • skip:跳过已存在的表(默认)。
  • append:追加数据到现有表。
  • truncate:清空表后导入数据。

风险:replace 会删除原表,导致依赖对象(如索引、触发器)失效。

建议:

  • 生产环境慎用,建议先备份。
  • 确保目标表无其他依赖或业务影响。

执行

expdp parfile=/home/oracle/imp_full.par

查看作业

set line 300 pages 100
col owner_name for a20
col job_name for a30
col state for a20
select owner_name,job_name,state from dba_datapump_jobs;


附加到作业

expdp system attach=xl_import_full

# 查看状态
status

expdp 参数详细说明

expdp -help

数据泵导出实用程序提供了一种用于在 oracle 数据库之间传输数据对象的机制。
该实用程序可以使用以下命令进行调用:

   示例: expdp scott/tiger directory=dmpdir dumpfile=scott.dmp

您可以控制导出的运行方式。具体方法是: 在 'expdp' 命令后输入
各种参数。要指定各参数, 请使用关键字:

   格式:  expdp keyword=value 或 keyword=(value1,value2,...,valuen)
   示例: expdp scott/tiger dumpfile=scott.dmp directory=dmpdir schemas=scott
               或 tables=(t1:p1,t1:p2), 如果 t1 是分区表

userid 必须是命令行中的第一个参数。

------------------------------------------------------------------------------

以下是可用关键字和它们的说明。方括号中列出的是默认值。

abort_step
在初始化作业后停止作业, 或者在指示的对象中停止作业。
有效值为 -1 或 n, 此处 n 为大于等于零的值。
n 对应于对象在主表中的进程顺序号。

access_method
指示导出操作使用特定方法来卸载数据。
有效的关键字值为: [automatic], direct_path 和 external_table。

attach
连接到现有作业。
例如, attach=job_name。

cluster
利用集群资源并将 worker 进程分布在 oracle rac 上 [yes]。

compression
减少转储文件大小。
有效的关键字值为: all, data_only, [metadata_only] 和 none。

compression_algorithm
指定应使用的压缩算法。
有效的关键字值为: [basic], low, medium 和 high。

content
指定要卸载的数据。
有效的关键字值为: [all], data_only 和 metadata_only。

data_options
数据层选项标记。
有效的关键字值为: xml_clobs。

directory
用于转储文件和日志文件的目录对象。

dumpfile
指定目标转储文件名的列表 [expdat.dmp]。
例如, dumpfile=scott1.dmp, scott2.dmp, dmpdir:scott3.dmp。

encryption
加密某个转储文件的一部分或全部。
有效的关键字值为: all, data_only, encrypted_columns_only, metadata_only 和 none。

encryption_algorithm
指定加密的方式。
有效的关键字值为: [aes128], aes192 和 aes256。

encryption_mode
生成加密密钥的方法。
有效的关键字值为: dual, password 和 [transparent]。

encryption_password
用于在转储文件中创建加密数据的口令密钥。

encryption_pwd_prompt
指定是否提示输入加密口令 [no]。
当标准输入为读取时, 将隐藏终端回送。

estimate
计算作业估计值。
有效的关键字值为: [blocks] 和 statistics。

estimate_only
计算作业估计值而不执行导出 [no]。

exclude
排除特定对象类型。
例如, exclude=schema:"='hr'"。

filesize
以字节为单位指定每个转储文件的大小。

flashback_scn
用于重置会话快照的 scn。

flashback_time
用于查找最接近的相应 scn 值的时间。

full
导出整个数据库 [no]。

help
显示帮助消息 [no]。

include
包括特定对象类型。
例如, include=table_data。

job_name
要创建的导出作业的名称。

keep_master
在成功完成导出作业后保留主表 [no]。

logfile
指定日志文件名 [export.log]。

logtime
指定要给在导出操作期间显示的消息加时间戳。
有效的关键字值为: all, [none], logfile 和 status。

metrics
将其他作业信息报告到导出日志文件 [no]。

network_link
源系统的远程数据库链接的名称。

nologfile
不写入日志文件 [no]。

parallel
更改当前作业的活动 worker 的数量。

parfile
指定参数文件名。

query
用于导出表的子集的谓词子句。
例如, query=employees:"where department_id > 10"。

remap_data
指定数据转换函数。
例如, remap_data=emp.empno:remappkg.empno。

reuse_dumpfiles
覆盖目标转储文件 (如果文件存在) [no]。

sample
要导出的数据的百分比。

schemas
要导出的方案的列表 [登录方案]。

service_name
约束 oracle rac 资源的活动服务名和关联资源组。

source_edition
用于提取元数据的版本。

status
监视作业状态的频率, 其中
默认值 [0] 表示只要有新状态可用, 就立即显示新状态。

tables
标识要导出的表的列表。
例如, tables=hr.employees,sh.sales:sales_1995。

tablespaces
标识要导出的表空间的列表。

transportable
指定是否可以使用可传输方法。
有效的关键字值为: always 和 [never]。

transport_full_check
验证所有表的存储段 [no]。

transport_tablespaces
要从中卸载元数据的表空间的列表。

version
要导出的对象版本。
有效的关键字值为: [compatible], latest 或任何有效的数据库版本。

views_as_tables
标识要作为表导出的一个或多个视图。
例如, views_as_tables=hr.emp_details_view。

------------------------------------------------------------------------------

下列命令在交互模式下有效。
注: 允许使用缩写。

add_file
将转储文件添加到转储文件集。

continue_client
返回到事件记录模式。如果处于空闲状态, 将重新启动作业。

exit_client
退出客户机会话并使作业保持运行状态。

filesize
用于后续 add_file 命令的默认文件大小 (字节)。

help
汇总交互命令。

kill_job
分离并删除作业。

parallel
更改当前作业的活动 worker 的数量。

reuse_dumpfiles
覆盖目标转储文件 (如果文件存在) [no]。

start_job
启动或恢复当前作业。
有效的关键字值为: skip_current。

status
监视作业状态的频率, 其中
默认值 [0] 表示只要有新状态可用, 就立即显示新状态。

stop_job
按顺序关闭作业执行并退出客户机。
有效的关键字值为: immediate。

stop_worker
停止挂起或粘滞的 worker。

trace
为当前作业设置跟踪/调试标记。

impdp 参数详细说明

1

数据泵导入实用程序提供了一种用于在 oracle 数据库之间传输数据对象的机制。
该实用程序可以使用以下命令进行调用:

     示例: impdp scott/tiger directory=dmpdir dumpfile=scott.dmp

您可以控制导入的运行方式。具体方法是: 在 'impdp' 命令后输入
各种参数。要指定各参数, 请使用关键字:

     格式:  impdp keyword=value 或 keyword=(value1,value2,...,valuen)
     示例: impdp scott/tiger directory=dmpdir dumpfile=scott.dmp

userid 必须是命令行中的第一个参数。

------------------------------------------------------------------------------

以下是可用关键字和它们的说明。方括号中列出的是默认值。

abort_step
在初始化作业后停止作业, 或者在指示的对象中停止作业。
有效值为 -1 或 n, 此处 n 为大于等于零的值。
n 对应于对象在主表中的进程顺序号。

access_method
指示导入操作使用特定方法来加载数据。
有效的关键字值为: [automatic], conventional, direct_path,
external_table, 和 insert_as_select。

attach
连接到现有作业。
例如, attach=job_name。

cluster
利用集群资源并将 worker 进程分布在 oracle rac 上 [yes]。

content
指定要加载的数据。
有效的关键字为: [all], data_only 和 metadata_only。

data_options
数据层选项标记。
有效的关键字为: disable_append_hint, skip_constraint_errors, reject_rows_with_repl_char 和 validate_table_data。

directory
用于转储文件, 日志文件和 sql 文件的目录对象。

dumpfile
要从中导入的转储文件的列表 [expdat.dmp]。
例如, dumpfile=scott1.dmp, scott2.dmp, dmpdir:scott3.dmp。

encryption_password
用于访问转储文件中的加密数据的口令密钥。
对于网络导入作业无效。

encryption_pwd_prompt
指定是否提示输入加密口令 [no]。
当标准输入为读取时, 将隐藏终端回送。

estimate
计算网络作业估计值。
有效的关键字为: [blocks] 和 statistics。

exclude
排除特定对象类型。
例如, exclude=schema:"='hr'"。

flashback_scn
用于重置会话快照的 scn。

flashback_time
用于查找最接近的相应 scn 值的时间。

full
导入源中的所有对象 [yes]。

help
显示帮助消息 [no]。

include
包括特定对象类型。
例如, include=table_data。

job_name
要创建的导入作业的名称。

keep_master
在成功完成导入作业后保留主表 [no]。

logfile
日志文件名 [import.log]。

logtime
指定要给在导入操作期间显示的消息加时间戳。
有效的关键字值为: all, [none], logfile 和 status。

master_only
只导入主表, 然后停止作业 [no]。

metrics
将其他作业信息报告到导入日志文件 [no]。

network_link
源系统的远程数据库链接的名称。

nologfile
不写入日志文件 [no]。

parallel
更改当前作业的活动 worker 的数量。

parfile
指定参数文件。

partition_options
指定应如何转换分区。
有效的关键字为: departition, merge 和 [none]。

query
用于导入表的子集的谓词子句。
例如, query=employees:"where department_id > 10"。

remap_data
指定数据转换函数。
例如, remap_data=emp.empno:remappkg.empno。

remap_datafile
在所有 ddl 语句中重新定义数据文件引用。

remap_schema
将一个方案中的对象加载到另一个方案。

remap_table
将表名重新映射到另一个表。
例如, remap_table=hr.employees:emps。

remap_tablespace
将表空间对象重新映射到另一个表空间。

reuse_datafiles
如果表空间已存在, 则将其初始化 [no]。

schemas
要导入的方案的列表。

service_name
约束 oracle rac 资源的活动服务名和关联资源组。

skip_unusable_indexes
跳过设置为“索引不可用”状态的索引。

source_edition
用于提取元数据的版本。

sqlfile
将所有的 sql ddl 写入指定的文件。

status
监视作业状态的频率, 其中
默认值 [0] 表示只要有新状态可用, 就立即显示新状态。

streams_configuration
启用流元数据的加载 [yes]。

table_exists_action
导入对象已存在时执行的操作。
有效的关键字为: append, replace, [skip] 和 truncate。

tables
标识要导入的表的列表。
例如, tables=hr.employees,sh.sales:sales_1995。

tablespaces
标识要导入的表空间的列表。

target_edition
用于加载元数据的版本。

transform
要应用于适用对象的元数据转换。
有效的关键字为: disable_archive_logging, inmemory, inmemory_clause,
lob_storage, oid, pctspace, segment_attributes, segment_creation,
storage, 和 table_compression_clause。

transportable
用于选择可传输数据移动的选项。
有效的关键字为: always 和 [never]。
仅在 network_link 模式导入操作中有效。

transport_datafiles
按可传输模式导入的数据文件的列表。

transport_full_check
验证所有表的存储段 [no]。
仅在 network_link 模式导入操作中有效。

transport_tablespaces
要从中加载元数据的表空间的列表。
仅在 network_link 模式导入操作中有效。

version
要导入的对象的版本。
有效的关键字为: [compatible], latest 或任何有效的数据库版本。
仅对 network_link 和 sqlfile 有效。

views_as_tables
标识要作为表导入的一个或多个视图。
例如, views_as_tables=hr.emp_details_view.
请注意, 在网络导入模式下, 可以将表名附加到
视图名。

------------------------------------------------------------------------------

下列命令在交互模式下有效。
注: 允许使用缩写。

continue_client
返回到事件记录模式。如果处于空闲状态, 将重新启动作业。

exit_client
退出客户机会话并使作业保持运行状态。

help
汇总交互命令。

kill_job
分离并删除作业。

parallel
更改当前作业的活动 worker 的数量。

start_job
启动或恢复当前作业。
有效的关键字为: skip_current。

status
监视作业状态的频率, 其中
默认值 [0] 表示只要有新状态可用, 就立即显示新状态。

stop_job
按顺序关闭作业执行并退出客户机。
有效的关键字为: immediate。

stop_worker
停止挂起或粘滞的 worker。

trace
为当前作业设置跟踪/调试标记。

以上就是基于oracle数据泵(expdp/impdp)的数据导入导出指南的详细内容,更多关于oracle数据泵数据导入导出的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com