目标:
1.Navicat连接Oracle数据库,报错
无监听程序。
一、下载安装Navicat15
https://zhuanlan.zhihu.com/p/675991635
下载安装资源
链接:百度网盘 请输入提取码
提取码:1u1q
二、测试SQL PLUS连接数据库
在全部程序--》Oracle--》SQLPLUS
找到 SQL PLUS程序
2.1 关闭ORCL和TNSListener服务是否可以连接
我们在服务中,关闭Oracle的ORCL服务和TNSListener服务。
SQL*Plus: Release 11.2.0.1.0 Production on 星期五 5月 31 22:29:48 2024
Copyright (c) 1982, 2010, Oracle. All rights reserved.
请输入用户名: sys
输入口令:
ERROR:
ORA-12560: TNS: 协议适配器错误
请输入用户名: system
输入口令:
ERROR:
ORA-12560: TNS: 协议适配器错误
很明显,TNS服务访问失败,连接错误。
2.2 开启ORCL服务和TNSListener服务
可以正常连接Oracle数据库。
2.3 设置ORALE添加到环境变量
如果想在cmd中直接执行ORACLE程序,可以添加环境变量
我的电脑--》属性--》环境变量
Path中新增加ORACLE执行程序目录。
保存以后,启动cmd.exe。执行sqlplus成功
2.4 SQLPLUS以DBA身份登录
sqlplus / as sysdba
以DBA身份连接成功。说明ORACLE数据库本身OK,是可以连接成功的。
2.5 查询ORACLE数据库中当前服务
SELECT name FROM v$services;
这条SQL语句会从动态性能视图v$services
中查询服务名称列表。
ORACLE中确实存在ORCL服务,服务名称为 orcl.211.55.4
通过以下指令查看当前服务名
select global_name from global_name;
2.6 查看数据库实例状态
SELECT instance_name FROM v$instance;
查看数据库实例的状态。
说明Oracle创建的数据库实例是一个,为orcl,且当前实例可用。
2.7 查看当前容器
show con_name;
2.8 SQLPLUS普通账号登录
sqlplus balll/dbpwd123@10.52.11.6/ORCLPDB1
sqlplus 用户名/用户密码@HOST/服务名
三、确认监听程序
3.1 查看当前监听程序状态信息
lsnrctl status
C:\Users\zhouronghua>lsnrctl status
LSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Production on 31-5月 -2024 23:55:00
Copyright (c) 1991, 2010, Oracle. All rights reserved.
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
LISTENER 的 STATUS
------------------------
别名 LISTENER
版本 TNSLSNR for 64-bit Windows: Version 11.2.0.1.0 - Production
启动日期 31-5月 -2024 22:34:54
正常运行时间 0 天 1 小时 20 分 6 秒
跟踪级别 off
安全性 ON: Local OS Authentication
SNMP OFF
监听程序参数文件 C:\app\zhouronghua\product\11.2.0\dbhome_1\network\admin\listener.ora
监听程序日志文件 c:\app\zhouronghua\diag\tnslsnr\zhouronghua\listener\alert\log.xml
监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.211.55.4)(PORT=1521)))
服务摘要..
服务 "CLRExtProc" 包含 1 个实例。
实例 "CLRExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
命令执行成功
测试连接是否成功,连接失败,报错:
发现问题:
1、确定的是IPC监听协议,TCP协议的监听地址,采用的是10.211.55.4,而我们访问使用的是localhost,或者127.0.0.1。IP地址需要统一
2.
3.1.1 什么是IPC协议?
Oracle IPC (Inter-Process Communication) 监听协议是指Oracle数据库进程间通信所使用的协议。Oracle数据库的实例可以通过IPC协议进行进程间的通信,以便进行例如会话管理、连接管理等操作。
在Oracle中,IPC监听协议通常是通过本地连接(也称为共享内存)实现的,这意味着客户端和服务器可以通过在同一台机器上的共享内存段进行通信。
如果您想要配置Oracle的IPC监听协议,您需要确保您的Oracle数据库已经安装并正确配置。然后,您可以通过编辑Oracle的监听配置文件(listener.ora
)来配置IPC监听协议。
3.1.2 监听程序配置
Oracle 监听是一个数据库连接管理器,它允许客户端应用程序与 Oracle 数据库进行通信。当客户端应用程序请求连接到数据库时,它们将首先与监听器通信,监听器会确定数据库上的服务并将连接请求转发到相应的实例。
Oracle 监听器可以在服务器端或客户端上安装。在服务器端,它是一个单独的进程,称为 LSNRCTL。在客户端上,它是一个库,称为 Oracle Net。
- LSNRCTL程序
C:\Windows\System32>lsnrctl --help
LSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Production on 01-6月 -2024 09:49:03
Copyright (c) 1991, 2010, Oracle. All rights reserved.
欢迎来到LSNRCTL, 请键入"help"以获得信息。
LSNRCTL> help
以下操作可用
星号 (*) 表示修改符或扩展命令:
start stop status
services version reload
save_config trace change_password
quit exit set*
show*
以上是常用的指令参数。
3.2 监听程序参数配置
监听状态中,标识了监听程序参数文件位置。
监听程序参数文件 C:\app\zhouronghua\product\11.2.0\dbhome_1\network\admin\listener.ora
即:$ORACLE_HOME/network/admin
原监听文件lisener.ora配置如下:
# listener.ora Network Configuration File: C:\app\zhouronghua\product\11.2.0\dbhome_1\NETWORK\ADMIN\listener.ora
# Generated by Oracle configuration tools.SID_LIST_LISTENER =(SID_LIST =(SID_DESC =(SID_NAME = CLRExtProc)(ORACLE_HOME = C:\app\zhouronghua\product\11.2.0\dbhome_1)(PROGRAM = extproc)(ENVS = "EXTPROC_DLLS=ONLY:C:\app\zhouronghua\product\11.2.0\dbhome_1\bin\oraclr11.dll")))LISTENER =(DESCRIPTION_LIST =(DESCRIPTION =(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)))(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))))ADR_BASE_LISTENER = C:\app\zhouronghua
字段含义表示
-
LISTENER
是监听器的名称。 -
DESCRIPTION_LIST
和DESCRIPTION
定义了监听器的描述。 -
ADDRESS
定义了监听器用于接收连接的网络地址和端口。 -
PROTOCOL
指定了使用的网络协议(如TCP)。 -
HOST
指定了监听器所在的主机名或IP地址。 -
PORT
指定了监听器监听的端口号。 -
SID_LIST_LISTENER
定义了数据库服务的SID列表,用于本地(静态注册)命名方法。 -
GLOBAL_DBNAME
定义了数据库的全局数据库名称。 -
ORACLE_HOME
定义了Oracle软件安装的路径。 -
SID_NAME
定义了数据库的SID。 -
ADR_BASE_LISTENER
定义了自动诊断仓库的基路径。
请根据实际环境中的主机名、端口号、Oracle Home路径和数据库的全局数据库名称等信息进行相应的修改。
主机名修改为localhost,端口使用默认端口就行。不用修改。
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = C:\app\zhouronghua\product\11.2.0\dbhome_1)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:C:\app\zhouronghua\product\11.2.0\dbhome_1\bin\oraclr11.dll")
)
)
# 监听器配置
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
ADR_BASE_LISTENER = C:\app\zhouronghua
调换顺序,TCP协议的优先级前置。
因为我们创建的全局DB文件库是 ORCL。
存在两种监听描述符:
IPC协议的:KEY为EXTPROC1521
TCP 协议的:主机名:localhost. 端口:1521
监听配置文件修改后,重启监听才能生效。
lsnrctl stop
lsnrctl start
3.2 启动监听程序
方法一:可以采用cmd.exe执行指令 lsnrctl start启动监听程序。需要以管理员权限运行cmd.exe
lsnrctl start
采用此命令启动监听程序。
方式二:采用 服务 --》 启动监听程序 OracleOraDb11g_home1TNSListener
启动监听程序以后,再次查看监听程序状态。
lsnrctl status
四、网络服务名配置
Oracle的tnsnames.ora
文件是网络服务名配置文件,它用于配置客户端如何连接到Oracle数据库服务器。
4.1 网络服务名配置文件
配置文件目录 $ORACLE_HOME/network/admin/tnsnames.ora
# tnsnames.ora Network Configuration File: C:\app\zhouronghua\product\11.2.0\dbhome_1\NETWORK\ADMIN\tnsnames.ora
# Generated by Oracle configuration tools.ORACLR_CONNECTION_DATA =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)))(CONNECT_DATA =(SID = CLRExtProc)(PRESENTATION = RO)))ORCL =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = orcl.211.55.4)))
字段含义
- ORCL: 网络服务名,可以自定义。
- (DESCRIPTION ... ): 描述如何连接到数据库。
- (ADDRESS ... ): 指定数据库服务器的地址。
- PROTOCOL: 通信协议,如TCP。
- HOST: 数据库服务器的主机名或IP地址。
- PORT: 数据库服务监听的端口,默认为1521。
- (CONNECT_DATA ... ): 指定连接数据库的详细信息。
- SERVER = DEDICATED: 指定连接类型,这里是专用服务器。
- SERVICE_NAME = mydbservice: 数据库服务名。
要点:
- 每个网络服务名必须在tnsnames.ora文件中独占一行,并以等号结束行。
- 不要在网络服务名或参数名的等号周围添加空格。
- 使用PROTOCOL, HOST, PORT, SERVER, 和 SERVICE_NAME 等关键字来指定配置。
- 使用#开始的行是注释,注释内容不会被解析。
配置文件定义了两个服务
ORACLR_CONNECTION_DATA服务名:IPC协议服务,SID = CLRExtProc
ORCL服务:TCP连接服务,HOST:localhost, 端口:1521.服务名:orcl.211.55.4
这个配置与监听程序中是一致的。
4.2 测试网络服务
Oracle提供了tnsping
来测试配置。相当于使用PING方式访问网络服务。
服务配置中定义了两个网络服务名,我们测试是否可以访问这两个服务。
# 服务名不区分大小写
tnsping orcl
测试PING ORACLR_CONNECTION_DATA服务
两个网络服务都可以PING通。
五、网络连接数据库配置
从网络访问数据库时,怎么连接到数据库呢?sqlnet.ora 文件是 Oracle 网络配置文件,用于定义如何处理连接到数据库的网络环境。
5.1 数据库网络访问配置
数据库网络访问配置,配置文件目录 $ORACLE_HOME/network/admin/sqlnet.ora
# sqlnet.ora Network Configuration File: C:\app\zhouronghua\product\11.2.0\dbhome_1\network\admin\sqlnet.ora
# Generated by Oracle configuration tools.# This file is actually generated by netca. But if customers choose to
# install "Software Only", this file wont exist and without the native
# authentication, they will not be able to connect to the database on NT.SQLNET.AUTHENTICATION_SERVICES= (NTS)NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
字段含义表示
- SQLNET.AUTHENTICATION_SERVICES:用于指定Oracle是否应使用特定的认证方法。可以设置的值为ALL、NONE、NTS(操作系统认证)。
- NAMES.DIRECTORY_PATH:用于指定Oracle的命名方法。可以设置的值为tnsnames(网络服务命名方法)、onames、hostnames。hostnames:主机命名(Host Naming):使 TCP/IP 环境中的用户能够通过其现有名称解析服务来解析名称。tnsnames本地命名:使用在每个客户机的 tnsnames.ora 文件中配置和存储的信息查找网络地址。目录命名:将数据库服务或网络服务名解析为连接描述符,该描述符存储在中央目录服务器中。
Oracle Names:这是由 Oracle Names 服务器系统构成的 Oracle 目录服务,这些服务器可以为网络上的每个服务提供由名称到地址的解析
外部命名:使用受支持的第三方命名服务
对于只有几个数据库的小型组织来说,应使用主机命名将名称存储在现有名称解析服务中,也可使用本地命名将名称存储在客户机上的 tnsnames.ora 文件中。
对于有多个数据库的大型组织来说,应使用目录命名将名称存储在集中管理的符合 LDAP 的目录服务器中。EZCONNECT表示简单连接,就是说可以不用在tnsnames.ora文件去查询服务名就可以进行数据库的连接,比如我们可以这样进行连接: username/password@hostname:port/service_name - SQLNET.INBOUND_CONNECT_TIMEOUT:用于指定Oracle监听程序等待客户端连接的时间(秒)。
- SQLNET.SEND_REMOTE_LOGIN:用于指定Oracle是否应发送远程登录参数。
- SQLNET.RECV_TIMEOUT:用于指定Oracle监听程序等待客户端发送的时间(秒)。
- SQLNET.EXPIRE_TIME:用于指定Oracle会话在超时之前可以保持打开状态的时间(分钟)。
5.2 测试数据库网络连接
CONNECT username/password [@db_alias] AS [SYSOPER | SYSDBA] ;
可以看到这个语法中,有一个db_alias,这个东西是什么呢?这个db_alias就是在tnsnames.ora中定义的数据库的别名,比如: #ORCL是个别名
sqlplus
GRANT sysdba TO system;
GRANT sysoper TO system;
SQL> CONNECT system/xxxx
已连接。
SQL> CONNECT system/xxxx@orcl as sysdba
ERROR:
ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
测试本地连接数据库成功,但是采用连接网络服务的方式失败。
TNS监听程序无法识别连接描述符中请求的服务。
创建OracleServiceOrcl服务的方法:
oradim -NEW -SID orcl -STARTMODE manual -PFILE “Oracle安装目录/11.2.0/dbs/init.ora”
oradim -NEW -SID orcl -STARTMODE manual -PFILE "C:\app\zhouronghua\product\11.2.0\dbhome_1\dbs\init.ora"