文章目录
写在前面
笔者只是一名后端程序员,并非专业的数据库管理员,说实在的,数据库的功力很是一般般,只是比较熟练平常程序中的增删改查之类的操作,其实 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 操作指引
这里直接引用一篇博主的文章,该文章中有截图有步骤:https://blog.csdn.net/qq_36292543/article/details/105193485。由于文章中是汉化版的,加一个英文版界面截图:
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