引言
数据泵(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 参数详细说明

数据泵导入实用程序提供了一种用于在 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数据泵数据导入导出的资料请关注代码网其它相关文章!
发表评论