macOS docker下impdb导入库

写在前面:首先我是一个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了,哈哈,开玩笑。胜利往往是给坚持到最后的人的!我自己写完这个,等会奖励自己吃顿猪脚饭······

你可能感兴趣的:(macOS docker下impdb导入库)