Oracle数据库dmp数据文件导入查漏

Oracle数据库使用数据泵导入dmp数据文件

​ 在使用Oracle数据库进行数据库备份的还原,或者迁移数据到新的库中时,都会使用数据泵功能来导出导入dmp数据文件完成。这里大概记录下操作的主要流程及相关注意细节问题以作备忘。

目的是要将线上生产环境的数据库数据整体迁移到公司本地环境中,本地是在服务器上利用docker部署的oracle容器服务。将具体迁移的过程分为三个步骤:

  • 将dmp文件传输到容器部署的宿主机上;
  • 将宿主机上的文件传输到oracle容器中的目录中;
  • 在oracle容器中导入dmp数据文件;

第一步、将dmp文件传输到容器部署的宿主机上

​ 利用xftp等工具或者rz -bye命令上传本地的dmp文件

第二步、将宿主机上的文件传输到oracle容器中的目录下

​ 由于我这里Oracle是通过docker镜像启动的,所以要先将文件先传输到容器中,再在容器中执行数据泵的操作命令。

#登录到容器的bash界面,其中[container-name]容器名称也可使用容器ID,利用docker ps命令查到;使用root用户登录进去具有最高权限,可以进行文件夹的授权更改等操作(*后面有使用到)
#登录到docker容器中,以root用户登录
sudo docker exec -it -u root [container-name] bash
#登录到docker容器中,以默认用户登录
docker exec -it [container-name] bash

#从宿主机向容器中拷贝文件
docker cp you_dmp_file.dmp [container-name]:/usr/oracle/dump/dir
#从容器向宿主机中拷贝文件
docker cp [container-name]:/usr/oracle/dump/dir/copy_file /home/data/dest_file

​ 在执行数据泵导入命令之前,需要在oracle控制界面创建目录和授权限,授权后的目录dump_dir即为我们最终使用的dmp文件来源路径。

SQL> create or replace directory DUMP_DIR as '/usr/oracle/dump/dir';

#这里的[user]即Oracle中的目标用户
SQL> grant read,write on directory DUMP_DIR to [user] ;

#用户及表空间的创建
#创建临时表空间
SQL> create temporary tablespace user_temp tempfile '\usr\oracle\oracledata\user_temp.dbf' size 50m autoextend on next 50m maxsize 2048m extent management local; 
#创建表空间
SQL> create tablespace user_data logging datafile '\usr\oracle\oracledata\user_data.dbf' size 50m autoextend on next 50m maxsize 2048m extent management local;
#创建用户并分配表空间
SQL> create user [user] identified by [password] default tablespace user_data temporary tablespace user_temp;
#重命名表空间
SQL> alter tablespace user_data rename to new_user_data; 
#修改用户表空间
SQL> alter user user default tablespace other_data temporary tablespace other_temp;

#Oracle登录、用户创建及授权
SQL> sqlplus sys/[sysPassword]@[instance];
SQL> create user [user] identified by [password];
SQL> grant connect,resource,dba to [user];

​ 当然这里碰到一个问题,因为执行数据泵时需要使用对文件及目录具备Oracle用户操作权限,而我从宿主机往容器中传入文件的权限是root,所以需要对相关操作的目录修改属主和属组。

chown -R oracle:oinstall /usr/oracle/dump/dir

第三步、在oracle容器中导入dmp数据文件

impdp system/Oracle123@orclpdb directory=DUMP_DIR dumpfile=xxxxx.dmp remap_schema=abc:abc+ TRANSFORM=segment_attributes:n
impdp命令的几个相关参数的使用说明: 

directory: 用来注明所使用的的dmp文件所在目录,必须经过oracle创建和授权操作的。

dumpfile: dmp文件名,目录下可能存在多个dmp数据文件,需要指明文件名。

remap_schema:该参数用于当dmp文件中的用户名和目标用户名不一致的情况,abc:abc+  冒号左侧是导入文件中使用的用户名,右侧是目标的用户名。

table_exists_action:注明当导入已存在的表时的操作,取值效果如下 

​		skip:若存在表则跳过

​		append:追加数据到表中

​		replace:替换表

​		truncate:截断表,并覆盖新数据

remap_tablespace=source_tablespace:target_tablespace:指定导入时更改表空间

TRANSFORM=segmen_attributes:n: 用于不确定源表空间的情况下,会直接导入到用户默认表空间

参考文档: 《docker安装oracle11g并且导入dmp文件》

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值