So Easy! Oracle在Linux上的安装配置系列四

So Easy! Oracle在Linux上的安装配置系列四  监听器的配置

在创建了数库和各种数据库对象并装载了数据后,下一步是在数据库服务器与使用它的用户之间建立连

接,Oracle Net Services使这种连接成为可能。Oracle Net Services组件必须"存活"在客户机和服务器上,它们一般使用TCP/IP网络协议来建立客户机和数据库服务器之间的网络连接。

本文官方文档位置:

http://docs.oracle.com/cd/E11882_01/network.112/e41945/listenercfg.htm#NETAG010  

为了方便配置和管理网络连接,Oracle提供了Oracle Net Services,它是一套在分布式异构计算环境中提供连接方案的组件。Oracle Net Services的组成:

Oracle NetOracle Net ListenerOracle Connection ManagerOracle Net Configuration Assistant Oracle Net Manager

Oracle Net:Oracle Net是一个初始化、建立及维护客户机和服务器之间连接的组件。必须在客户机和服务器上都安装。Oracle Net主要由两个组件构成:

Oracle Network Foundation LayerOracle Protocol Support

Oracle Net Listener:驻留Oracle数据库的所有服务器还运行一个名为Oracle Net Listener(通常也称为监听器)的服务, 其主要功能是监听客户机服务登录Oracle数据库的请求。监听器在保证客户机服务具有与数据库匹配的信息(协议、端口和实例名)后,将客户机请求传递到数据库。假如用户和密码通过认证,则数据库将允许客户机登录。一旦监听器把用户请求交付给数据库,客户机和数据库直接连接,不再需要监听器有帮助。

Oracle Connection Manager、Oracle Net Configuration Assistant、Oracle Net Manager是帮助配置数据库网络连接的GUI实用程序:

Oracle Connection Manager  ----> cmctlOracle Net Configuration Assistant---> netcaOracle Net Manager  ---->netmgr

连接描述符(connection descriptor):术语连接描述符用来表示数据库连接的两个必需的部分,数据库服务名和地址。连接描述符的地址部分包含三个部分,分别是:连接使用的通信协议,主机名和端口号

UNIX服务器上的Oracle连接的标准端口号为1521或1526

下面是一个典型的连接描述符的例子:

(DESCRIPTION=    (ADDRESS=(PROTOCOL = TCP)(HOST=IP/servername)(PORT=1521))    (CONNECT_DATA=           (SERVICE_NAME=orcl_Oracle.Study.org)))

ADRESS 行指出网络通信将使用TCP协议,HOST指定UNIX服务器,服务器上的Oracle监听器正监听来自端口1521的连接请求。连接描述符的ADDRESS部分也称为协议地址(protocol address)

连接标识符

连接标识符(connect identifier)与连接描述符紧密关联。可把连接描述符作为连接标识符,或者可简单地映射一个数据库服务名为一个连接描述符。

下面是说明映射orcl连接标识符的例子:

orcl=     (DESCRIPTION=        (ADDRESS=(PROTOCOL = TCP)(HOST=IP/servername)(PORT=1521))        (CONNECT_DATA=               (SERVICE_NAME=orcl_Oracle.Study.org))     )

连接串

通过提供一个连接串(connects string)连接到数据库。连接串包含用户名/密码组合及一个连接标识符。最常见的连接标识符之一是节点服务名,它是一个数据库服务的名字。

下面的例子给出一个连接串,它把一个完整的连接描述符作为连接标识符:

CONN scott/[email protected](DESCRIPTION=                                    (ADDRESS=(PROTOCOL = TCP)(HOST=IP/servername)(PORT=1521))                                    (CONNECT_DATA=                                           (SERVICE_NAME=orcl_Oracle.Study.org))                                 )

下面是一个更简单的连接到相同数据库的方法,它使用连接标识符orcl:

CONN scott/[email protected]

监听器和连接

Oracle监听器是一个只运行在服务器上并监听连接请求的服务。Oracle提供一个名为lsnrctl的实用程序来管理监听器。监听器的配置文件是listener.ora该文件默认的位置在unix系统为$ORACLE_HOME

/network/admin 该文件是监听器进程的配置文件,监听器的默认名为listener,关于listener就不多说了,它是一个独立运行在Oracle服务器上的进程,接受远程对数据库的接入申请并交付给oracle的服务器进程。所以如果不是使用的远程的连接,并且不需要使用OEM时,listener进程就不是必需的,同样的如果关闭listener进程并不会影响已经存在的数据库连接。因为监听器只运行在服务器上,因此在客户机的机器上没有listener.ora文件。

下面是一个最简单的监听器的例子:

LISTENER =          (ADDRESS_LIST=	          (ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521)) 	          (ADDRESS=(PROTOCOL=ipc)(KEY=PNPKEY)) 	  )

这个例子只给出了监听器的名字(LISTENET)和监听的协议地址。

监听器命令监听器的启动、停止和查看监听器的状态

启动监听器

$ lsnrctl start

停止监听器

$ lsnrctl stop

查看监听器的状态

$ lsnrctl status

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 17-APR-2015 01:42:43

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

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=Oracle.Study)(PORT=1521))STATUS of the LISTENER------------------------Alias LISTENERVersion TNSLSNR for Linux: Version 11.2.0.1.0 - ProductionStart Date 16-APR-2015 19:20:49Uptime 0 days 6 hr. 21 min. 53 secTrace Level offSecurity ON: Local OS AuthenticationSNMP OFFListener Parameter File /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.oraListener Log File /u01/app/oracle/diag/tnslsnr/Oracle/listener/alert/log.xmlListening Endpoints Summary...(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracle.Study)(PORT=1521)))Services Summary...Service "orcl.Oracle.Study" has 1 instance(s).Instance "orcl", status READY, has 1 handler(s) for this service...Service "orcl_Oracle.Study.org" has 1 instance(s).Instance "orcl", status READY, has 1 handler(s) for this service...The command completed successfully

输出说明了监听器启动了多长时间,监听器的配置文件位于何处,它还给出监听器为连接请求而监听的数据库名称。

Services Summary部分,相应的状态可具有如下的某个值:

READ :此实例可接受连接

BLOCKED:此实例不能接受连接

UNKNOWN:此实例在listerer.ora文件中注册而不是通过动态服务注册,因而不知道其状态

进入lsnrctl实用程序,使用help,可以查看更多监听器的命令

[[email protected] admin]$ lsnrctl 

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 17-APR-2015 01:49:21

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

Welcome to LSNRCTL, type "help" for information.

LSNRCTL> help The following operations are availableAn asterisk (*) denotes a modifier or extended command:

start                        stop                status              services                    version           reload              save_config              trace              spawn               change_password      quit                exit                set*                          show*               

实例:

So Easy! Oracle在Linux上的安装配置系列三中创建了数据库,并启动了实例,以下示例在服务器上创建监听器配置文件并从win7中使用oracle即时客户端和sql*plus连接到数据库

以下是在服务器上创建的监听器配置文件:

$ cd $ORACLE_HOME/network/admin$ vim listener.ora LISTENER =(ADDRESS_LIST=	(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.23.130)(PORT=1521)) 	(ADDRESS=(PROTOCOL=ipc)(KEY=PNPKEY)))	

启动监听器查看监听器的状态(lsnrctl status),可以看到监听器读取的的配置文件为我们创建的文件,并且到实例已经READ,如下:

$ lsnrctl start 

到官网下载Windows版的Oracle即时客户端和windors版的Sql * Plus把两个软件解压到相同的文件夹,并放在任意的目录下,我这里是c盘根目录的instantclient_11_2文件夹:

http://download.oracle.com/otn/nt/instantclient/112010/instantclient-sqlplus-win32-11.2.0.1.0.ziphttp://download.oracle.com/otn/nt/instantclient/112010/instantclient-basic-win32-11.2.0.1.0.zip

在instantclient_11_2文件夹的根目录下创建两个文件tnsnames.ora和sqlnet.ora这两个文件可以放在任意位置,但必须用TNS_ADMIN环境变量指定。

tnsnames.ora的文件内容如下:

orcl=   (DESCRIPTION=        (ADDRESS_LIST= 	    (ADDRESS=(PROTOCOL=TCP)(HOST=192.168.23.130)(PORT=1521))        )      (CONNECT_DATA=	     (SERVICE_NAME=orcl_Oracle.Study.org))      ))

tnsnames.ora文件是本地命名方法的配置文件,该文件包含的内容为网络服务名映射到连接描述符,或网络服务名映射到监听协议地址,以上示例中DESCRIPTION包含连接描述符,ADDRESS包含协议及地址,CONNECT_DATA包含数据库服务标识信息。

sqlnet.ora文件的作用:

1.限制客户端访问(如指定客户端域为不允许访问)
2.指定命名方法(local naming,directory
nameing...)的优先级
3.启用日志及跟踪(log and
trace)功能
4.通过特定进程来路由客户端连接
5.配置外部命名(第三方连接程序,如c语言写的)参数
6.配置Oracle的高级安全
7.使用协议特定的参数限制对数据库的访问

常用参数设置
1.设置windows下允许使用windows
nt本地认证
SQLNET.AUTHENTICATION_SERVICES=(nts)

2.设置Oracle客户端连接串命名查找顺序
NAMES.DIRECTORY_PATH=(tnsnames,
onames,ezconnect)
允许的值有:
1.tnsnames使用客户端的tnsnames.ora解析
2.ldap使用目录访问协议解析,需要有目录服务
3.ezconnect
or hostname,允许使用tcp/ip连接串,包含主机名,端口,服务名
4.cds分布式环境的数据库名
5.nis (Network
Information Service (NIS) external naming
method),主要用于外部程序解析
6.onames:通过Oracle Name
Server解析

3.设置客户端连接会话超时时间(单位分钟)
定期检测客户端是否还是活动的,设置为0不检测
SQLNET.EXPIRE_TIME
=
10
另外还有:

客户端建立连接超时时间(单位秒,默认60)
SQLNET.INBOUND_CONNECT_TIMEOUT=10
Oracle建议在listener.ora中也进行配置

接受超时时间(单位秒)
SQLNET.RECV_TIMEOUT=3

发送超时时间(单位秒)
SQLNET.SEND_TIMEOUT=3

4.客户端限制
是否进行限制(默认no):
TCP.VALIDNODE_CHECKING
如:TCP.VALIDNODE_CHECKING=yes
限制客户端访问
TCP.EXCLUDED_NODES=(hostname
| ip_address, hostname | ip_address, ...)
如:TCP.EXCLUDED_NODES=(financ, mkt,
144.25.5.25)
允许客户端访问,会覆盖限制访问
TCP.INVITED_NODES=(hostname | ip_address,
hostname | ip_address, ...)
如:TCP.INVITED_NODES=(sale, h,
144.185.5.73)

5.设置立即发送
设置等待一段时间或者数据包凑够多大才会一起发送,或者可以让数据立即发送
TCP.NODELAY=yes

6.设置使用专享连接还是公用链接
设置为on会在客户端连接串后加上(SERVER=dedicated)
USE_DEDICATED_SERVER=on/off

本例为:

NAMES.DIRECTORY_PATH= (TNSNAMES)SQLNET.AUTHENTICATION_SERVICES= (NTS)

sqlnet.sql文件官方文档位置:

http://docs.oracle.com/cd/E11882_01/network.112/e10835/sqlnet.htm

在xshell中新建一个窗口,切换到instantclient_11_2目录,在windows版的sql *plus中以sys用户使用dba权限连接数据库:

[C:\Users\chencheng]$ cd c:\instantclient_11_2 [C:\instantclient_11_2]$ [C:\instantclient_11_2]$ sqlplus sys/[email protected] as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Fri Apr 17 13:21:05 2015

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

ERROR:ORA-01031: insufficient privileges

Enter user-name:

出现ORA-01031错误: insufficient privileges 。

使用一般用户以非dba权限登录是可以的,但实例必须被启动.如:

[C:\instantclient_11_2]$ sqlplus system/[email protected]

SQL*Plus: Release 11.2.0.1.0 Production on Fri Apr 17 22:24:13 2015

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

Connected to:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> col tablespace_name for a14SQL> col file_name for a50SQL> set linesize 32767SQL> SELECT file_name,tablespace_name FROM dba_data_files;

FILE_NAME					                            TABLESPACE_NAM--------------------------------------------------               --------------/u01/app/oracle/admin/oradata/orcl/system01.dbf    SYSTEM/u01/app/oracle/admin/oradata/orcl/sysaux01.dbf     SYSAUX/u01/app/oracle/admin/oradata/orcl/undotbs01.dbf   UNDOTBS/u01/app/oracle/admin/oradata/orcl/users01.dbf	     USERS

不能以DBA身份登录要解决这个问题就要说到密码文件:

密码文件(password file)是一个可选的文件,允许远程SYSDBA或管理员访问数据库。

启动Oracle时,还没有数据库可以用来验证密码。在"本地"系统上启动Oracle时(也就是说不在网络上,而是从数据库实例所在的机器启动),Oracle会利用操作系统来执行这种认证。

注意:我们在xshell中使用ssh协议连接linux服务器,在linux命令行下使用

$ sqlplus  / as sysdba 

连接数据库是属于本地连接,而非远程连接

安装Oracle时,会要求完成安装的人指定管理员"组"。在unix/Linux上,这个组一般默认为DBA,不过,也可以是平台上任何合法的组名。这个组很"特殊"因为这个组的任何用户都可以作为SYSDBA连接Oracle,而无需指定用户名或密码。如,在安装Oracle Database 11g Release 2时,我指定了一个dba组。dba组中的任何用户都无需用户名/密码就能连接:

[[email protected] ~]# useradd -G dba  were[[email protected] ~]# su - were [[email protected] ~]$ export ORACLE_BASE=/u01/app/oracle[[email protected] ~]$ export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1[[email protected] ~]$ export ORACLE_SID=orcl [[email protected] ~]$ export PATH=$PATH:$ORACLE_HOME/bin[[email protected] ~]$ sqlplus  / as sysdba 

SQL*Plus: Release 11.2.0.1.0 Production on Fri Apr 17 09:36:13 2015

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

Connected to an idle instance.

SQL> startupORACLE instance started.

Total System Global Area 1068937216 bytesFixed Size		    2220200 bytesVariable Size		  616566616 bytesDatabase Buffers	  444596224 bytesRedo Buffers		    5554176 bytesDatabase mounted.Database opened.SQL> exit

[[email protected] ~]$ sqlplus  / as sysdba 

SQL*Plus: Release 11.2.0.1.0 Production on Fri Apr 17 09:43:10 2015

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

Connected to:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> SHOW USER;  USER is "SYS"

SQL> SELECT instance_name FROM v$instance;

INSTANCE_NAME----------------orcl

这是可以的,成功地连接了oracle,现在我能启动这个数据库,将其关闭,或者完成我想做的任何管理工作。不过,假设我从另外一台机器通过网络完成这些操作,会怎么样呢?问题的答案就是ORA-01031错误 。

在网络上,对于SYSDBA的操作系系统认证不再凑效,即使把

REMOTE_LOGIN_PASSWORDFILECD

参数设置为TRUE也不例外。所以,操作系统认证不可行。如前所述,如果想启动一个实例进行装载,并打开一个数据库,根据定义还没有数据库,也无法从中查找认证的详细信息。但是这里我打开了数据库但还是没办法使用dba权限远程访问,还是出现ORA-01031: insufficient privileges错误。

因此密码文件"应运而生"。密码文件保存了一个用户名和密码列表,这些用户名和密码分别对应于可以通过网络远程认证为SYSDBA的用户。Oracle必须使用这个文件来认证用户,而不是数据库中存储的正常密码文件。

下面校正这种情况。首先,我们要本地启动数据库,以便设置REMOTE_LOGIN_PASSWORDFILE.

查看REMOTE_LOGIN_PASSWORDFILE的值

SQL> show parameter remote_login_passwordfile

NAME				      TYPE		    VALUE-------------------------------  ---------------  ------------------------------remote_login_passwordfile    string		    EXCLUSIVE

这个参数有三种值:

NONE:没有密码文件 ,不存在"远程SYSDBA"登录

SHARED:多个数据库可以使用同样的密码文件

EXCLUSIVE:只有一个数据库使用了一个给定的密码文件

在Oracle 11g R2中这个参数的默认值就是EXCLUSIVE

假如remote_login_passwordfile参数的值不是EXCLUSIVE修改方法如下,但实例启动和运行时,这个设置不能动态改变,所以不得不关闭、要想认它生效必需重启实例

SQL> ALTER SYSTEM SET remote_login_passwordfile=exclusive SCOPE=spfile;

下一步是使用命令行工具orapwd创建和填写这个初始的密码文件:

$ orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=oracle entries=20

这样创建了一个名为oraporcl的密码文件,这个文件存放在$ORACLE_HOME/dbs目录中.

目前该文件中只有一个用户,也就是用户sys,尽管数据库上还有其他SYSDBA账户,但是它们还不在密码文件中,不过基于以上设置 ,我们可以第一次作为SYSDBA通过网络连接oracle

[C:\instantclient_11_2]$ sqlplus sys/[email protected] as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Fri Apr 17 21:55:21 2015

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

Connected to:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> SHOW USER;USER is "SYS"

小结:

本篇讲了oracle基本的网络连接,对网络相关的三个配置文件做了最简单的配置,讲了密码文件 ,并实现了在实例启动的情况下,从远程计算机通过即时客户端以dba权限登录数据库。

未完成的内容,在没有实例启动的情况下从远程登录oracle并启动数据库。监听器的动态配置和静态配置、oracle的四种连接方法

本篇的内容到此为止,恭候阅读,不对的地址请批评指证,讨论.

qq:276631587

good luck!

时间: 2024-10-10 07:36:09

So Easy! Oracle在Linux上的安装配置系列四的相关文章

So Easy! Oracle在Linux上的安装配置系列一

So Easy! Oracle在Linux上的安装配置系列一 本文为So Easy!Oracle在linux上的安装和配置序列的第一篇Oracle安装基础环境的搭建 VMware Workstation 11.0 配置和CentOS-6.6-x86_64安装 本文环境及所需软件: Win7 Sevice Pack1 内存 6GB VMware Workstation 11.0  build-2305329 CentOS-6.6-x86_64-bin-DVD1.iso Xmanger Enterp

So Easy! Oracle在Linux上的安装配置系列七

So Easy! Oracle在Linux上的安装配置系列六 上几篇中,我们安装了oracle数据库软件,创建了数据库配置了监听,本篇是本系统文章的最后一篇,Oracle企业管理器的创建. 当完成了以上所有步骤后使用 $emctl start dbconsole 启动oracle企事业管理器,会出现以下错误,提示说没有设置ORACLE_UNQNAME环境变量 [[email protected] ~]$ emctl start dbconsoleEnvironment variable ORAC

So Easy! Oracle在Linux上的安装配置系列三使用create database创建数据库

本文为So Easy! Oracle在Linux上的安装配置系列的第三篇,使用create database创建数据库,本序列第一篇介绍了学习实验环境的搭建包括:在win 7中使用VMware Workstation 创建虚拟机,安装CentOS-6.6-x86_64,网络配置 和使用xshell连接远程linux服务器,上传Oracle软件和使用操作系统安装光盘搭建本地yum源,第二篇专门说了Oracle11g R2在CentOS6.6上的安装,包括Oracle安装前的准备工作,并以图文详细介

So Easy! Oracle在Linux上的安装配置系列五

So Easy! Oracle在Linux上的安装配置系列五 本篇是监听器的配置的续篇,上一小节我们创建了一个监听器,创建了密码文,在监听和实例都启动的情况下,从远程windows即时客户端连接到了oracle服务器.本篇我将继续说监听器,还将完成相关的实验 以下内容整理自网络 Oracle 监听器 Listener 是一个重要的数据库服务器组件,在整个 Oracle 体系结构中,扮演着重要的作用.它负责管理 Oracle 数据库和客户端之间的通讯,它在一个特定的网卡端口(默认是TCP 1521

So Easy! Oracle在Linux上的安装配置系列二

本篇是So Easy!Oracle11gr2在linux上的安装配置的第二篇,本篇将讲述oracle11g r2的安装 oracle安装的前期准备 oracle的安装 工具软件rlwrap-0.42.tar.gz的安装 oracle环境变量设置 文档位置: http://docs.oracle.com/cd/E11882_01/install.112/e24326/toc.htm 1.oracle安装的前期准备 7安装Linux的一些基础开发包 # export LANG=en_US.UTF-8

So Easy! Oracle在Linux上的安装配置系列六

oracle数据库的几种连接方法 上篇内容回顾 一个监听器配置文件中有一个或多个监听的协议地址,支持服务器的信息和控制运行时行为的参数,监听器配置存储在名为listener.ora的配置文件中,因为所有的配置参数都有默认值,所以在没有配置的情况下它仍然可以被启动和使用,这个默认监听器名字是LISTENET,它监听在以下TCP/IP协议地址,(ADDRESS=(PROTOCOL=tcp)(HOST=host_name)(PORT=1521))但这个默认监听器它在启动时不支持任何的服务 监听器转发客

linux上Elasticsearch 安装配置、网页访问

一.ElasticSearch简述 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎.设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便.我们建立一个网站或应用程序,并要添加搜索功能,但是想要完成搜索工作的创建是非常困难的.我们希望搜索解决方案要运行速度快,我们希望能有一个零配

ftp协议详解与vsftpd在linux上的安装配置

什么是FTP? FTP,文件传输协议,可以实现在网络上传输多种类型的文件 一个完整的FTP文件传输需要建立两种类型的连接,先建立控制连接,然后建立数据连接 控制连接:客户端首先向服务端的TCP21号端口发起建立连接的请求,服务器接收请求,完成控制连接的建立 数据连接:控制连接建立后,开始建立数据连接,用于传输文件.数据连接有主动传输模式和被动传输模式. 主动传输模式图 被动传输模式图 主动传输和被动传输的优缺点: 1.主动传输对FTP服务器的管理有利,但对客户端不利,因为客户端的防火墙可能会禁止

linux上svn安装配置

1       SVN源码包下载 subversion-1.4.4.tar.bz2       http://subversion.tigris.org/downloads/subversion-1.4.4.tar.bz2 subversion-deps-1.4.4.tar.bz2  http://subversion.tigris.org/downloads/subversion-deps-1.4.4.tar.bz2 2       编译步骤 执行以下2条命令,解压得到源程序: tar -jx