linux系统通过docker安装oracle远程访问(附带相关问题解决方案)

文章目录

  • 一、虚拟机网络配置
  • 二、安装docker
  • 三、拉取oracle镜像并配置
  • 四、设置oracle支持外部连接访问(重难点)
  • 总结


一、虚拟机网络配置

---------虚拟机配置的方案 :
1.桥接模式(虚拟机和主机共用同一个网段,适用于固定网络的开发环境,否则若网络改动导致主机网段改变,则需要重新配置虚拟机网段)
虚拟机桥接模式配置方案
2.NAT模式(建议使用此方案,主机当做上层路由给虚拟机网络分发,无论主机网络IP怎么换,都不影响虚拟机网络访问)
1)虚拟机网络设置开启NAT模式。
2)虚拟机网络编辑器配置NAT子网IP,NAT设置子网网关,DHCP设置子网IP的起止区间。
3)虚拟机cd /etc/sysconfig/network-scripts/ 然后vi ifcfg-xxx文件。
4)编辑上一步的文件,设置BOOTPROTO=none,新增参数IPADDR=自定义(区间在DHCP设置的子网区间内),GATEWAY=自定义(取值步骤2中NAT设置的值)
5)进入虚拟机systemctl restart network.service重启网络

二、安装docker

1.下载docker并安装

curl -fsSL https://get.docker.com | bash -s docker --mirror aliyun
或者
curl -sSL https://get.daocloud.io/docker | sh

2.设置docker仓库,安装存储驱动程序需要的 device-mapper-persistent-data 和 lvm2软件包。(直接CV)

yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2
yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3.安装 Docker Engine-Community

yum install docker-ce docker-ce-cli containerd.io

4.配置国内镜像加速

镜像加速配置方案


三、拉取oracle镜像并配置

docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g

1.下载ing
下载中

下载镜像的坑:

  1. 拉取始终超时–vi /etc/resolv.conf 查看DNS域名解析是否正确,通用8.8.8.8,公司内网DNS(cmd:ipconfig /all)
    linux系统通过docker安装oracle远程访问(附带相关问题解决方案)_第1张图片
  2. /home文件夹容量一定要足够大,不然就会像我一样只给了1G拉完oracle镜像就报错容量不够结果扩容失败只能重装虚拟机

docker images 查看镜像

2.制作运行容器

docker run -d -p 1521:1521 --name oracle11g registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g

docker ps 查看容器
到这里oracle已经安装成功了,下面配置oracle相关参数

3.进入容器

docker exec -it -u root 《自己的容器ID或者名称》 bash

修改配置文件 vi /etc/profile
修改需要root权限,如果不是root进入容器则 su root 密码oracle切换为root用户
内部新增如下配置信息:

# oracle home目录
export ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_2   
# oracle 服务名或者 SID名,要记住这个名字helowin,它是naivcat登录的重要选项
export ORACLE_SID=helowin     
# oracle环境变量
export PATH=$ORACLE_HOME/bin:$PATH

linux系统通过docker安装oracle远程访问(附带相关问题解决方案)_第2张图片
刷新环境变量

source /etc/profile

4.测试登入oracle
切换oracle用户su - oracle注意“-”的前后都一定要有空格

sqlplus / as sysdba #进入oracle

5.修改oracle默认超级管理员用户的登录密码并设置永不过期

SQL> alter user system identified by oracle; #此处的oracle就是设置的登录密码
User altered.
SQL> ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
Profile altered.

到这一步,linux上的docker里的oracle就安装完毕了,如果只是通过linux内访问现在已经可以登入了,下面是重点配置使oracle支持外部连接访问


四、设置oracle支持外部连接访问(重难点)

首先当前的oracle运行情况是linux包裹docker容器包裹oracle数据库
1.一共需要配置两个文件,一个是监听器listener.ora一个是tnsnames.ora

find / | grep /network/admin #查找属于自己的oracle监听配置文件目录
vi listener.ora

2.修改listener.ora的监听地址HOST参数 注意那个监听地址:localhost只是一个代称,每个人自己具体的配置地址需要通过输入命令 hostname来获取并替换
在这里插入图片描述
具体参考:ORA-12541:TNS:无监听程序异常

# listener.ora Network Configuration File: /home/oracle/app/oracle/product/11.2.0/dbhome_2/network/admin/listener.ora
# Generated by Oracle configuration tools.

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))  # localhost:1521
    )
  )
ADR_BASE_LISTENER = /home/oracle/app/oracle

3.修改tnsnames.ora监听地址HOST参数同listener相同

# tnsnames.ora Network Configuration File: /home/oracle/app/oracle/product/11.2.0/dbhome_2/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

LISTENER_HELOWIN =
  (ADDRESS = (PROTOCOL = TCP)(HOST = loaclhost)(PORT = 1521))

HELOWIN =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = helowin)  
    )
  )

4.(重点)每次更改oracle的监听配置文件后都需要重新刷新配置90%的连接异常都是来源于监听配置问题

exit#退出容器
systemctl restart docker.service#重启服务
docker start 《自己的容器id/名》#重启容器
docker exec -it -u root 《自己的容器id/名称》 bash#重新进入容器
su - oracle#切换oracle账户
sqlplus / as sysdba #登入数据库
SQL>alter system register;#强制重新注册实例
SQL>quit#退出数据库
lsnrctl reload#在容器内重启监听
lsnrctl status#查看监听服务状态

4.navicat配置
主机ip填写linux的ip地址
服务名填写/etc/profile 里自己配置的SID名称helowin
密码填写之前自己改的oracle
linux系统通过docker安装oracle远程访问(附带相关问题解决方案)_第3张图片
问题1:navicat连接闪退
工具----选项----环境:不要用navicat自带的oci.dll ,自己去官网下载一个较高版本的instantclient要与docker里的oracle兼容
linux系统通过docker安装oracle远程访问(附带相关问题解决方案)_第4张图片
问题2:The listener supports no services
修改listener.ora添加如下:
oraclehome填自己之前在/etc/porfile 里配的

SID_LIST_LISTENER=
  (SID_LIST=
      (SID_DESC=
                      #BEQUEATH CONFIG
         (GLOBAL_DBNAME=helowin)
         (SID_NAME=helowin)
         (ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_2)
                      #PRESPAWN CONFIG
        (PRESPAWN_MAX=20)
        (PRESPAWN_LIST=
          (PRESPAWN_DESC=(PROTOCOL=tcp)(POOL_SIZE=2)(TIMEOUT=1))
        )
      )
  )

问题3:Instance “helowin”, status UNKNOWN
查看/etc/hosts文件里是否产生了相同ip冲突

问题4:Connect failed because target host or object does not exist
检查监听配置的HOST是否正确,我最开始host填写的虚拟机桥接分配的ip地址但是监听服务一直报未知地址,后来通过hostname命令得到hostname并填入后就解决了这个问题,当然navicat连接主机地址还是填虚拟机桥接分配的ip地址 ifconfig也可以查询出来自己的虚拟机ip地址

问题5:TNS-12547: TNS:lost contact
解决方案

总结

最终监听配置启动成功的界面(我这还有几个未知状态,不过没影响连接)
linux系统通过docker安装oracle远程访问(附带相关问题解决方案)_第5张图片
我一天时间下载安装,两天时间全在踩坑,要么忘了刷新以为配置错了无效,要么一直找不到监听器应该填的正确的HOST

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