Oracle 数据泵(expdp/impdp)是从 Oracle 10G 开始推出的新功能,作为 exp/imp 的替代方案,明显更新、更快和更灵活。在日常工作中,数据泵通常可用于数据迁移、同步工具初始化(ogg/dsg/shareplex)、数据备份等等。
视频点我跳转 ,直接观看视频教程!
📢 本文用到的所有安装介质和 PDF 版都会打包上传到百度网盘供大家下载,前提是大家先订阅本专栏,然后添加我的微信:
Lucifer-4622
。
资料点我跳转,关注我的公众号,回复:100天实战,即可领取课程全套资料包!
数据泵作为 Oracle 数据库的主要功能,每个版本都在迭代更新,功能和参数越来越多。不同于原始的 exp/imp工具,数据泵需要在服务器端运行,使用服务器进程创建 Job 来执行导出导入任务。
参考官方文档:Parameters Available in Data Pump Export Command-Line Mode
## expdp 语法格式
expdp KEYWORD=value or KEYWORD=(value1,value2,...,valueN)
## 最简单示例
expdp scott/tiger DIRECTORY=dmpdir DUMPFILE=scott.dmp
## attach(连接到作业,进入交互模式)
attach=[schema_name.]job_name
## cluster(RAC 导出需要设置为 no,否则将会报ORA-31693等错误,原因是其他节点对导出目录无权限)
cluster=[yes|no]
## compression(压缩)
compression=[all|data_only|metadata_only|none]
## content(需要导出的数据)
content=[all|data_only|metadata_only]
## directory(导出路径)
directory=directory_object
## dumpfile(导出的文件名)
dumpfile=[directory_object:]file_name[,...]
## exclude/include(排除/包括特定的对象类型)
exclude=object_type[:name_clause][,...]
include=object_type[:name_clause][,...]
## filesize(导出每个 dump 文件的最大限制)
filesize=integer[b|kb|mb|gb|tb]
## full(导出所有数据和元数据,要执行完全导出,需要具有datapump_exp_full_database角色)
full=[yes|no]
## logfile(导出的日志文件名)
logfile=[directory_object:]file_name
## network_link(连接到源数据库进行导出)
network_link=source_database_link
## parallel(并行度,默认为1,该值应小于等于 dump 文件数量)
parallel=integer
## parfile(导出参数文件名称)
parfile=[directory_path]file_name
## query(按查询条件导出)
query=[schema.][table_name:] query_clause
## schemas(导出用户)
schemas=schema_name[,...]
## tables(导出表)
tables=[schema_name.]table_name[:partition_name][,...]
## views_as_tables(将视图导出成表)
views_as_tables=[schema_name.]view_name.
## impdp 语法格式
impdp KEYWORD=value or KEYWORD=(value1,value2,...,valueN)
## 最简单示例
impdp scott/tiger DIRECTORY=dmpdir DUMPFILE=scott.dmp
## attach(连接到作业,进入交互模式)
attach=[schema_name.]job_name
## cluster(RAC 导入需要设置为 no,否则将会报ORA-31693等错误,原因是其他节点对导出目录无权限)
cluster=[yes|no]
## content(需要导入的数据)
content=[all|data_only|metadata_only]
## directory(导入路径)
directory=directory_object
## dumpfile(导入的文件名)
dumpfile=[directory_object:]file_name[,...]
## exclude/include(排除/包括特定的对象类型)
exclude=object_type[:name_clause][,...]
include=object_type[:name_clause][,...]
## full(导入所有数据和元数据,要执行完全导入,需要具有datapump_exp_full_database角色)
full=[yes|no]
## logfile(导入的日志文件名)
logfile=[directory_object:]file_name
## network_link(连接到源数据库进行导入)
network_link=source_database_link
## parallel(并行度,默认为1,该值应小于等于 dump 文件数量)
parallel=integer
## parfile(导入参数文件名称)
parfile=[directory_path]file_name
## query(按查询条件导入)
query=[schema.][table_name:] query_clause
## remap_schema(允许导入期间重命名schema名)
remap_schema=source_schema:target_schema
## remap_table(允许导入期间重命名表名)
remap_table=[schema.]old_tablename[.partition]:new_tablename
## remap_tablespace(允许导入期间重命名表空间名)
remap_tablespace=source_tablespace:target_tablespace
## schemas(导入用户)
schemas=schema_name[,...]
## table_exists_action(导入数据处理方式)
table_exists_action=[SKIP | APPEND | TRUNCATE | REPLACE]
## tables(导入表)
tables=[schema_name.]table_name[:partition_name][,...]
## views_as_tables(将视图导入成表)
views_as_tables=[schema_name.]view_name.
下面我们以 scott
用户为例,如果没有 scott 用户,可以执行以下命令创建:
sqlplus / as sysdba @?/rdbms/admin/utlsampl.sql
## 导出一张表
expdp system/oracle directory=DATA_PUMP_DIR dumpfile=expdp.dmp logfile=expdp.log tables=scott.emp
## 导出多张表
expdp system/oracle directory=DATA_PUMP_DIR dumpfile=expdp.dmp logfile=expdp.log tables=\(scott.emp,scott.dept\)
## 导出一个用户(导出这个用户的所有对象)
expdp system/oracle directory=DATA_PUMP_DIR dumpfile=expdp.dmp logfile=expdp.log schemas=scott
## 导出多个用户
expdp system/oracle directory=DATA_PUMP_DIR dumpfile=expdp.dmp logfile=expdp.log schemas=\(scott,hr\)
## 导出整个数据库(sys、ordsys、mdsys的用户数据不会被导出)
expdp system/oracle directory=DATA_PUMP_DIR dumpfile=expdp.dmp logfile=expdp.log full=yes
## 并行导出
expdp system/oracle directory=DATA_PUMP_DIR dumpfile=expdp%U.dmp logfile=expdp.log schemas=scott parallel=5
## 导出用户元数据(包含表定义、存储过程、函数等等)
expdp system/oracle directory=DATA_PUMP_DIR dumpfile=expdp.dmp logfile=expdp.log schemas=scott content=metadata_only
## 导出用户存储过程
expdp system/oracle directory=DATA_PUMP_DIR dumpfile=expdp.dmp logfile=expdp.log schemas=scott include=procedure
## 导出用户函数和视图
expdp system/oracle directory=DATA_PUMP_DIR dumpfile=expdp.dmp logfile=expdp.log schemas=scott include=\(function,view\)
## 导出一个用户,但不包括索引
expdp system/oracle directory=DATA_PUMP_DIR dumpfile=expdp.dmp logfile=expdp.log schemas=scott exclude=index
## 导入dmp文件中的所有数据
impdp system/oracle directory=DATA_PUMP_DIR dumpfile=expdp.dmp logfile=impdp.log full=yes
## 导入一张表
impdp system/oracle directory=DATA_PUMP_DIR dumpfile=expdp.dmp logfile=impdp.log tables=scott.emp
## 导入多张表
impdp system/oracle directory=DATA_PUMP_DIR dumpfile=expdp.dmp logfile=impdp.log tables=\(scott.emp,scott.dept\)
## 导入一个用户
impdp system/oracle directory=DATA_PUMP_DIR dumpfile=expdp.dmp logfile=impdp.log schemas=scott
## 导入多个用户
impdp system/oracle directory=DATA_PUMP_DIR dumpfile=expdp.dmp logfile=impdp.log schemas=\(scott,hr\)
## 并行导入
impdp system/oracle directory=DATA_PUMP_DIR dumpfile=expdp%U.dmp logfile=impdp.log parallel=5
## 导入元数据(包含表定义、存储过程、函数等等)
impdp system/oracle directory=DATA_PUMP_DIR dumpfile=expdp.dmp logfile=impdp.log content=metadata_only
## 导入存储过程
impdp system/oracle directory=DATA_PUMP_DIR dumpfile=expdp.dmp logfile=impdp.log include=procedure
## 导入函数和视图
impdp system/oracle directory=DATA_PUMP_DIR dumpfile=expdp.dmp logfile=impdp.log include=\(function,view\)
## 导入数据,但不包括索引
impdp system/oracle directory=DATA_PUMP_DIR dumpfile=expdp.dmp logfile=impdp.log exclude=index
## 重命名表名导入
impdp system/oracle directory=DATA_PUMP_DIR dumpfile=expdp.dmp logfile=impdp.log remap_table=scott.emp:emp1
## 重命名schema名导入
impdp system/oracle directory=DATA_PUMP_DIR dumpfile=expdp.dmp logfile=impdp.log remap_schema=scott:tim
## 重命名表空间名导入
impdp system/oracle directory=DATA_PUMP_DIR dumpfile=expdp.dmp logfile=impdp.log remap_tablespace=users:apptbs
## 导入时,忽略所有对象的段属性,这样导入时对象都创建在目标数据库用户默认的表空间上
impdp system/oracle directory=DATA_PUMP_DIR dumpfile=expdp.dmp logfile=impdp.log transform=segment_attributes:n
## 将dmp文件的ddl语句导入到一个文件,不导入数据库
impdp system/oracle directory=DATA_PUMP_DIR dumpfile=expdp.dmp logfile=impdp.log sqlfile=import.sql
数据泵相比 exp/imp 参数和功能均改变很多,可以通过执行 expdp help=y
和 impdp help=y
来查看!
可参考官方文档:Oracle Data Pump
如此保姆级的教程文章如果还不会的话,那就再给大家来一个视频教程吧!觉得不错的点个关注,三连投币一波!
创作不易,还请多多支持,点点订阅,鼓励一下博主!
附:返回总目录的传送门如下