文章目录
- 前言
- 一、什么是dmp?
- 二、imp/impdp、exp/expdp对比及示例
- 1.区别
- 2.imp/impdp对比及示例
- a. imp
- b. impbp
- 3.exp/expdp对比及示例
- a. exp
- b.expdp
- 3.其他事项
- 三、执行导入导出前置条件
- 1.创建角色并授权
- 2.创建目录映射
前言
在工作中,经常会遇到需要备份库,库表迁移的场景,对于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 命令查询相关参数
- imp常用参数说明,可以根据需要指定不同的参数来控制导入的方式和内容。
参数 | 使用说明 |
---|---|
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 命令查询相关参数
- impbp常用参数说明,可以根据需要指定不同的参数来控制导入的方式和内容。
参数 | 使用说明 |
---|---|
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
参数说明:
- user/password@SID 用户名/用户密码@数据库实例;
- directory=dmpdata 导入的目录,DMPDATA为数据库虚拟路径(
参考目录三中的目录映射
),即导入dmpdata下的文件也就是’/data/u01/dmpdata/'; - dumpfile=filename.dmp 导入的文件名,结合上面的 directory=dmpdata 就将’/data/u01/dmpdata/filename.dmp’;导入目标服务器(需要注意大小写);
- remap_tablespace=um_dev:um----->um_dev:导出表空间 ,um:导入表空间;
- remap_schema=u_um_dev:u_um ----> 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 命令查询相关参数
- imp常用参数说明,可以根据需要指定不同的参数来控制导入的方式和内容。
参数 | 使用说明 |
---|---|
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 命令查询相关参数
- imp常用参数说明,可以根据需要指定不同的参数来控制导入的方式和内容。
参数 | 使用说明 |
---|---|
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.其他事项
- 在执行导入导出时需要进入oracle去执行。
--linux
su oracle ;--到这就可执行导入导出
sqlplus / as sysdba;
--windows:
win + r,cmd,enter; --到这可执行导入导出
sqlplus 用户名/口令@数据库名 as sysdba;
- 在执行导入、导出的命令时,可通过nohup来执行,nohup是一个在Unix和类Unix操作系统上用来忽略HUP(挂起)信号并运行命令的实用程序。通过使用nohup,您可以使命令在后台运行,即使当前Shell终端窗口关闭,也能继续运行。
- 使用exp 导出文件需要使用imp导入,数据泵类型需要一致。
- 用
EXCLUDE、INCLUDE
时,对应的符号需要进行转译
;
三、执行导入导出前置条件
如果数据库用户已经存在,并有相关目录跳过此步骤。
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下自行创建文件,记下目录
- 文件夹创建后给oracle用户授权
chown -R oracle /data/u01/dmpdata
- 数据库里执行SQL创建导入/导出目录(目录映射)
--目录对象在数据库中注册,并映射到实际物理目录的路径。
create or replace directory DMPDATA as '/data/u01/dmpdata';
- 为建立的目录赋权限,须要以其余用户运行,建议在sys用户下执行
grant read,write on directory DMPDATA to {#用户名};