美文网首页
macOS docker下impdb导入库

macOS docker下impdb导入库

作者: 翟书东 | 来源:发表于2020-01-20 11:54 被阅读0次

    写在前面:首先我是一个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导入库

          本文链接:https://www.haomeiwen.com/subject/dakjzctx.html