Oracle数据库监听配置浅析与故障定位

2020-08-26 07:46弓晓波
电脑知识与技术 2020年20期

摘要:Oracle数据库作为市场占比最高的商业数据库,该系统功能强大,同时也具有一定的复杂性,Oracle的监听服务是客户端连接到数据库的必经之路,远程客户端进程只有通过服务端的监听认证、转发才能连接到数据库。本文首先分析了Oracle监听服务的工作模式,在此基础上分别研究了通过配置工具与配置文件实现Oracle客户端与Oracle服务器连接的方法,最后以常见的两例客户端连接故障为例,分析故障的原因并给出了故障解决方法。

关键词:Oracle数据库;监听服务;故障解决

中图分类号:TP393 文献标识码:A

文章编号:1009-3044(2020)20-0040-02

1引言

Oracle数据库是甲骨文公司的关系数据库管理系统,它在数据库领域一直处于领先的地位,可以说Oracle数据库系统是目前世界上最流行的关系数据库管理系统,系统移植性好、使用方便、功能强大,适用于各类大、中、小、微机环境[1]。它是一种高效率、可靠性好、适应高吞吐量的数据库方案,是各个领域企业级开发的首选。

Oracle是C/S(客户端/服务器)结构的数据库系统,其主要由客户端应用程序和数据库服务器进程组成。这种结构的优点是可将大量的数据处理工作在客户端完成,减少服务器的负载与网络通信的负载需求,但同时由于在客户端与服务器之间的通信,使得系统在远程认证与连接方面有一定的复杂性,在用户使用过程中,客户端的连接问题成为一个高发率的故障点[2]。本文阐述了Oracle数据库的监听服务工作模式及几种配置方法,并以常见的两例客户端连接故障為例,分析了故障的原因,给出了故障解决方法。

2Oracle通信方式

Oracle的客户端与服务端之间有两种通信方式,进程通信与网络通信,进程通信只适用于客户端与服务端位于同一服务器,当客户端和服务端位于不同的服务器上,只可采用网络通信的方式。目前大部分的应用系统部署方式是数据库与服务器分别独立部署,这样可分解服务器的负载和压力,提高系统的安全性[3],本文主要描述网络通信的配置与管理。

当客户端与服务端采用网络通信的方式连接时,Oracle监听成为客户端连接到数据库的必经之路,远程客户端进程只有通过服务端的监听认证、转发才能连接到数据库。数据库的连接方式有多种,如Easy ConneCt、Local naming、DireCtory naming、External naming,Local Naming(本地命名)是常用的数据库连接方式,也就是使用位于客户端的配置文件tnsnames.ora连接,本文主要分析的是Local Naming连接方式。

3Oracle监听配置与管理

3.1监听配置模板

采用LoCal Naming方式下的监听相关配置文件主要有3个:listener.ora、sqlnet.ora、tnsnames.ora,其中tnsnames.ora位于客户端,listener.ora与sqlnet.ora通常位于服务端。默认位置为ORACLE HOME\NETWORK\ADMIN.

listener.ora主要用于配置监听服务[4]。sqlnet.ora既可以位于Oracle服务端,也可以位于Oracle客户端,主要用于控制客户端和服务端Oracle Net Services的行为,例如设置会话跟踪级别和控制客户端连接等,tnsnames.ora位于客户端,主要是对连接描述符进行定义。典型的listener.ora配置文件模板如下:

SID_LIST_LISTENER=

(SIDLIST=

(SIDDESC=

(GLOBAL_DBNAME=tns)

(SID_NAME=tns)

LISTENER=

(DESCRIPTION=

(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.110)(PORT=1521》

ADR BASE LISTENER=*****

该配置文件包含三部分:LISTENER、SID LIST_ LISTENER与ADR BASE LISTENER。LISTENER用于设置监听基本配置信息,包含监听名字、连接协议、监听主机与监听端口。第二部分SID_LIST_LISTENER用于配置监听的静态注册特性,主要包含数据库服务名、实例名等信息。第三部分ADR_BASE_LIS-TENER指定数据库服务的路径。

其中,CLOBAL NAME指的是监听处理的数据库的服务名,SID_NAME指监听处理的数据库实例名,HOST表示监听运行的数据库服务器,HOST的值可以用IP地址、主机名、IP地址解析名表示,建议使用IP地址,清晰明了。PORT表示连接的端口号,默认为1521,需保证此端口号没有被其他程序占用。

sqlnet.ora文件指明客户端以何种方法连接数据库。在访问方式文件中指明客户端采用的Local Naming的方式,关键字为TNSNAMES。

tnsnames.ora文件主要是对连接描述符进行定义,与listen-er.ora中的配置相对应,配置文件模板如下:

TNS=

(DESCRIPTION=

(ADDRESS_LIST=

(ADDRESS = (PROTOCOL = TCP) (HOST =192.168.1.110)(PORT=1521)

(CONNECT_DATA=

(SERVER=DEDICATED)

(SERVICE_NAME=tns)

其中访问协议(PROTOCOL)、数据库主机名(HOST),访问端口(PORT),这三项参数只需与前面的监听服务配置文件参数保持一致。数据库服务名(SERVICENAME)要与ORACLE参数文件中定义的服务名保持一致。

3.2Local Naming下的监听配置

可以采用两种方式来创建与修改配置文件,一种是可视化配置工具,如Net Configuration Assistant与Net Manager,另一种是使用文本编辑工具手动编辑配置文件[5]。

本文以Net Configuration Assistant为例,该工具可完成lis-tener.ora与tnsnames.ora的配置。sqlnet.ora需手动完成。可视化工具的优点是系统性强,不会出现语法、关键字错误。建议使用可视化工具完成监听配置。

Oracle的监听服务由server与listener共同控制。

新建服务命名:

(1)选中服务命名,点击左边的绿色新建按钮,如图1所示;

(2)在后面的对话框中,依次填写网路服务名:tns,协议选择TCP/IP,主机名填写数据库服务器地址(192.168.1.110),填写端口号(默认1521),填写服务名:tns(全局数据库名)。此对话框中无保存按钮,需通过关闭对话框来保存设置,至此,完成服务命名的创建。

建立LISTENER监听程序:

(a)重新打开Net Manager,选中监听程序,点击左边的绿色新建按钮,如图1所示;

(b)填写监听程序名称:LISTENER;

(c)点击“添加地址”,在网络地址填写:“主机:192.168.1.110(数据库服务器地址),端口:1521”,端口号与服务命名中的端口号保持一致,最后保存设置。

4Oracle连接常见故障

本文以Oracle常见的两例客户端连接故障为例,分析故障的原因,给出故障解决方法,其中Oracle的版本为11.2.0。

1)无监听程序故障

数据库服务器在非正常关机或者其他异常情况下,出现数据库连接失败,使用PISqlDeveloper连接数据库,报TNS:无监听程序,错误代码1521,使用命令查看监听服务的状态:lsnrctlstatus,同样报错:无监听程序。

解决方法:修改监听配置文件,将listener.ora与tnsnames.ora文件中的localhost字段,皆修改为数据库服务器的IP地址。重启监听服务(在cmd命令行下使用lsnrctl stop&&lsnrCtl start重启),使用PISqIDeveloper连接数据库,连接正常。

2)服务命名注册故障

此故障是在配置完监听服务的基础上发生的,按照3.2完成监听服务的配置,重启服务后需要等待几分钟,服务命名才会被注册成功。但有时服务命名无法正常完成静态注册,导致监听程序正常,但没有对应的服务。此时需要使用动态注册的方式完成服务命名的注册。具体步骤如下:

(1)在命令行中使用管理员登陆oracle:sqlplus/as sysdba;

(2) show parameter service_names查看service_names,如果不是tns,进入第三步,如果是,进去第四步;

(3)使用set ORACLE SID=tns,切换数据库实例;

(4)退出sql,在CMD命令行下,使用alter system register动态注册。

最后,查看监听状态,lsnrctl status,显示服务”tns”包含1个实例,则监听正常工作。

5结论

本文首先分析了Oracle监听服务的工作模式,在此基础上分别研究了通过配置工具与配置文件实现Oracle客户端与服务器连接的方式,介绍了在Local Naming下Oracle监听服务的可视化配置步骤,最后以常见的两例客户端连接故障为例,分析故障的原因并给出了故障解决方法,为技术人员解决Oracle连接故障提供了理论知识与参考方法。

参考文献:

[1]周亮.Oracle DBA实战攻略[M].机械工业出版社,2013.

[2]许戈.Oracle数据库网络安全访问机制构建策略分析[J].江苏科技信息,2017(29).

[3]周文琼,王乐球,郑述招.Oracle网络的配置与管理[J].计算机与数字工程,2014,42(12):2350-2353+2368.

[4]刘恩海,聂俊岚,韩焕平,等.Web与数据库的连接[J].河北科技大学学报,2001(4):30-33+38.

[5]王廷任.Oracle數据库日常维护与优化建议[J].数字通信世界,2019(6):93.

【通联编辑:王力】

收稿日期:2020-04-17

基金项目:中航工业技术创新基金(2013A62302R)

作者简介:弓晓波(1987-),男,工程师,研究方向为计算机应用与数据管理技术。