数据库服务器重启后app服务器无法连接oracle实例

数据库服务器重启后app服务器无法连接oracle实例

数据库服务器到期关机后,重新启动服务器,然后执行启动oracle的步骤:

shell 复制代码
[root@iZ8vbgkra5t3d356no16srZ ~]# su - oracle
Last login: Fri Nov 17 13:24:14 CST 2023 on pts/3
[oracle@iZ8vbgkra5t3d356no16srZ ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Wed Oct 23 08:43:09 2024

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

Connected to an idle instance.

SQL> startup
ORACLE instance started.

Total System Global Area 3156725760 bytes
Fixed Size                  2217504 bytes
Variable Size            2382367200 bytes
Database Buffers          754974720 bytes
Redo Buffers               17166336 bytes
Database mounted.
Database opened.
SQL> quit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

[oracle@iZ8vbgkra5t3d356no16srZ ~]$ lsnrctl status

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 23-OCT-2024 08:44:42

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=localhost)(PORT=1521)))
TNS-12541: TNS:no listener
 TNS-12560: TNS:protocol adapter error
  TNS-00511: No listener
   Linux Error: 111: Connection refused
[oracle@iZ8vbgkra5t3d356no16srZ ~]$ lsnrctl start 

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 23-OCT-2024 08:44:49

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

Starting /home/oracle/app/oracle/product/11.2.0/dbhome_1/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_1/network/admin/listener.ora
Log messages written to /home/oracle/app/oracle/diag/tnslsnr/iZ8vbgkra5t3d356no16srZ/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(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                23-OCT-2024 08:44:51
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_1/network/admin/listener.ora
Listener Log File         /home/oracle/app/oracle/diag/tnslsnr/iZ8vbgkra5t3d356no16srZ/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))
The listener supports no services
The command completed successfully

注意倒数第二行的The listener supports no services,这表明监听器当前没有注册任何服务。这意味着尽管监听器在运行,但它不知道任何要监听的数据库实例。这就是为什么app服务器不能连接到数据库的原因。

检查监听配置文件:

/home/oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora

原文件内容为:

shell 复制代码
# listener.ora Network Configuration File: /home/oracle/app/oracle/product/11.2.0/dbhome_1/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))
    )
  )

ADR_BASE_LISTENER = /home/oracle/app/oracle
  • 监听器名称:LISTENER

  • 监听器描述包括两个地址:

    • 一个使用IPC协议,键值为EXTPROC1521。

    • 另一个使用TCP协议,主机名为localhost,端口为1521。

  • ADR(自动诊断存储库)的基础路径设置为/home/oracle/app/oracle

配置文件看起来是正确的,因为它配置了监听器来监听本地主机的1521端口。然而,你之前提到监听器没有注册任何服务,这可能是连接问题的原因。

https://blog.csdn.net/songdancer/article/details/107297246

按照CSDN上的例子修改为:

shell 复制代码
# listener.ora Network Configuration File: /home/oracle/app/oracle/product/11.2.0/dbhome_1/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))
#    )
#  )

#ADR_BASE_LISTENER = /home/oracle/app/oracle
# 
LISTENER =
    (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = 172.26.5.7)(PORT = 1521))
    )
 
SID_LIST_LISTENER=
    (SID_LIST =
        (SID_DESC =
            (GLOBAL_DBNAME = orcl)
            (ORACLE_HOME = /home/oracle/app/oracle/product/11.2.0/dbhome_1)
            (SID_NAME = orcl)
        )
    )

同时修改/home/oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora

原文件内容:

shell 复制代码
# tnsnames.ora Network Configuration File: /home/oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

改为:

shell 复制代码
# tnsnames.ora Network Configuration File: /home/oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

orcl =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 172.26.5.7)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

重启监听后,oracle实例连接恢复正常:

shell 复制代码
[oracle@iZ8vbgkra5t3d356no16srZ admin]$ lsnrctl stop

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 23-OCT-2024 10:47:30

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

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

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 23-OCT-2024 10:47:33

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

Starting /home/oracle/app/oracle/product/11.2.0/dbhome_1/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_1/network/admin/listener.ora
Log messages written to /home/oracle/app/oracle/diag/tnslsnr/iZ8vbgkra5t3d356no16srZ/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.26.5.7)(PORT=1521)))

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.26.5.7)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date                23-OCT-2024 10:47:33
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_1/network/admin/listener.ora
Listener Log File         /home/oracle/app/oracle/diag/tnslsnr/iZ8vbgkra5t3d356no16srZ/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.26.5.7)(PORT=1521)))
Services Summary...
Service "orcl" has 1 instance(s).
  Instance "orcl", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully

:::

总结:这个问题是连接IP地址导致的,监听器默认使用主机名连接,但是ECS云服务器主机名不是localhost,应配成内网ip地址。

:::

附查询命令:

1.查询Oracle数据库实例是否启动:
sql 复制代码
SQL> SELECT status FROM v$instance;
2.查询oracle当前实例名:
sql 复制代码
SQL> SELECT instance_name FROM v$instance;
3.使用SQL*Plus通过监听连接数据库实例:
shell 复制代码
$ sqlplus system/oracle@localhost:1521/ORCL

替换system/oracle为你的用户名和密码,ORCL为你的数据库实例名称。

4.ORACLE_HOME是什么路径,是存放数据库文件的路径吗

ORACLE_HOME环境变量在Oracle数据库中指的是Oracle软件安装的主目录。它通常包含了Oracle数据库服务器、客户端工具和网络配置文件等。

ORACLE_HOME并不直接存放数据库文件。数据库文件通常存放在一个单独的目录中,这个目录被称为数据库的ORACLE_BASE或特定的数据文件目录。以下是这些目录的简要说明:

  • ORACLE_HOME: 包含Oracle软件的二进制文件、库文件、配置文件和启动/关闭数据库的脚本等。例如,/home/oracle/app/oracle/product/11.2.0/dbhome_1可能是一个ORACLE_HOME的路径。

  • ORACLE_BASE: 是Oracle安装所有产品的基础目录。在大多数情况下,ORACLE_HOMEORACLE_BASE的子目录。例如,/home/oracle/app/oracle可能是一个ORACLE_BASE的路径。

  • 数据库文件: 数据库文件,如数据文件(.dbf)、控制文件(.ctl)、日志文件(.log)等,通常存放在ORACLE_BASE下的特定目录,例如/home/oracle/app/oracle/oradata/

5.GLOBAL_DBNAME、sid区分大小写吗

在Oracle数据库中,GLOBAL_DBNAMESID(系统标识符)的区分大小写性取决于操作系统的类型。

  1. 在Windows系统上,SIDGLOBAL_DBNAME是不区分大小写的。这意味着ORCLorclOrCl被视为相同的SID。

  2. 在Unix、Linux或macOS系统上,SIDGLOBAL_DBNAME是区分大小写的。在这些操作系统上,ORCLorclOrCl将被视为不同的SID。

因此,如果你在配置Oracle数据库或设置环境变量时,应该根据你的操作系统来决定是否需要保持大小写的一致性。例如,如果你在Linux上设置ORACLE_SID环境变量,那么在所有相关的配置文件中,包括监听器配置文件(listener.ora)和初始化参数文件(spfilepfile),都必须使用相同的大小写。

6.实例名和服务名有何区别

在Oracle数据库中,实例名(Instance Name)和服务名(Service Name)是两个相关但又不同的概念。以下是它们的区别:

实例名(Instance Name)

  1. 定义:实例名是用于标识特定Oracle数据库实例的名称。一个数据库实例是由SGA(系统全局区域)和后台进程组成的内存结构,用于管理数据库的物理和逻辑结构。

  2. 唯一性:在给定的服务器上,实例名必须是唯一的。

  3. 用途:实例名主要用于数据库的内部管理和操作,例如启动和关闭数据库实例。

  4. 配置:实例名通常在初始化参数文件(pfilespfile)中指定,也可以通过环境变量ORACLE_SID来设置。

  5. 操作系统相关性:在Unix、Linux或macOS系统上,实例名是区分大小写的。

服务名(Service Name)

  1. 定义:服务名是用于标识数据库服务的名称,它允许客户端应用程序连接到数据库实例。服务名通常与数据库的数据库全局名称(DB_NAME)和一个可选的数据库实例名称(INSTANCE_NAME)相关联。

  2. 唯一性:服务名在Oracle网络中可以是唯一的,也可以不是唯一的,因为多个实例可以提供同一个服务名。

  3. 用途:服务名用于客户端连接,允许客户端连接到特定的数据库服务,而不必关心数据库实例的具体位置。

  4. 配置:服务名在监听器配置文件(listener.ora)和数据库的tnsnames.ora文件中指定。

  5. 灵活性:服务名可以映射到多个实例,提供负载平衡和高可用性。例如,使用Oracle RAC(Real Application Clusters)时,多个实例可以共享同一个服务名。

总结

  • 实例名是数据库实例的标识,主要用于数据库的内部管理和操作。

  • 服务名是客户端连接到数据库时使用的标识,它提供了对数据库实例的抽象,允许客户端不必知道数据库实例的具体位置和配置。

shell 复制代码
#ORCL是实例名 
#表示使用TCP协议,连接IP地址为127.0.0.1,端口号为1521的数据库主机上服务名为orcl的数据库
#如果有多个监听,可以手动添加
ORCL =
    (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
        (CONNECT_DATA =
            (SERVER = DEDICATED)
            (SERVICE_NAME = orcl) #orcl是服务名,java程序通过服务名连接oracle监听器,访问数据库实例
        )
    )
相关推荐
爱上语文1 分钟前
苍穹外卖 添加购物车接口
java·数据库·spring boot·后端·mybatis
SofterICer21 分钟前
pre-installed TS.48 test profile
服务器·网络
安於宿命30 分钟前
【Linux内核揭秘】深入理解命令行参数和环境变量
android·linux·服务器
Gavin_91535 分钟前
【Django】继承框架中用户模型基类AbstractUser扩展系统用户表字段
数据库·python·django·sqlite·virtualenv
FIN技术铺1 小时前
问:缓存穿透、雪崩、预热、击穿、降级,怎么办?
数据库·spring·缓存
itachi-uchiha1 小时前
Linux特种文件系统--tmpfs文件系统前传:虚拟内存子系统
linux·运维·服务器
2401_857636391 小时前
用Spring Boot打造你的网上摄影工作室
服务器·数据库·spring boot
Huang-Bo2 小时前
Django目录结构最佳实践
数据库·django·sqlite
小草儿7992 小时前
gbase8s之spring框架用druid中间件报语法错误
数据库·sql
树下熊猫2 小时前
实现企业微信打卡月报与简道云的高效集成
java·前端·数据库