docker-compose部署oracle11

本文详细介绍了如何使用Docker拉取Oracle镜像,创建并配置容器,以及如何在容器中创建新的Oracle实例,包括设置环境变量、数据文件、监听和实例初始化。
摘要由CSDN通过智能技术生成

第一部分: 创建Oracle镜像和容器 

1. 拉取oracle镜像:  docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
   文件较大 大概7G 请耐心等待 下载成功之后 执行 docker images -a 查看镜像是否拉取成功
   
2. 创建并启动oracle11g容器 先后运行下面2个命令
   docker run -d -p 1521:1521 --name oracle11g registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
   docker start oracle11g
   结束后 执行docker ps -a 查看容器是否启动
   
3. 容器配置
   (1) 进入容器 docker exec -it oracle11g bash
   (2) 切换到root用户s
       su root 密码为:helowin  (这是因为拉取下来的oracle镜像 默认带了一个叫helowin的实例)
   (3) 编辑profile文件配置ORACLE环境变量
       vi /etc/profile
       在文件最后追加以下三行配置
       export ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_2
       export ORACLE_SID=helowin
       export PATH=$ORACLE_HOME/bin:$PATH
       按ESC键 然后输入:wq! 然后按ENTER键保存并退出vi编辑器
       让配置生效:运行 source /etc/profile
   (4) 创建软连接 ln -s $ORACLE_HOME/bin/sqlplus /usr/bin
   (5) 切换到oracle用户 su - oracle
   (6) 登录sqlplus并修改sys、system用户密码:
        sqlplus /nolog
        conn /as sysdba
        alter user system identified by 123456;
        alter user sys identified by 123456;
        ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
        
4. 交给docker-compose管理: 在根目录下新建oracle11目录 并在里面新建datahe和etc目录 全部赋予chmod 777 权限
   回到根目录  执行 docker cp oracle11g:/etc/profile ./oracle11/etc 将容器内的profile文件复制到宿主机用于挂载
   将下面配置追加到docker-compose.yml
   oracle_11g:
    image: registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
    container_name: oracle11g
    environment:
      - TZ=Asia/Shanghai
      - ORACLE_HOME=${ORACLE_HOME}
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ./oracle11/data/oracle:/data/oracle
      - ./oracle11/etc/profile:/etc/profile
    ports:
      - 1521:1521
    privileged: true
    user: root
    restart: always
    command: /bin/bash -c "ln -s $ORACLE_HOME/bin/sqlplus /usr/bin"
    deploy:
      resources:
        limits:
          memory: 2G
        reservations:
          memory: 500M
    networks:
      application:
        aliases:
          - net-oracle_11g

        
5. 注意: 从docker run直接启动的容器 不能直接交给docker-compose继续关闭或启动 会冲突
         如果已经用docker启动了容器 需要先用 docker rm 删除 然后再用 docker-compose up -d 命令统一启动
         docker-compose会首先检查容器是否存在 存在就直接启动 不存在先创建容器再启动
        
6. 尝试用客户端工具连接helowin实例 用户名sys 密码是(6)步修改的密码 以sysdba方式登录


第二部分: 创建新的oracle实例

1. 执行docker exec -it oracle11g bash命令进入oracle容器

2. cd $ORACLE_BASE/admin 进入admin目录 然后用下面命令创建自己实例对应的各个目录
    mkdir order
    cd order
    mkdir dpdump adump pfile
    cd $ORACLE_BASE/oradata
    mkdir order
    cd $ORACLE_BASE/flash_recovery_area
    mkdir order

3. 将下面命令的order改成自己的实例名 并运行 (运行之前检查当前用户 如果是root 需要先切换到oracle  su - oracle)
   dbca -silent -createDatabase -templateName $ORACLE_HOME/assistants/dbca/templates/General_Purpose.dbc -gdbName order -sid order -characterSet ZHS16GBK -sysPassword 123456 -systemPassword 123456 -responseFile NO_VALUE -datafileDestination /home/oracle/app/oracle/oradata/order
   如果很快就结束 说明执行失败 需要把容器删除 重新启动再执行 正常会不同的出现百分比 要一会才会成功

3. 执行cd $ORACLE_HOME/dbs命令进入dbs文件夹 复制一份自己实例的ora文件 文件名为init实例名.ora
   cp inithelowin.ora initorder.ora

4. 执行vi initorder.ora 打开ora文件 如下 将其中的order部分全部改成自己的实例名

order.__db_cache_size=1191182336
order.__java_pool_size=16777216
order.__large_pool_size=16777216
order.__oracle_base='/home/oracle/app/oracle'#ORACLE_BASE set from environment
order.__pga_aggregate_target=1744830464
order.__sga_target=1610612736
order.__shared_io_pool_size=0
order.__shared_pool_size=369098752
order.__streams_pool_size=0
*.audit_file_dest='/home/oracle/app/oracle/admin/order/adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='/home/oracle/app/oracle/oradata/order/control01.ctl','/home/oracle/app/oracle/flash_recovery_area/order/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='order'
*.db_recovery_file_dest='/home/oracle/app/oracle/flash_recovery_area'
*.db_recovery_file_dest_size=4070572032
*.diagnostic_dest='/home/oracle/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orderXDB)'
*.local_listener='LISTENER_ORDER'
*.open_cursors=300
*.pga_aggregate_target=1741684736
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=1610612736
*.undo_tablespace='UNDOTBS1'
    
5. cd $ORACLE_BASE/product/11.2.0/dbhome_2/network/admin 进入admin目录 打开tnsnames.ora文件 新建自己实例对应的监听和节点
   有可能在步骤3执行之后已经追加 检查一下即可
   
6. 执行cd $ORACLE_HOME/dbs命令进入dbs文件夹 执行vi createdb.sql创建一个sql文件 内容如下(order改成自己的实例名)
   注意不要在nodepad下编辑 可以拷到plsql里再拷贝出来 文件创建成功后 执行chmod 777 createdb.sql 给文件授权可执行

CREATE DATABASE order
MAXINSTANCES 8
MAXLOGHISTORY 1
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
DATAFILE '/home/oracle/app/oracle/oradata/order/system01.dbf' size 100m reuse autoextend on next 1m maxsize unlimited extent management local
sysaux datafile '/home/oracle/app/oracle/oradata/order/sysaux01.dbf' size 100m reuse autoextend on next 1m maxsize unlimited
default temporary tablespace TEMP tempfile '/home/oracle/app/oracle/oradata/order/temp01.dbf' size 20m reuse autoextend on next 640k maxsize unlimited
undo tablespace UNDOTBS1 datafile '/home/oracle/app/oracle/oradata/order/undo01.dbf' size 20m reuse autoextend on next 5M maxsize unlimited
logfile
GROUP 1 ('/home/oracle/app/oracle/oradata/order/redo1.dbf') size 10m,
GROUP 2 ('/home/oracle/app/oracle/oradata/order/redo2.dbf') size 10m,
GROUP 3 ('/home/oracle/app/oracle/oradata/order/redo3.dbf') size 10m
CHARACTER SET ZHS16GBK
NATIONAL CHARACTER SET AL16UTF16;

7. 执行export ORACLE_SID=order将当前实例设成自己的实例 然后执行sqlplus /nolog  conn /as sysdba以管理身份进入sqlplus
   可以执行下面语句查看当前实例名字和状态
   select instance_number, instance_name, status, database_status from v$instance;

8. 在sqlplus下 前后执行下面4条SQL:
    @/home/oracle/app/oracle/product/11.2.0/dbhome_2/dbs/createdb.sql; (数据库有可能在执行步骤3的dbca命令之后已经创建 如果提示是数据库已经open 则略过此步)
    @/home/oracle/app/oracle/product/11.2.0/dbhome_2/rdbms/admin/catalog.sql;
    @/home/oracle/app/oracle/product/11.2.0/dbhome_2/rdbms/admin/catproc.sql;
    @/home/oracle/app/oracle/product/11.2.0/dbhome_2/sqlplus/admin/pupbld.sql;

9. 退出sqlplus 先后运行lsnrctl stop和lsnrctl start重启监听

10. 再进入sqlplus 先后运行shutdown immediate;和startup; 如果实例出现mouted opened状态 说明实例启动成功

11. sqlplus下创建用户并授权:
    create user order_admin identified by order_admin_12344321;
    grant connect,resource,dba to order_admin; 
    
注意: 重启系统或者docker之后或者重启oracle容器之后 oracle各个实例没有重启
      此时应进入各个实例 运行startup重新启动 最后再退出sqlplus执行lsnrctl stop和lsnrctl start重启监听
 

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值