首页 > 技术文章 > Oracle dmp文件 exp导出,imp导入

liwei1994 2020-04-13 17:31 原文

  公司有一台需要更换的Oralce服务器,需要把里面的数据导出,但是因为是内网所以没法用pl/sql连接,所以就尝试用Oracle自带的exp在服务器端导出dmp文件,然后在外网使用Docker 拉取Oracle镜像,用imp命令导入。

  准备工作:

  1、在内网将使用exp导出的dmp文件复制到外网机器Docker启动的Oracle容器内

   这里需要用到的命令就是宿主文件复制到容器内

   

#查询Oracle容器名称
[root@liwei ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9c0373c27212 registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g "/bin/sh -c '/home/o…" About an hour ago Up About an hour 0.0.0.0:1521->1521/tcp oracle11g #将宿主文件复制到容器内
[root@liwei ~]
# docker cp /home/platform.dmp oracle11g:/home/

 

  2、准备一台外网机器,并安装Docker

  3、使用doker拉取Oracle镜像(Docker 拉取 oracle 11g镜像配置)

  步骤:

  1、将dmp文件使用SecureFX工具上传至外网机器

  2、在外网机器进入Docker 按照上面的播客创建的oracle容器,输入下面的命令;

--使用imp命令导入dmp文件
imp USERID=/用户名/密码 FILE=dmp文件位置 
imp USERID=test/test FILE=/home/platform.dmp IGNORE=Y FULL=Y;
--这个时候提示

import done in US7ASCII character set and AL16UTF16 NCHAR character set
import server uses AL32UTF8 character set (possible charset conversion)
export client uses ZHS16GBK character set (possible charset conversion)
IMP-00031: Must specify FULL=Y or provide FROMUSER/TOUSER or TABLES arguments
IMP-00000: Import terminated unsuccessfully

上面错误是因为客户端和服务器端的Oracle字符集不一样,这个时候就要将客户端的字符集改成与服务器一致,下面是修改Oracle字符集的步骤,按照下面的步骤即可设置成功(不要在线上Oracle执行这些命令,他会关闭数据库再重启)

sqlplus /nolog

SQL> conn /as sysdba;

SQL>select userenv('language') from dual;

SQL>SHUTDOWN IMMEDIATE

SQL>STARTUP MOUNT

SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;

SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;

SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;

SQL>ALTER DATABASE OPEN;

SQL>ALTER DATABASE CHARACTER SET INTERNAL_USE AL32UTF8;

SQL>SHUTDOWN IMMEDIATE;

SQL>STARTUP;

SQL>select userenv('language') from dual;

--然后再执行上面的导入命令

. . importing table "T_USER_GROUP" 2 rows imported
. . importing table "T_USER_PRVG" 455 rows imported
About to enable constraints...
Import terminated successfully with warnings.

到这个时候就导入成功了

 

推荐阅读