写在前面
笔者只是一名后端程序员,并非专业的数据库管理员,说实在的,数据库的功力很是一般般,只是比较熟练平常程序中的增删改查之类的操作,其实 dmp 导入导出更多的使用场景是数据迁移和备份,只不过工作中恰巧碰到一次被领导要求进行导出导入的操作,因此学习了一下。
再次提醒,非专业人士,仅供参考,因涉及数据,请审慎地对待您对数据库执行的每一条命令!请在了解文中提到的命令的每一个参数含义后,再判断如何修改命令并执行!
一、详细知识点
1、dmp文件
dmp是"data pump"的缩写,它是oracle独有的一种数据导入导出文件格式。dmp文件是oracle数据库备份/还原的常用文件格式之一,是一种完整备份文件,可以记录oracle数据库的所有数据,包括表、视图、过程等等,保存为二进制格式的文件。dmp文件一般包含数据定义语言(ddl)和数据操作语言(dml)。具体来说,ddl是用来定义数据库对象,例如表、视图、用户等等;dml则是用来操作这些对象,例如插入、删除、更新数据等等。
2、导出dmp文件
2.1、exp和expdp区别
exp(export) 和 expdp(data pump export) 是oracle数据库提供的导出工具,用于将数据库对象和数据导出为dmp文件。它们之间的主要区别如下:
工作原理 | exp是使用传统的导出技术,而expdp是使用oracle data pump技术。data pump是oracle在10g版本中引入的高性能、可扩展的导入导出工具,即 oracle 10g 之前的版本不可以使用 expdp。 |
导出速度和效率 | 由于data pump使用了并行处理和更高级的压缩算法,相对于exp,expdp通常具有更快的导出速度和更高效的性能。 |
支持的导出对象 | exp支持导出整个数据库、模式(用户)和表级别的对象,而expdp支持更多的导出对象级别,包括表、模式、表空间、工作表、存储过程等。 |
导出选项和灵活性 | expdp提供了更多的选项和参数,允许更灵活地控制导出的内容,如选择特定的对象、数据过滤、并行度配置等。它还提供了更丰富的重定向和日志记录选项。 |
文件格式 | exp和expdp生成的dmp文件格式不同。虽然都是.dmp后缀,但exp生成的dmp文件格式只可通过imp进行导入,而expdp生成的dmp文件格式也只可通过impdp进行导入 。 |
总的来说,expdp相对于exp提供了更高级的功能和性能,尤其在大型数据库中进行导出操作时,更为推荐使用。它提供了更多的灵活性和性能优势,可以更精细地控制导出的内容和过程,但假如使用的数据库版本为10g之前的版本,则只能使用exp。
2.2、exp导出操作
要使用exp工具导出dmp文件,可以按照以下步骤进行操作:
1) 使用 oracle 用户登录服务器,打开命令行终端或命令提示符窗口。
2) 输入以下命令,以连接到oracle数据库实例:
sqlplus 用户名/密码@数据库实例
3) 输入以下命令,以创建一个目录对象,用于存储导出的dmp文件:
create directory 目录名称 as '目录路径';
当然也可以通过下面这条语句,查询现有的目录路径:
select * from all_directories;
4) 输入以下命令,以确保您具有导出数据的适当权限:
grant exp_full_database to 用户名;
5) 输入以下命令,以使用exp工具执行导出操作:
exp 用户名/密码@数据库实例 file=导出文件的文件名.dmp directory=目录名称
6) 当使用exp工具进行导出操作时,可以使用以下一些常用的参数来控制导出的方式和内容:
参数 | 使用说明 |
---|---|
user | 指定要导出的用户名。 |
tables | 指定要导出的表格。例如,tables=table1,table2。 |
file | 指定导出文件的路径和名称。例如,file=/path/to/export.dmp。 |
log | 指定导出过程的日志文件路径和名称。例如,log=/path/to/export.log。 |
query | 指定要导出数据的查询条件。例如,query=“where column_name=‘value’”。 |
rows | 指定要导出的行数限制。例如,rows=100。 |
statistics | 指定是否导出统计信息。可以是all、estimate或none。 |
grants | 指定是否导出对象的授权信息。可以是y、n或full。 |
consistent | 指定是否导出一致性视图。可以是y或n。 |
indexes | 指定是否导出索引。可以是y或n。 |
compress | 指定是否压缩导出文件。可以是y或n。 |
这些只是一些常用的参数示例,exp工具还支持其他更多的参数和选项,例如是否导出触发器、外键约束、序列等。可以使用exp help=y
命令来查看完整的参数列表和详细的帮助信息。
2.3、expdp导出操作
以下是使用expdp工具来导出dmp文件的一般步骤:
1) 使用 oracle 用户登录服务器,打开命令行终端或命令提示符窗口。
2) 输入以下命令,以连接到oracle数据库实例:
sqlplus 用户名/密码@数据库实例
3) 输入以下命令,创建一个目录对象用于存储导出的dmp文件:
create directory 目录名称 as '目录路径';
当然也可以通过下面这条语句,查询现有的目录路径:
select * from all_directories;
4) 输入以下命令,以确保您具有执行导出操作的适当权限:
grant export_full_database to 用户名;
5) 输入以下命令,使用expdp工具执行导出操作(此是导出全库,请根据自己的使用场景搭配不同的参数):
expdp 用户名/密码@数据库实例 directory=目录名称 dumpfile=导出文件名.dmp full=y
6) 使用expdp工具执行数据泵导出操作时,可以根据需要指定不同的参数来控制导出的方式和内容。以下是一些常用的expdp参数:
参数 | 使用说明 |
---|---|
schemas | 指定要导出的模式名。例如,schemas=schema1,schema2。 |
include | 指定要包括的对象类型。例如,include=table,view将只导出表和视图。 |
exclude | 指定要排除的对象类型。例如,exclude=index将排除索引的导出。 |
directory | 指定导出文件的目录对象。例如,directory=datapump_dir。 |
dumpfile | 指定导出文件的名称。例如,dumpfile=export.dmp。 |
logfile | 指定导出操作的日志文件名称。例如,logfile=export.log。 |
parallel | 指定并行导出的进程数。 |
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工具还支持其他更多的参数和选项,例如导出模式的映射、导出过程的过滤、导出数据的转换等。可以使用expdp help=y
命令来查看完整的参数列表和详细的帮助信息。
2.4、pl/sql使用客户端导出
2.4.1 特殊说明
需要在本地下载oracle完整版,只下载客户端可能没有exp.exe文件,且需要指出的是,使用 pl/sql直接导出,相当于在服务端使用 exp 导出。
笔者在使用plsql进行导出时,还出现了 pl/sql 比 oracle 版本过高,导致dos框一闪而过,且并没有生成导出文件,降低 pl/sql 版本后成功解决,但查询一番并未有 pl/sql 和 oracle 版本需要一致的官方说明。
2.4.2 操作指引
这里直接引用一篇博主的文章,该文章中有截图有步骤:。由于文章中是汉化版的,加一个英文版界面截图:
3、导入dmp文件
3.1、imp和impdp区别
imp(import)和impdp(data pump import)都是oracle数据库中用于导入dmp文件的工具,它们具有以下区别:
功能 | imp是oracle传统的导入工具,而impdp是更为强大和灵活的数据泵导入工具。impdp提供了比imp更多的选项和功能,可以更精确地控制导入过程。 |
导入方式 | imp使用单进程导入数据,而impdp使用多进程并行导入数据。因此,impdp通常比imp更快,特别是对于大型数据集导入。 |
平台和版本支持 | imp是基于oracle旧的导入工具,对于较新的oracle版本和平台可能支持有限。而impdp是oracle data pump的一部分,对于大多数oracle版本和平台都有良好的支持。 |
导入对象类型 | imp和impdp都可以导入数据库对象,如表、索引、视图等。然而,impdp还支持导入其他数据对象类型,如数据泵导出的导入导出任务、pl/sql程序包、触发器等。 |
导入选项 | imp和impdp具有不同的导入选项和参数。例如,impdp可以通过include和exclude参数来选择性地导入特定的对象,以及通过transform参数来修改导入对象的属性。 |
总的来说,如果使用的是较新的 oracle 版本,并且希望更高效、更灵活地控制导入过程,那么 impdp 是更推荐的导入工具。但是,如果正在使用较旧的 oracle 版本或需要进行简单的导入操作,那么只能使用 imp。
3.2、imp导入操作
要使用imp工具进行导入操作,可以按照以下步骤进行:
1) 打开命令行终端或命令提示符窗口。
2) 输入以下命令,以连接到您的oracle数据库实例:
sqlplus 用户名/密码@数据库实例
3) 输入以下命令,创建一个目录对象用于存储导入的dmp文件:
create directory 目录名称 as '目录路径';
当然也可以通过下面这条语句,查询现有的目录路径:
select * from all_directories;
4) 输入以下命令,以确保您具有执行导入操作的适当权限:
grant import_full_database to 用户名;
5) 输入以下命令,使用imp工具执行导入操作:
imp 用户名/密码@数据库实例 file=导入文件的路径.dmp fromuser=源用户名 touser=目标用户名
6) 在使用 imp 工具进行数据导入时,可以根据需要指定不同的参数来控制导入的方式和内容。以下是一些常用的 imp 参数:
参数 | 使用说明 |
---|---|
user | 指定要导入数据的用户名。 |
file | 指定要导入的文件路径和名称。例如,file=/path/to/import.dmp。 |
fromuser | 指定导入数据来自的用户名。 |
ignore | 指定是否忽略导入过程中遇到的错误。可以是y或n。 |
indexes | 指定是否导入索引。可以是y或n。 |
rows | 指定导入的行数限制。例如,rows=100。 |
data_only | 指定只导入数据,不包括对象定义。可以是y或n。 |
ignorecase | 指定导入时是否忽略大小写。可以是y或n。 |
full | 指定导入前先删除现有对象。可以是y或n。 |
log | 指定导入操作的日志文件路径和名称。例如,log=/path/to/import.log。 |
buffer | 指定读取导入文件时的缓冲区大小。 |
remap_schema | 指定要将导入的对象映射到的新模式名。 |
remap_tablespace | 指定要将导入的表空间映射到的新表空间名。 |
这些只是一些常用的参数示例,imp工具还支持其他更多的参数和选项,例如导入特定表、导入具有特定条件的数据、使用不同的字符集等。可以使用imp help=y
命令来查看完整的参数列表和详细的帮助信息。
3.3、impdp导入操作
要使用impdp工具进行导入操作,可以按照以下步骤进行:
1) 打开命令行终端或命令提示符窗口。
2) 输入以下命令,以连接到您的oracle数据库实例:
sqlplus 用户名/密码@数据库实例
3) 输入以下命令,创建一个目录对象用于导入的dmp文件:
create directory 目录名称 as '目录路径';
当然也可以通过下面这条语句,查询现有的目录路径:
select * from all_directories;
4) 输入以下命令,以确保您具有执行导入操作的适当权限:
grant import_full_database to 用户名;
5) 输入以下命令,使用impdp工具执行导入操作:
impdp 用户名/密码@数据库实例 directory=目录名称 dumpfile=导入文件的名称.dmp remap_schema=源用户名:目标用户名
6) impdp 工具提供了许多参数,用于控制导入过程中的行为和选项。以下是一些常用的 impdp 参数:
参数 | 使用说明 |
---|---|
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 | 指定导入时使用的查询条件。 |
这些只是一些常用的参数示例,impdp 工具还支持其他更多的参数和选项,例如处理数据冲突、启用并行导入、使用网络传输压缩等。可以使用 impdp help=y
命令来获取完整的参数列表和详细的帮助信息。
3.4、pl/sql使用客户端导入
3.4.1 特殊说明
需要在本地下载oracle完整版,只下载客户端可能没有exp.exe文件(笔者在使用plsql进行导出时,出现了 pl/sql 和 oracle 版本号不一样,导致频频失败,但查询一番并未有 pl/sql 和 oracle 版本需要一致的官方说明)
3.4.2 操作指引
这里直接引用一篇博主的文章,该文章中有截图有步骤:https://blog.csdn.net/qq_36292543/article/details/105193485。由于文章中是汉化版的,加一个英文版界面截图:
二、 具体示例
此示例中只是使用 impdp 导入的示例,也是笔者操作过的一个例子,imp 导入大体相当,至于导出,笔者只使用过用pl/sql导出,因其简单,不再赘述,后续也有可能会再补充不同场景的导入导出操作。
impdp导入dmp文件
1) 假设你不是数据库维护人员,你的领导直接给了你一份.dmp文件,让你导入到数据库中,你对从那个库中导出的,怎么导出的一无所知,这时候第一步,你最少要询问一下这是使用 exp 还是 expdp 导出的(示例是假设使用的expdp导出的数据),还有就是索要导出日志。导出日志中会显示导出的实例名、表名和数据行数;
2) 在 pl/sql 中执行 select * from all_directories;
查询已登记的目录,并通过xftp或者其他工具将 .dmp 文件上传到其中某一个目录,记下来上传目录对应的目录名称;
3) 使用 xshell 等工具连接要导入的数据库所在的服务器,使用 oracle 用户登录(或者登录root用户后,使用命令su - oracle
切换到oracle也一样);
4) 假如你使用 pl/sql 连接数据库时所填的信息和导出 .dmp 的文件是这样的:
5) 你可以参考如下这条命令修改自己的命令语句:
impdp 1111/2222@orcl remap_schema=mtm:1111 directory=data_pump_dir dumpfile=dmp_file.dmp logfile=implog.log transform=segment_attributes:n
即:
impdp username/password@数据库实例名 remap_schema=导入文件中的用户名:导入数据库中的用户名 directory=dmp文件所在目录 dumpfile=导入文件.dmp logfile=implog.log transform=segment_attributes:n
总结
到此这篇关于oracle导入导出dmp文件的文章就介绍到这了,更多相关oracle导入dmp文件内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论