当前位置:   article > 正文

Docker安装配置启动Oracle11g容器解决ORA-12541:TNS: 无监听程序连接第三方客户端_docker启动oracle

docker启动oracle

[其他文章顶部留存,本文直接点击目录中‘一、下载与启动’开始阅读]

[2023-10-26 13:15:50]
虚拟机里安装ubuntu-23.04-beta-desktop-amd64开启SSH(换源和备份)配置中文以及中文输入法等
虚拟机VMware Workstation Pro安装配置使用服务器系统ubuntu-22.04.3-live-server-amd64.iso

Windows下安装可参考我这篇:win11&win7下安装oracle11g数据库全过程

一、下载与启动

前提:需要安装配置好docker(设置镜像源配置阿里云加速)等,可参考我这篇 基于CentOS7安装配置docker与docker-compose

Docker容器相关操作可参考我这篇Docker容器基本操作之启动-停止-重启

//查看docker启动状态,若为active(running)则已经启动。
systemctl status docker

//执行start命令启动docker
systemctl start docker
  • 1
  • 2
  • 3
  • 4
  • 5

1.1 下载Oracle11g镜像

由于官方镜像所在https://hub.docker.com/ 无法打开,所以使用阿里镜像下载Oracle11g的镜像。
oracle11g是该oracle11g镜像的Names。

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

在这里插入图片描述
注意:镜像比较大,将近7个G。

//查看下载好的镜像
docker images
  • 1
  • 2

在这里插入图片描述

1.2 启动容器

//默认启动容器的方式(第一次推荐这种)
docker run -d -it -p 1521:1521 --name oracle11g --restart=always registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g


//持久化启动的方式
docker run -d -it -p 1521:1521 --name oracle --restart=always --mount source=oracle_vol,target=/home/oracle/app/oracle/oradata registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

这里我们采用默认启动容器的方式,下次可以直接使用docker start 命令启动该容器
在这里插入图片描述

//docker start 容器名(Names)或完整的容器ID(CONTAINER ID)或容器ID(CONTAINER ID)的前4位
//620b是djc-RabbitMQ容器ID(CONTAINER ID)的前4位
//执行完命令,再执行docker ps(查看当前启动的容器)查看是否启动成功。
docker start djc-RabbitMQ
docker start 620bd670d79b
docker start 620b
或
docker start -i 以交互模式启动
docker start -t 以附加进程模式启动
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

在这里插入图片描述

//查看所有容器(包含已经启动和未启动的容器)
//此处第一个就是我们刚刚启动的oracle11g,oracle11g是该oracle11g镜像的Names。
docke ps -a
  • 1
  • 2
  • 3

在这里插入图片描述

//查看启动的线程
netstat -tulnp 或者 netstat -lntup 

//查看启动的线程中是否有名称中带有docker的
netstat -lntup | grep docker  
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述

1.3 配置容器环境变量

//1-进入容器
docker exec -it oracle11g bash

//2-切换到 root 用户 su root,该Oracle11g的容器密码默认为helowin。
su root

//3-配置环境变量
将环境变量配置在 /home/oracle/.bashrc 中,这样无需再去执行创建软链接的命令 ln -s $ORACLE_HOME/bin/sqlplus /usr/bin


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

在这里插入图片描述

//4-执行 vi /home/oracle/.bashrc ,按i或insert键编辑.bashrc文件,在文件最后加入下列内容
//编辑好
export ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_2
export ORACLE_SID=helowin
export PATH=$ORACLE_HOME/bin:$PATH

编辑好,按ECS退出i(insert)模式,:wq保存并退出。  

//5-刷新环境变量,使之生效。
source /home/oracle/.bashrc 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

在这里插入图片描述
在这里插入图片描述

//6-查看编辑完成的.bashrc文件
cat .bashrc
  • 1
  • 2

在这里插入图片描述

二、登录

2.1 配置防火墙

防火墙要允许 1521 端口,外部的数据库管理工具才能连的上
# 打开防火墙
systemctl start firewalld

# 查询端口状态
firewall-cmd --query-port=1521/tcp

# 永久性开放端口
firewall-cmd --permanent --zone=public --add-port=1521/tcp

# 重启防火墙
firewall-cmd --reload
firewall-cmd --query-port=1521/tcp
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

在这里插入图片描述

或者

//直接关闭防火墙 
systecmctl stop firewalld

//开机禁用防火墙
systecmctl disable firewalld
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述

2.2 命令

备注:这篇文章里也使用到了setenforce 0解决因为修改SELINUX配置文件出错导致Faild to load SELinux poilcy无法进入CentOS7系统的问题

//1-解决sqlplus /nolog 的 Permission denied 问题 【进入oracle容器之前执行】
setenforce 0

//2-进入容器
docker exec -it oracle11g bash


//3-将当前用户切换到Oracle
//如果直接以root用户执行下一步sqlplus /nolog,会报错Permission denied
su - oracle


//4-进入Oracle命令行
//如果直接以root用户执行sqlplus /nolog,会报错Permission denied
sqlplus /nolog




//5-使用 “操作系统认证” 的方式
//如果这里直接以默认的root用户登录,会报登录失败ORA-12456:TNS:permission denied
//这里会报Connected to an idle instance,表示需要使用startup命令启动数据库
conn / as sysdba



//6-启动数据库  后续补充
startup;

//7-select instance_name
select instance_name from v$instance;

//8-show user
show user;
  • 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
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

2.3 为什么要切换到oracle用户

4-进入Oracle命令行-如果直接以root用户执行sqlplus /nolog,会报错Permission denied

在这里插入图片描述

5-使用 “操作系统认证” 的方式-如果这里直接以默认的root用户登录,会报登录失败ORA-12456:TNS:permission denied
在这里插入图片描述
su - oracle
在这里插入图片描述
在这里插入图片描述

2.4 登录全过程截图

在这里插入图片描述

三、连接第三方客户端Navicat Premium 16

3.1 ORA-12541:TNS: 无监听程序

 ORA-12541:TNS: 无监听程序
  • 1

在这里插入图片描述

原因:lsnrctl 没有启动,导致监听器没有启动。
  • 1
//查看正在运行的容器
docker ps

//1-解决sqlplus /nolog 的 Permission denied 问题 【进入oracle容器之前执行】
setenforce 0

//2-进入容器
docker exec -it oracle11g bash

//3-将当前用户切换到Oracle 【如果已经是oracle用户,就无需切换】
//如果直接以root用户执行下一步sqlplus /nolog,会报错Permission denied
su - oracle



//查看lsnrctl 状态
lsnrctl status

//reload
lsnrctl reload

//启动lsnrctl,启动监听器。【此时STATUS of the LISTENER显示The listener supports no services】
lsnrctl start

//启动lsnrctl,启动监听器后,再次查看lsnrctl 状态
//【此时STATUS of the LISTENER会多一个Services Summary...,其中会显示Instance "helowin", status READY, has 1 handler(s) for this service...】
lsnrctl status


--------------------------
//关闭lsnrctl,关闭监听器
lsnrctl stop
  • 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
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

在这里插入图片描述
在这里插入图片描述
启动lsnrctl,启动监听器
在这里插入图片描述
启动监听器后,再次查看lsnrctl 状态
在这里插入图片描述

3.1 命令与截图补充

步骤一:先执行2.2 命令中的命令来启动Oracle数据库helowin实例;

步骤二:再执行3.1 ORA-12541:TNS: 无监听程序 中的命令来启动监听器;

启动监听器实际完整过程命令如下(2023-10-12 23:46:14 补充)

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE                                                  COMMAND                  CREATED        STATUS             PORTS                                       NAMES
4f130183e7c4   registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g   "/bin/sh -c '/home/o…"   2 months ago   Up About an hour   0.0.0.0:1521->1521/tcp, :::1521->1521/tcp   oracle11g
[root@localhost ~]# setenforce 0
[root@localhost ~]# docker exec -it oracle11g bash
[oracle@4f130183e7c4 /]$ lsnrctl status

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 12-OCT-2023 23:10:46

Copyright (c) 1991, 2009, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
TNS-12541: TNS:no listener
 TNS-12560: TNS:protocol adapter error
  TNS-00511: No listener
   Linux Error: 111: Connection refused
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=)(PORT=1521)))
TNS-12541: TNS:no listener
 TNS-12560: TNS:protocol adapter error
  TNS-00511: No listener
   Linux Error: 111: Connection refused
[oracle@4f130183e7c4 /]$ lsnrctl reload

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 12-OCT-2023 23:10:57

Copyright (c) 1991, 2009, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
TNS-12541: TNS:no listener
 TNS-12560: TNS:protocol adapter error
  TNS-00511: No listener
   Linux Error: 111: Connection refused
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=)(PORT=1521)))
TNS-12541: TNS:no listener
 TNS-12560: TNS:protocol adapter error
  TNS-00511: No listener
   Linux Error: 111: Connection refused
[oracle@4f130183e7c4 /]$ lsnrctl start

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 12-OCT-2023 23:11:09

Copyright (c) 1991, 2009, Oracle.  All rights reserved.

Starting /home/oracle/app/oracle/product/11.2.0/dbhome_2/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 11.2.0.1.0 - Production
System parameter file is /home/oracle/app/oracle/product/11.2.0/dbhome_2/network/admin/listener.ora
Log messages written to /home/oracle/app/oracle/diag/tnslsnr/4f130183e7c4/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=4f130183e7c4)(PORT=1521)))

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date                12-OCT-2023 23:11:11
Uptime                    0 days 0 hr. 0 min. 0 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /home/oracle/app/oracle/product/11.2.0/dbhome_2/network/admin/listener.ora
Listener Log File         /home/oracle/app/oracle/diag/tnslsnr/4f130183e7c4/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=4f130183e7c4)(PORT=1521)))
The listener supports no services
The command completed successfully
[oracle@4f130183e7c4 /]$ lsnrctl status

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 12-OCT-2023 23:17:22

Copyright (c) 1991, 2009, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date                12-OCT-2023 23:11:11
Uptime                    0 days 0 hr. 6 min. 11 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /home/oracle/app/oracle/product/11.2.0/dbhome_2/network/admin/listener.ora
Listener Log File         /home/oracle/app/oracle/diag/tnslsnr/4f130183e7c4/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=4f130183e7c4)(PORT=1521)))
Services Summary...
Service "helowin" has 1 instance(s).
  Instance "helowin", status READY, has 1 handler(s) for this service...
Service "helowinXDB" has 1 instance(s).
  Instance "helowin", status READY, has 1 handler(s) for this service...
The command completed successfully
[oracle@4f130183e7c4 /]$ 
  • 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
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96

启动监听器完整过程命令截图如下(2023-10-12 23:51:11补充)`:
在这里插入图片描述
在这里插入图片描述

3.2 再次连接Navicat Premium 16

system的密码默认是是helowin:
在这里插入图片描述

在这里插入图片描述

3.3 测试SELECT * FROM EMP

在这里插入图片描述

3.5 连接第三方客户端Navicat Premium 16全过程截图

在这里插入图片描述
在这里插入图片描述

3.6 关闭Oracle11g容器

Docker容器基本操作之启动-停止-重启

//1-exit退出Oracle11g容器内
eixt

//2-停止Oracle11g容器并在60s内保存其状态
docker stop -t=60 oracle11g

//3-查看正在运行的容器-若无,则表示Oracle11g容器已经成功关闭
docker ps

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

在这里插入图片描述
在这里插入图片描述

四、解决ORA-12170:TNS:连接超时

注意(2023-10-12 23:57:33 补充):如果Windows中的数据库图形化连接工具navicat显示ORA-12170:TNS:连接超时,很可能是linuxWindows之前的SSH连接有问题,先尝试用远程登录工具(例如xshell、finalshell、putty等)能否成功SSH连接linux。
解决此问题可参考我这篇文章
CentOS桥接模式下设置静态IP并解决java.net.ConnectException: Connection timed out: connect
在这里插入图片描述
Windows中的数据库图形化连接工具navicat显示ORA-12170:TNS:连接超时
在这里插入图片描述

4.1 配置centos静态ip解决java.net.ConnectException: Connection timed out: connect

//查看网络接口和网络配置文件名称
nmcli device status



//编辑网络配置文件,退出保存,关机后设置桥接模式,再重新开机
//网络配置文件的位置一般为:/etc/sysconfig/network-scripts ,网络配置文件名称一般为-
//ifcfg-网络接口的格式,我这里是ifcfg-ens160。

//ens160是网络接口名称;ifcfg-ens160
vim /etc/sysconfig/network-scripts/ifcfg-ens160


=======================
扩展:
//nmcli con show +网卡接口名称 显示的信息更加详细
//例如nmcli con show ens33 
nmcli con show +网卡接口名称

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

ifcfg-ens160的网络配置文件

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens160
UUID=fca73775-2db3-4d1e-8887-cf4887f0753c
DEVICE=ens160
ONBOOT=yes
IPADDR=192.168.1.96
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
DNS2=114.114.114.114
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

配置centos静态ip:
在这里插入图片描述
在这里插入图片描述

编辑网络配置文件,退出保存,关机后设置桥接模式,再重新开机:
在这里插入图片描述
ping测试
在这里插入图片描述
nmcli con show +网卡接口名称 显示的信息更加详细:
nmcli con show ens160
在这里插入图片描述

解决java.net.ConnectException: Connection timed out: connect,成功连接:
编辑网络配置文件,退出保存,关机后设置桥接模式,再重新开机)
注意:将连接ip填写为刚刚设置的静态IP:192.168.1.96
在这里插入图片描述

4.2 解决ORA-12170:TNS:连接超时

按照4.1的步骤解决了java.net.ConnectException: Connection timed out: connect,此时再尝试连接oracle11g容器ORA-12170:TNS:连接超时已经变成了ORA-12541:TNS: 无监听程序,与 3.1 ORA-12541:TNS: 无监听程序 内容相同,可以参考 3.1 ORA-12541:TNS: 无监听程序

步骤一:先执行2.2 命令中的命令来启动Oracle数据库helowin实例;

步骤二::再执行3.1 ORA-12541:TNS: 无监听程序 中的命令来启动监听器;

注意:将连接ip填写为刚刚设置的静态IP:192.168.1.96
在这里插入图片描述
步骤一启动Oracle数据库helowin实例(2.2 命令):

//1-解决sqlplus /nolog 的 Permission denied 问题 【进入oracle容器之前执行】
setenforce 0

//2-进入容器
docker exec -it oracle11g bash


//3-将当前用户切换到Oracle
//如果直接以root用户执行下一步sqlplus /nolog,会报错Permission denied
su - oracle


//4-进入Oracle命令行
//如果直接以root用户执行sqlplus /nolog,会报错Permission denied
sqlplus /nolog




//5-使用 “操作系统认证” 的方式
//如果这里直接以默认的root用户登录,会报登录失败ORA-12456:TNS:permission denied
//这里会报Connected to an idle instance,表示需要使用startup命令启动数据库
conn / as sysdba



//6-启动数据库  后续补充
startup;

//7-select instance_name
select instance_name from v$instance;

//8-show user
show user;
  • 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
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

在这里插入图片描述
步骤二启动监听器(3.1 ORA-12541:TNS: 无监听程序):

```java
//查看正在运行的容器
docker ps

//1-解决sqlplus /nolog 的 Permission denied 问题 【进入oracle容器之前执行】
setenforce 0

//2-进入容器
docker exec -it oracle11g bash

//3-将当前用户切换到Oracle 【如果已经是oracle用户,就无需切换】
//如果直接以root用户执行下一步sqlplus /nolog,会报错Permission denied
su - oracle



//查看lsnrctl 状态
lsnrctl status

//reload
lsnrctl reload

//启动lsnrctl,启动监听器。【此时STATUS of the LISTENER显示The listener supports no services】
lsnrctl start

//启动lsnrctl,启动监听器后,再次查看lsnrctl 状态
//【此时STATUS of the LISTENER会多一个Services Summary...,其中会显示Instance "helowin", status READY, has 1 handler(s) for this service...】
lsnrctl status

  • 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
  • 26
  • 27
  • 28
  • 29

执行完上述命令的lsnrctl status:
在这里插入图片描述
Navicat Premium连接成功
(system的密码默认是是helowin

Service Name(服务名称)方式连接成功:
在这里插入图片描述
SELECT * FROM DEPT;
在这里插入图片描述

SID(服务ID)方式连接成功:
在这里插入图片描述
SELECT * FROM EMP;
在这里插入图片描述

4.3 解决ORA-01017:invalid username/password;logon denied

在这里插入图片描述

system的密码默认是是helowin,我这里设置的还是helowin):
password expired.please enter a new password.(密码过期,请输入新密码)
在这里插入图片描述
连接成功
在这里插入图片描述

五、参考资料

Docker容器基本操作之启动-停止-重启
docker 安装 oracle
cannot restore segment prot after reloc: Permission denied
docker安装oracle11g史上最全步骤(带图文)
docker安装oracle11g史上最全步骤(带图文)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/531718
推荐阅读
相关标签
  

闽ICP备14008679号