侧边栏壁纸
博主头像
惬意小蜗牛博主等级

海内存知己,天涯若比邻!

  • 累计撰写 54 篇文章
  • 累计创建 143 个标签
  • 累计收到 59 条评论

目 录CONTENT

文章目录

docker 部署 Oracle 11G

惬意小蜗牛
2021-07-17 / 2 评论 / 3 点赞 / 2,893 阅读 / 1,013 字 / 正在检测是否收录...

1. 拉取镜像

  • 首先执行如下命令将镜像下载到本地(这个其实就是一个已经安装好 Oracle 数据库的镜像,我们运行后稍作配置就可以直接使用了):

    docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
    
  • 由于镜像比较大,执行如下命令删除所有 dangling 数据卷(即无用的 Volume),避免空间不足:

    docker volume rm $(docker volume ls -qf dangling=true)
    

2. 启动容器

  • 执行如下命令实例化 Oracle 服务:

    docker run --name oracle11g --restart=always --privileged=true \
    -p 1521:1521 \
    -v /home/oracle/conf/profile:/etc/profile \
    -d registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
    
  • 执行 docker ps 命令确认容器启动成功。
    file

3. 进行配置

  • 首先执行如下命令进入 oracle 的命令环境中:

    docker exec -it oracle11g bash
    
  • 接着执行如下命令切换到 oracle 数据库的 root 用户下(密码为:helowin)

    su root
    
  • 编辑 profile 文件:

    vi /etc/profile
    
  • 在末尾处添加如下 ORACLE 环境变量参数后保存退出:
    注意:作者原先制作这个镜像时,设置的数据库 SID 为 helowin,所以这里的 SID 不做修改(修改了也没用,因为要改变 SID 的话修改多处地方)。

    export ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_2
    export ORACLE_SID=helowin
    export PATH=$ORACLE_HOME/bin:$PATH
    
  • 接着执行如下命令创建软连接:

    ln -s $ORACLE_HOME/bin/sqlplus /usr/bin
    
  • 然后执行如下命令切换到 oracle 用户:
    注意:一定要写中间的那一横条(-)必须要,否则软连接无效。

    su - oracle
    
  • 接着依次执行如下命令登录 sqlplus:

    sqlplus /nolog
    conn /as sysdba
    

    file

如果是做了数据持久化则需要完成以下步骤
先完成挂载目录的授权 chmod 777 -R /home/oracle
在此步骤中完成 oracle 数据库的重启使权限生效

SQL>
SQL> shutdown immediate;
ORA-01507: database not mounted
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 1603411968 bytes
Fixed Size                  2213776 bytes
Variable Size             402655344 bytes
Database Buffers         1191182336 bytes
Redo Buffers                7360512 bytes
Database mounted.
Database opened.
SQL>
  • 执行如下命令将 system 和 sys 两个账户的密码设为 abc:

    alter user system identified by abc;
    alter user sys identified by abc;
    ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
    
  • 我们还可以执行如下命令解锁 scott 用户,同时将其密码设置为 abc:
    SCOTT 是 ORACLE 内部的一个示例用户,下面有 emp、dept 等实例表,这些表和表间的关系演示了关系型数据库的一些基本原理。

    alter user scott account unlock;
    alter user scott identified by abc;
    commit;
    
  • 配置完毕后,连续执行多个 exit 即可退出容器,返回到宿主机。

4. 连接测试

我们使用客户端工具连接下这个 Oracle 数据库(其中 SID 为 helowin),可以发现连接成功:
file

5. 数据持久化

- 创建持久化挂载目录
mkdir -p /home/oracle/{oradata,flash_recovery_area,conf}
mkdir -p /home/oracle/conf/security
cd /home/oracle/conf/
vi profile  //什么都不用改直接保存退出
cd /home/oracle/conf/security
vi limits.conf  //什么都不用改直接保存退出

- 将需要持久化的目录或文件,拷贝出来以供挂载
docker cp oracle11g:/home/oracle/app/oracle/oradata/helowin /home/oracle/oradata
docker cp oracle11g:/home/oracle/app/oracle/flash_recovery_area/helowin/ /home/oracle/flash_recovery_area
docker cp oracle11g:/etc/security/limits.conf /home/oracle/conf/security/limits.conf

- 停止并删除原有 oracle 容器
docker stop oracle11g && docker rm oracle11g

- 重新 run 一个新的 oracle 容器并将第二步拷贝出来的目录及文件挂载到容器卷
docker run --name oracle11g --restart=always --privileged=true \
-p 1521:1521 \
-v /home/oracle/oradata/:/home/oracle/app/oracle/oradata/ \
-v /home/oracle/flash_recovery_area/helowin/:/home/oracle/app/oracle/flash_recovery_area/helowin/ \
-v /home/oracle/conf/profile:/etc/profile \
-v /home/oracle/conf/security/limits.conf:/etc/security/limits.conf \
-d registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g

- 容器启动成功后, 给挂载目录授权
chmod 777 -R /home/oracle

- 如果出现 Permission denied 问题, 进入容器后,重新执行 [3, 4] 两部
3

评论区