一、什么是dmp文件
在oracle中,dmp文件是数据库导出的文件,常用于数据库的备份和迁移。一般会用exp命令来导出,用imp命令来导入也就是恢复数据库。
二、dmp文件导入
常用于数据库迁移使用,当需要额外部署新的服务器时,需要将提前备份好的dmp文件导入到新的环境中。
创建用户
在导入之前,我们需要新建一个用户,用于存放我们的dmp数据
-
登录到linux服务器 切换oracle用户
su - oracle
-
登录到oracle数据库
sqlplus / as sysdba --以操作系统权限认证的oracle sys管理员登陆
-
切换到数据库存储端(pdb)
alter session set container=idms alter session 切换容器
-
创建数据库用户
create user <username> identified by <password> default tablespace <tablespace_name> -- 默认表空间 temporary tablespace temp -- 临时表空间 create user ecdsprodtest0412 identified by ecdsprodtest0412 default tablespace ITREASURY temporary tablespace temp;
-
用户授权
授予角色语法: grant <object/system privilege> to <role name>; CONNECT 角色,--拥有Connect权限的用户只可以登录ORACLE(仅具有创建SESSION的权限),不可以创建实体,不可以创建数据库结构。 RESOURCE 角色,--是授予开发人员的。拥有Resource权限的用户只可以创建实体,不可以创建数据库结构。 DBA角色,--是授予数据库维护人员的。拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构。 grant connect,resource,dba to ecdsprodtest0412;
-
创建dmp文件存储目录并赋权
新建directory的语法 CREATE [OR REPLACE] DIRECTORY directory directoryName AS 'pathname'; create or replace directory dmpdir as '/oradata'; grant read ,write on directory dmpdir to ecdsprodtest0412;
-
切换root用户,赋予读写权限
mkdir /oradata chmod -R 777 /oradata
导入dmp文件
-
将dmp文件上传到/oradata目录下 切换到oracle用户 执行导入dmp命令
impdp ecdsprodtest0412/ecdsprodtest0412 directory=dmpdir dumpfile=hbisdp_230411.dmp remap_schema=hbisdp:ecdsprodtest0412 logfile=20230412.log; directory --此路径可以理解为实际绝对路径在oracle数据库里的别名,是导入文件的存储位置 DUMPFILE --此参数为需要导入的dmp文件名 REMAP_SCHEMA --当把用户A的对象导入到用户B时,使用此参数 REMAP_TABLESPACE --用于进行数据的表空间迁移。把前一个表空间中的对象导入到冒号后面的表空间 LOGFILE --指定导入日志名称
至此导入dmp文件完成
三、导入报错处理
需删除当前创建的用户,重新执行上面的导入步骤
删除用户命令
drop user ECDSPRODTEST0412 cascade; 表示删除用户ECDSPRODTEST0412,同时删除 ECDSPRODTEST0412 用户下的所有数据对象,如 table, view 等 cascade 介绍与用法 ( oracle) 级联删除,比如你删除某个表的时候后面加这个关键字,会在删除这个表的同时删除和该表有关系的其他对象
此时可能会出现这个问题,解决方案:
1)查看用户的连接状况
SELECT SID,SERIAL# FROM V$SESSION WHERE USERNAME='ECDSPRODTEST0412';
如果报错
则查询所有的oracle用户,找到要删除的用户对应的名字
select * from all_users;
再次执行
SELECT SID,SERIAL# FROM V$SESSION WHERE USERNAME='ECDSPRODTEST0412';
2)删除用户所有连接的session
alter system kill session '213,4036';
最后再次删除用户
drop user ECDSPRODTEST0412 cascade;