写在前面:首先我是一个macOS小白,而且刚接触docker。总体来说,导入的过程遇见非常多的问题,记下来,供我以后慢慢回忆········
1.将dmp文件拷贝到容器里,oracle的某个位置
上网上看了一下,都说是 容器id:/home/oracle/,于是我就按照人家说的,直接执行拷贝:
docker cp /Users/zhaisd/pojo/deploy/mmall.dmp a42d9c17e90d:/home/oracle/
2.建用户表空间
ok,复制完成后,执行建表空间,再建用户:
建表空间:
create tablespace xxxxx
logging
datafile ‘\usr\oracle\oracledata\xxxxx.dbf‘
size 200m
autoextend on
next 32m
extent management local;
建用户:
create user xxxxx identified by xxxxx default tablespace xxxxx Temporary TABLESPACE Temp;
赋予dba权限
grant connect,resource,dba to xxxxx;
commit;
3.执行impdb
impdp \‘/ as sysdba\‘ dumpfile=xxxx.dmp logfile=import_xxxx_20200120.log schemas=用户名
报错了,发现本找不到我复制进容器的dmp文件,好在他有提示给我路径
我想,这才是我真正要复制进去的路径,于是重新执行了一下复制语句:
docker cp /Users/zhaisd/pojo/deploy/mmall.dmp a42d9c17e90d:/u01/app/oracle/admin/XE/dpdump
好了,删除原来的dmp(因为我电脑是128g的硬盘,要省着点用),重新执行impdb,发现很多都是报ora-02372和ora-02374,查了一下,有可能是dmp本身的字符集和我安装的oracle的字符集不相同,导致的。问题知道了,就解决一下。
4.解决字符集问题
网上搜了一下,看到一篇有相同经历的文章:
https://blog.csdn.net/u014710633/article/details/89418744
介绍的很详细。就按照他的步骤试一下:
进入docker容器:docker exec it oracle bash
进入sqlplus:sqlplus system/oracle
执行:shutdown immediate;
这里就报错了:
ora-01031,没有权限,蒙圈··········
又上网搜了一下,发现有各种方法,比如改什么配置之类的···我在中间找了一个比较简单点的,他说是我进入的方法不对,需要这样进入sqlplus:
root@oracle:/# su - oracle
oracle@oracle:~$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.2.0 Production on Mon Jan 20 02:59:08 2020
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>
报错没了,有权限了,于是按照上面那篇介绍执行了一遍:
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 ZHS16GBK;
SQL> shutdown immediate;
SQL> startup
SQL> select userenv(‘language‘) from dual;
USERENV(‘LANGUAGE‘)
----------------------------------------------------
SIMPLIFIED CHINESE_CHINA.ZHS16GBK
————————————————
原文链接:https://blog.csdn.net/u014710633/article/details/89418744
字符集终于可以了!
5.重新导入
删除刚刚导入失败的oracle用户重新建,再导入。然而,事情不会按照我的设想进行,总想给我使绊。都到这里了,我能放弃吗(其实我真的不想弄了)?删除用户的时候,又报错说资源占用,我很明白,很有可能是刚刚第一次报错的时候,我直接强制关掉的原因,这个问题之前我用windows的时候也遇见过,解决方法很粗暴:重启oracle。当然,我这里是在docker里面,就方便很多,直接:
docker stop oracle;
docker start oracle;
搞定!
在次执行:
docker exec -it oracle bash;
su - oracle;
impdp \‘/ as sysdba\‘ dumpfile=xxxx.dmp logfile=import_xxxx_20200120.log schemas=用户名
大功告成:
写在最后:这件事情告诉我,以后不要搞什么docker了,哈哈,开玩笑。胜利往往是给坚持到最后的人的!我自己写完这个,等会奖励自己吃顿猪脚饭······