Docker安装Oracle 12c

 

DuebassLei 2020-03-26 15:54:49  4093  收藏 7  原力计划
分类专栏: Docker SQL 文章标签: docker 数据库
版权

Docker
同时被 2 个专栏收录
9 篇文章0 订阅
订阅专栏

SQL
4 篇文章0 订阅
订阅专栏
Oracle简介
Oracle 12c,全称Oracle Database 12c,是Oracle 11g的升级版,新增了很多新的特性

Docker下载oracle12c
查找oracle镜像
docker search oracle


下载Oracle镜像

我这里选择truevoly/oracle-12c镜像

docker pull truevoly/oracle-12c

查看已安装镜像


启动Oracle数据库
启动并暴露8080&1521端口,8080可以登录网页端管理,1521是数据连接端口:
docker run -d -p 8080:8080 -p 1521:1521 truevoly/oracle-12c

启动并暴露8080&1521端口,并且挂载宿主机目录 /var/oracle/data 到oracle服务器*/u01/app/oracle*目录,这样database数据就保存在本地宿主机上:
docker run -d -p 8080:8080 -p 1521:1521 -v /var/oracle/data:u01/app/oracle truevoly/oracle-12c

启动并定制化DBCA总内存大小,DBCA_TOTAL_MEMORY (in Mb):

查看日志
docker logs -f 84d8

进入oracle容器
进入镜像的bash对数据库进行进一步的操作

docker exec -it 84d8 /bin/bash
1
连接Oracle数据库
hostname: localhost #主机名
port: 1521 #端口号
sid: xe 
service name: xe #服务名
username: system #用户名
password: oracle #密码
1
2
3
4
5
6
使用navicat连接数据库


创建用户一般分四步:
第一步:创建临时表空间(可选)
第二步:创建数据表空间
第三步:创建用户并制定表空间
第四步:给用户授予权限
创建表空间
-- 创建表空间  `BKJ`
CREATE TABLESPACE BKJ 
    TEMPFILE '/u01/app/oracle/oradata/tablespace/BKJ.DBF' 
    SIZE 32M 
    AUTOEXTEND ON 
    NEXT 32 M MASIZE UNLIMITED 
    EXTENT MANAGEMENT LOCAL;
1
2
3
4
5
6
7
新建用户
-- 新建用户`TEST`并选择刚创建的表空间 `BKJ`
CREATE USER TEST  
    IDENTIFIED BY  123456          
        ACCOUNT UNLOCK          
        DEFAULT TABLESPACE BKJ;
1
2
3
4
5
赋予用户权限
-- connect,resource,dba权限赋予 test用户
GRANT CONNECT,RESOURCE,DBA TO TEST;

-- 多权限授权
GRANT CREATE USER,DROP USER,ALTER USER ,CREATE ANY VIEW ,
DROP ANY VIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,
DBA,CONNECT,RESOURCE,CREATE SESSION TO TEST;
1
2
3
4
5
6
7
新建用户成功啦>_<

Oracle导入dmp文件
# imp 命令导入

imp test/123456@localhost:1521/XE 
  file=/u01/app/oracle/test2020.dmp
  log=/u01/app/oracle/imp.log 
  fromuser=admin 
  touser=test 
  constraints=N ignore=y

# impdp命令导入
impdp test/123456@localhost/XE 
  DIRECTORY=DATA_PUMP_DIR 
  DUMPFILE=test2020.dmp
  REMAP_SCHEMA=admin:test 
  REMAP_TABLESPACE=ADMIN_BKJ:BKJ
# 说明:
#  remap_schema当你从A用户导出的数据,想要导入到B用户中去,就使用这个:
#    remap_schema=A:B


#  remap_tablespace 与上面类似,数据库对象本来存在于tbs_a表空间,现在你不想放那儿了,想换到tbs_b,就用这个
#    remap_tablespace=tbs_a:tbs_b 结果是所有tbs_a中的对象都会建在tbs_b表空间中。

#提示:这样做的前提是目标用户B和目标表空间都存在

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Oracle导出dmp文件
导出数据库dmp文件(备份/迁移)

# 进入容器
docker exec -it myoracle /bin/bash
# 导出test用户所有数据
exp test/123456@localhost/xe  file=test20200514.dmp full=y 
1
2
3
4
查看数据文件大小
select name, bytes/1024/1024 as M from v$datafile

 

Docker挂载宿主机目录出现Cannot create directory

  • docker
  • oracle

Docker挂载宿主机目录 /var/oracle/data 到oracle服务器*/u01/app/oracle*目录

宿主机目录不挂载到docker容器时,启动成功

docker run -d -p 8080:8080 -p 1521:1521 --name orac  truevoly/oracle-12c

Docker安装Oracle 12c_第1张图片

 
  1. 当将宿主机目录挂载到docker容器时,就会出现问题

  2. docker run --restart always -d -v /var/oracle/oracledata:/u01/app/oracle -p 8080:8080 -p 1521:1521 -u root --name oracle --privileged=true truevoly/oracle-12c

出现无法创建目录的报错

Cannot create directory "/u01/app/oracle/cfgtoollogs/dbca".

Docker安装Oracle 12c_第2张图片


参考网路上的办法,添加了-u root 和 --privileged=true,另外对文件夹也手动赋权过 ,结果依旧不行,求问有没有懂得人,指点一下。

回来填坑,在 启动前先执行

mkdir -p  /u01/app/oracle  && chmod 777 /u01/app/oracle
mkdir -p  /var/oracle/data  && chmod 777 /var/oracle/data

我试过自动创建目录,也试过手动建目录后面再给权限,结果都失败了,必须要在启动前先执行上面代码,有没有高手解释一下为什么?

  •  点赞
  • 写回答
  •  
  • 关注问题
  • 收藏
  • 分享

  •  
  • 邀请回答

2条回答默认最新

  • 05b6491b3e7163845cea14b3b5b548ca.png

    xyq632742 2020-10-09 11:08

    本地volume的权限需要开放,chmod -R a+w /var/oracle/oracledata

 

你可能感兴趣的:(java,docker)