解决连接不上Oracle数据库的问题
在开发中,连接数据库是非常重要的一步。然而,有时候我们会遇到连接不上Oracle数据库的问题,这时候我们需要采取一些措施来解决这个问题。在这篇文章中,我们将会探讨连接不上Oracle数据库的几种情况及其解决方法。
1. 检查Oracle服务是否开启
1.1 查看服务状态
在连接Oracle数据库之前,首先需要保证Oracle服务已经开启。我们可以通过以下步骤来查看Oracle服务是否开启:
# 以管理员身份运行cmd
> sc query OracleServiceORCL
其中,OracleServiceORCL
为Oracle服务的名称。如果Oracle服务已经开启,则将会输出以下结果:
SERVICE_NAME: OracleServiceORCL
TYPE : 10 WIN32_OWN_PROCESS
STATE : 4 RUNNING
(STOPPABLE, PAUSABLE, ACCEPTS_SHUTDOWN)
如果Oracle服务没有开启,则将会输出以下结果:
SERVICE_NAME: OracleServiceORCL
TYPE : 10 WIN32_OWN_PROCESS
STATE : 1 STOPPED
1.2 开启Oracle服务
如果Oracle服务没有开启,则需要手动开启该服务。我们可以通过以下步骤来开启Oracle服务:
以管理员身份运行cmd
输入以下命令:
> net start OracleServiceORCL
其中,OracleServiceORCL
为Oracle服务的名称。如果服务成功开启,则会输出以下结果:
The OracleServiceORCL service is starting.
The OracleServiceORCL service was started successfully.
2. 检查Oracle数据库实例是否开启
2.1 查看Oracle数据库实例状态
在检查Oracle数据库实例状态之前,我们需要确认一下Oracle服务是否已经开启。如果Oracle服务已经开启,但是仍然无法连接Oracle数据库,则需要检查Oracle数据库实例是否已经开启。我们可以通过以下步骤来查看Oracle数据库实例状态:
# 以管理员身份运行cmd
> sqlplus /nolog
> conn / as sysdba
> select instance_name, status from v$instance;
其中,instance_name
表示Oracle数据库实例的名称,status
表示Oracle数据库实例的状态。如果Oracle数据库实例已经开启,则将会输出以下结果:
INSTANCE_NAME STATUS
---------------- ------------
orcl OPEN
如果Oracle数据库实例没有开启,则将会输出以下结果:
INSTANCE_NAME STATUS
---------------- ------------
orcl MOUNTED
2.2 开启Oracle数据库实例
如果Oracle数据库实例没有开启,则需要手动开启该实例。我们可以通过以下步骤来开启Oracle数据库实例:
以管理员身份运行cmd
输入以下命令:
> sqlplus /nolog
> conn / as sysdba
> startup
如果实例成功开启,则将会输出以下结果:
ORACLE instance started.
Total System Global Area 1048576000 bytes
Fixed Size 2287720 bytes
Variable Size 616566736 bytes
Database Buffers 419430400 bytes
Redo Buffers 6086656 bytes
Database mounted.
Database opened.
3. 检查Oracle监听程序是否开启
3.1 查看Oracle监听程序状态
Oracle监听程序是用于监听客户端连接请求的程序,如果Oracle监听程序没有开启,则无法连接Oracle数据库。我们可以通过以下步骤来查看Oracle监听程序状态:
# 以管理员身份运行cmd
> lsnrctl status
如果Oracle监听程序已经开启,则将会输出以下结果:
LSNRCTL for 64-bit Windows: Version 12.2.0.1.0 - Production on 11-MAR-2021 11:35:21
Copyright (c) 1991, 2016, Oracle. All rights reserved.
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for 64-bit Windows: Version 12.2.0.1.0 - Production
Start Date 09-MAR-2021 15:06:52
Uptime 1 days 20 hr. 28 min. 28 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File D:\app\oracle\product\12.2.0\dbhome_1\network\admin\listener.ora
Listener Log File D:\app\oracle\diag\tnslsnr\DESKTOP-9PFAG0L\listener\alert\log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=DESKTOP-9PFAG0L)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
Services Summary...
Service "CLRExtProc" has 1 instance(s).
Instance "CLRExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "ORCLCDB" has 1 instance(s).
Instance "ORCLCDB", status READY, has 1 handler(s) for this service...
Service "ORCLPDB1" has 1 instance(s).
Instance "ORCLCDB", status READY, has 1 handler(s) for this service...
Service "ORCLPDBORCL" has 1 instance(s).
Instance "ORCLCDB", status READY, has 1 handler(s) for this service...
The command completed successfully.
如果Oracle监听程序没有开启,则将会输出以下结果:
LSNRCTL for 64-bit Windows: Version 12.2.0.1.0 - Production on 11-MAR-2021 11:38:28
Copyright (c) 1991, 2016, Oracle. All rights reserved.
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
TNS-12541: TNS:no listener
TNS-12560: TNS:protocol adapter error
TNS-00511: No listener
64-bit Windows Error: 61: Unknown error
3.2 开启Oracle监听程序
如果Oracle监听程序没有开启,则需要手动开启该程序。我们可以通过以下步骤来开启Oracle监听程序:
以管理员身份运行cmd
输入以下命令:
> lsnrctl start
如果Oracle监听程序成功开启,则将会输出以下结果:
LSNRCTL for 64-bit Windows: Version 12.2.0.1.0 - Production on 11-MAR-2021 11:41:23
Copyright (c) 1991, 2016, Oracle. All rights reserved.
Starting tnslsnr: please wait...
TNSLSNR for 64-bit Windows: Version 12.2.0.1.0 - Production
System parameter file is D:\app\oracle\product\12.2.0\dbhome_1\network\admin\listener.ora
Log messages written to D:\app\oracle\diag\tnslsnr\DESKTOP-9PFAG0L\listener\alert\log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=DESKTOP-9PFAG0L)(PORT=1521)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=DESKTOP-9PFAG0L)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for 64-bit Windows: Version 12.2.0.1.0 - Production
Start Date 11-MAR-2021 11:41:24
Uptime 0 days 0 hr. 0 min. 0 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File D:\app\oracle\product\12.2.0\dbhome_1\network\admin\listener.ora
Listener Log File D:\app\oracle\diag\tnslsnr\DESKTOP-9PFAG0L\listener\alert\log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=DESKTOP-9PFAG0L)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
Services Summary...
Service "CLRExtProc" has 1 instance(s).
Instance "CLRExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "ORCLCDB" has 1 instance(s).
Instance "ORCLCDB", status READY, has 1 handler(s) for this service...
Service "ORCLPDB1" has 1 instance(s).
Instance "ORCLCDB", status READY, has 1 handler(s) for this service...
Service "ORCLPDBORCL" has 1 instance(s).
Instance "ORCLCDB", status READY, has 1 handler(s) for this service...
The command completed successfully.
4. 检查防火墙设置
4.1 查看防火墙设置
有些时候,防火墙设置可能会导致无法连接Oracle数据库。我们需要确认一下防火墙是否允许连接Oracle数据库。
在Windows系统中,我们可以通过以下步骤来查看防火墙设置:
打开Windows安全中心
点击“高级设置”
点击“入站规则”
在右侧的“操作”菜单中选择“新建规则”
在新建规则向导中,我们需要选择“端口”选项,并输入以下信息:
端口号:1521
协议类型:TCP
如果防火墙未设置正确,则需要按照上述步骤进行设置。
4.2 开启防火墙端口
如果防火墙设置正确,但是仍然无法连接Oracle数据库,则需要手动开启防火墙端口。我们可以通过以下步骤来开启防火墙端口:
打开Windows安全中心
点击“高级设置”
点击“入站规则”
在右侧的“操作”菜单中选择“新建规则”
在新建规则向导中,我们需要选择“端口”选项,并输入以下信息:
端口号:1521
协议类型:TCP
允许连接
如果防火墙端口设置正确,则将会输出以下结果:
新建防火墙规则成功
总结
连接不上Oracle数据库的问题可能会由于多种原因引起,包括Oracle服务未开启、Oracle数据库实例未开启、Oracle监听程序未开启、防火墙设置不正确等。因此,在连接Oracle数据库之前,我们需要检查以上几个因素,确保它们都已经正确设置和开启。