it编程 > 数据库 > Oracle

Oracle导入导出dmp文件的方法对比及示例

113人参与 2025-01-15 Oracle

前言

在工作中,经常会遇到需要备份库,库表迁移的场景,对于oracle会使用dmp文件进行数据迁移和备份。基于一次迁移数据库的经历,整理记录dmp相关知识点,供后续工作参考使用。

一、什么是dmp?

● dmp是"data pump"的缩写,它是oracle独有的一种数据导入导出文件格式。.dmp文件是一种数据库导出文件的扩展名,通常用于存储数据库中的表、数据、视图等对象的结构和内容。是一种特定数据库系统的二进制信息,因此不能直接用文本编辑器打开。

●.dmp文件一般包含数据定义语言(ddl)和数据操作语言(dml)。具体来说,ddl是用来定义数据库对象,例如表、视图、用户等等;dml则是用来操作这些对象,例如插入、删除、更新数据等。常用来进行数据库迁移或者备份操作。

●其他数据库也有类似备份文件,比如mysql数据库使用.sql文件或者.dump文件来表示数据库导出文件,而sql server数据库使用.bak文件来表示备份文件。

二、imp/impdp、exp/expdp对比及示例

imp/exp(oracle导入导出实用程序)是使用传统的导出技术,而impdp/expdp(数据泵导入实用程序)是使用oracle data pump技术。data pump是oracle在10g版本中引入的高性能、可扩展的导入导出工具,即 oracle 10g 之前的版本不可以使用 impdp/expdp。

1.区别

●imp和exp是传统的导入和导出工具,而impdp和expdp是数据泵工具,采用了新的架构和方法。

●imp和exp是基于基于二进制文件的,而impdp和expdp则是使用数据泵作业来执行数据移动操作,可以提供更高的性能和扩展性。

●imp和exp不支持在分布式环境中执行,而impdp和expdp可以在分布式环境中执行。

●数据泵通常指的是一种高性能的数据导入和导出工具,用于在数据库系统中进行快速的数据迁移和加载操作。数据泵工具能够提供比传统的导入导出工具更快速、更灵活的数据传输方式,通常支持并行处理、大容量数据传输和高性能加载等特点。

2.imp/impdp对比及示例

a. imp

可通过 imp help=y 命令查询相关参数

参数使用说明
touser指定要导入数据的用户名。
fromuser指定导入数据来自的用户名。
file指定要导入的文件路径和名称。例如,file=/path/to/import.dmp。
ignore指定是否忽略导入过程中遇到的错误。可以是y或n。
indexes指定是否导入索引。可以是y或n。
rows控制是否导入表中的行数据。可以是y或n。
data_only指定只导入数据,不包括对象定义。可以是y或n。
ignorecase指定导入时是否忽略大小写。可以是y或n。
full指定导入前先删除现有对象。可以是y或n。
log指定导入操作的日志文件路径和名称。例如,log=/path/to/import.log。
buffer指定读取导入文件时的缓冲区大小。
remap_schema指定要将导入的对象映射到的新模式名。
remap_tablespace指定要将导入的表空间映射到的新表空间名。
tables指定要导入的特定表。举例:imp scott/tiger ignore=y tables=(emp,dept) full=n(or tables=(t1:p1,t1:p2) 表分区可用)
imp 用户名/密码@数据库实例 file=导入文件的路径.dmp fromuser=源用户名 touser=目标用户名
--windows环境下
imp username/password@servicename:1521 file=e:\temp.dmp rows=y
log=e:/test/dmp/kf_workflow_0512.log full = y;
-linux环境路径进行替换

b. impbp

可通过 impbp help=y 命令查询相关参数

参数使用说明
attach指定是否附加到正在运行的 impdp 作业。
directory指定导入和导出文件所在的目录对象。
dumpfile指定要导入的数据泵文件名。
remap_datafile指定要将源数据文件映射到的目标数据文件。
remap_schema指定要将源模式映射到的目标模式。
remap_tablespace指定要将源表空间映射到的目标表空间。
table_exists_action对于已存在的表,指定要采取的操作(skip、append、truncate、replace)。
transform指定要应用的数据转换选项。
content指定要导入的对象类型(all、data_only、metadata_only)。
parallel指定并行执行导入作业的程度。
logfile指定导入操作的日志文件名。
include/exclude指定要导入或排除的对象。
query指定导入时使用的查询条件。for example, query=employees:“where department_id > 10”.
--命令参考
impdp 用户名/密码@数据库实例 directory=目录名称 dumpfile=导入文件的名称.dmp remap_schema=源用户名:目标用户名
--举例
impdp user/password@sid directory=dmpdata dumpfile=filename.dmp remap_tablespace=um_dev:um remap_schema=u_um_dev:u_um

参数说明:

impdp kf_gs_workflow_0604/a@gfmisdev directory='dump_dir' dumpfile='gsu_workflow_20240604.dmp' logfile='gsu_workflow_20240604.log' remap_schema=gsu_workflow:kf_gs_workflow_0604 remap_tablespace=grp:users

3.exp/expdp对比及示例

a. exp

可通过 exp help=y 命令查询相关参数

参数使用说明
tables指定要导出的表格。例如,tables=table1,table2。
file指定导出文件的路径和名称。例如,file=/path/to/export.dmp。
log指定导出过程的日志文件路径和名称。例如,log=/path/to/export.log。
query指定要导出数据的查询条件。例如,query=“ select * from table where column_name=‘value’”。
rows控制是否导入表中的行数据。可以是y或n。
statistics指定是否导出统计信息。可以是all、estimate或none。
grants指定是否导出对象的授权信息。可以是y、n或full。
consistent指定是否导出一致性视图。可以是y或n。
indexes指定是否导出索引。可以是y或n。
compress指定是否压缩导出文件。可以是y或n。
exp username/password@[database] file=[导出文件路径] tables=[要导出的表名]
--完全导出:
exp user/password@sid file=e:/test/dmp/kf_workflow_0512.dmp full=y

--导出a、b表
exp user/password@sid file= e:/test/dmp/kf_workflow_0512.dmp tables=(a,b)

b.expdp

可通过 expdp help=y 命令查询相关参数

参数使用说明
schemas指定要导出的模式名。例如,schemas=schema1,schema2。
include指定要包括的对象类型。例如,include=table,view将只导出表和视图。
exclude指定要排除的对象类型。例如,exclude=index将排除索引的导出。
directory指定导出文件的目录对象。例如,directory=datapump_dir。
dumpfile指定导出文件的名称。例如,dumpfile=export.dmp。
logfile指定导出操作的日志文件名称。例如,logfile=export.log。
parallel指定并行导出的进程数。
directory指定导出文件的目录对象。例如,directory=datapump_dir。
compression指定导出文件是否压缩。可以是all、data_only、metadata_only或none。
content指定导出内容。可以是all、data_only、metadata_only或metadata_only_excluding_data。
query指定导出的数据查询条件。例如,query=“where column_name=‘value’”。
filesize指定导出文件的最大文件大小。
job_name指定导出作业的名称。
version给定系统版本号的对象。例如,version=scn,scn为版本号。
expdp 用户名/密码@数据库实例 directory=目录名称 dumpfile=导出文件名.dmp   exclude=table:"in ('table1','table2')"  include=table:"in ('employees', 'departments')"   full=y
--按用户导
expdp user/password@sid schemas=u_mom_um dumpfile=expdp.dmp directory=dmp logfile=expdlog.log;

--按表名导
expdp user/password@sid tables=test1,test2 dumpfile=expdp.dmp directory=dmp logfile=expdlog.log;

--按查询条件导
expdp user/password@sid directory=dmp dumpfile=expdp.dmp tables=test query='where id<20' logfile=expdlog.log;

--按表空间导
expdp user/password@sid directory=dmp dumpfile=expdp.dmp tablespaces={#表空间1},{#表空间2} logfile=expdlog.log;

--导整个库
expdp user/password@sid directory=dmp dumpfile=expdp.dmp full=y logfile=expdlog.log;
--按照表空间导
expdp user/password@sid directory=dmpdata dumpfile=tbs2022.dmp tablespaces=tbs  logfile=expdlog.log;

--用exclude、include时,对应的符号需要进行转译
expdp gsu_element/yth2023 schemas=gsu_element dumpfile=gsu_element_20240604.dmp exclude=table:\"in\(\'gfm_tb_result\',\'gap_payee_account\'\)\" directory=gszx logfile=gsu_element_20240604.log

3.其他事项

--linux 
su oracle ;--到这就可执行导入导出
sqlplus / as sysdba;

--windows: 
win + r,cmd,enter; --到这可执行导入导出
sqlplus 用户名/口令@数据库名 as sysdba;

三、执行导入导出前置条件

如果数据库用户已经存在,并有相关目录跳过此步骤。

1.创建角色并授权

--创建角色
create user orcl identified by orclorcl;

--授权
grant dba ,connect ,resource ,select any table,create view to orcl;

--查看用户创建情况
select * from all_users;

2.创建目录映射

 create directory my_dir as '/path/to/directory';
select * from dba_directories;
--linux
mkdir /data/u01/dmpdata

--windows下自行创建文件,记下目录
chown -r oracle /data/u01/dmpdata
--目录对象在数据库中注册,并映射到实际物理目录的路径。
create or replace directory dmpdata as '/data/u01/dmpdata';
grant read,write on directory dmpdata to {#用户名};

总结 

到此这篇关于oracle导入导出dmp文件的方法对比及示例的文章就介绍到这了,更多相关oracle导入导出dmp文件内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

expdp与impdp导出导入特定表方式

01-15

Oracle批量投入数据方法总结

01-15

oracle中exists和not exists用法举例详解

01-14

Oracle的to_date()函数详解

01-13

oracle大数据删除插入方式

01-13

Nginx中proxy_pass使用小结

01-11

猜你喜欢

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

发表评论