oracle网络配置

来源:互联网 发布:java驻场开发怎么样 编辑:程序博客网 时间:2024/06/11 08:01

oracle网络配置


配置文件listener.orasqlnet.oratnsnames.ora都是放在$ORACLE_HOME\NETWORK\ADMIN目录下。

1. sqlnet.ora

这个文件来决定怎么样找一个连接中出现的连接字符串。例如我们客户端输入:sqlplus sys/oracle@orcl ,假如我的sqlnet.ora是下面这个样子:

SQLNET.AUTHENTICATION_SERVICES=(NTS)

NAMES.DIRECTORY_PATH=(TNSNAMES, EZCONNECT)

那么,客户端就会首先在tnsnames.ora文件中找orcl的记录.如果没有相应的记录则尝试把orcl当作一个主机名,通过网络的途径去解析它的 ip地址然后去连接这个ipGLOBAL_DBNAME=orcl这个实例,当然我这里orcl并不是一个主机名 ,如果我是这个样子 :NAMES.DIRECTORY_PATH=(TNSNAMES)那么客户端就只会从tnsnames.ora查找orcl的记录。

2. tnsnames.ora

这个文件提供的tnsname到主机名或者ip的对应,只有当sqlnet.ora中类似NAMES.DIRECTORY_PATH=(TNSNAMES) 这样,也就是客户端解析连接字符串的顺序中有TNSNAMES是,才会尝试使用这个文件。

PROTOCOL客户端与服务器端通讯的协议,一般为TCP,该内容一般不用改。

HOST数据库侦听所在的机器的机器名或IP地址,数据库侦听一般与数据库在同一个机器上,所以当我说数据库侦听所在的机器一般也是指数据库所在的机器。

PORT数据库侦听正在侦听的端口,可以察看服务器端的listener.ora文件或在数据库侦听所在的机器的命令提示符下通过lnsrctlstatus命令察看。此处Port的值一定要与数据库侦听正在侦听的端口一样。

SERVICE_NAME在服务器端,用system用户登陆后,sqlplus> show parameter service_name命令察看。

#你所要连接的时候输入得TNSNAME

ORCL= (DESCRIPTION = (ADDRESS_LIST =

#下面是这个TNSNAME对应的主机,端口,协议

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

(CONNECT_DATA=

#使用专用服务器模式去连接需要跟服务器的模式匹配,如果没有就根据服务器的模式自动调节

(SERVER= DEDICATED)

(SERVICE_NAME= orcl) ) )

3. listener.ora:

关于listener进程就不多说了,接受远程对数据库的接入申请并转交给oracle的服务器进程。所以如果不是使用的远程的连接,listener进程就不是必需的,同样的如果关闭listener进程并不会影响已经存在的数据库连接。

下面定义LISTENER进程为哪个实例提供服务这里是ORCL,并且它对应的ORACLE_HOMEGLOBAL_DBNAME 其中GLOBAL_DBNAME不是必需的除非使用HOSTNAME做数据库连接

SID_LIST_LISTENER=

  (SID_LIST =

    (SID_DESC =

      (GLOBAL_DBNAME = ORCL)

      (ORACLE_HOME = /u01/oracle)

      (SID_NAME = ORCL)

    ))

LISTENER监听器的名字,一台数据库可以有不止一个监听器

再向下面是监听器监听的协议,ip,端口等,这里使用的tcp1521端口,并且使用的是主机名

LISTENER=

  (DESCRIPTION_LIST =

    (DESCRIPTION =

      (ADDRESS = (PROTOCOL = IPC)(KEY =EXTPROC1521))

    )

    (DESCRIPTION =

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

    )

  )

上面的例子是一个最简单的例子,但也是最普遍的。一个listener进程为一个instance(SID)提供服务。

上面说到的三个文件都可以通过图形的配置工具来完成配置$ORACLE_HOME/netca$ORACLE_HOME/netmgr,这样一来总体结构就有了:

当你输入sqlplus sys/oracle@orcl的时候

1. 查询sqlnet.ora看看名称的解析方式,发现是TNSNAME

2. 则查询tnsnames.ora文件,从里边找orcl的记录,并且找到主机名,端口和service_name

3. 如果listener进程没有问题的话,建立与listener进程的连接。

4. 根据不同的服务器模式如专用服务器模式或者共享服务器模式,listener采取接下去的动作。默认是专用服务器模式,没有问题的话客户端就连接上了数据库的server process

5. 这时候网络连接已经建立,listener进程的历史使命也就完成了。     

平时排错可能会用到的 :

1lsnrctlstatus查看服务器端listener进程的状态

LSNRCTL>status

Connectingto (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))

STATUSof the LISTENER

------------------------

Alias                    LISTENER---监听器名称

Version                  TNSLSNR for Linux: Version11.2.0.1.0 - Production

StartDate                17-OCT-2013 08:31:18

Uptime                   0 days 0 hr. 0 min. 5 sec

TraceLevel               off

Security                 ON: Local OS Authentication

SNMP                     OFF

ListenerParameter File  /u01/oracle/network/admin/listener.ora

ListenerLog File        /u01/diag/tnslsnr/localhost/listener/alert/log.xml

ListeningEndpoints Summary...

(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost.localdomain)(PORT=1521)))

ServicesSummary...

Service "ORCL" has 1 instance(s).--- service name为'ORCL'的监听进程,为实例'oracl'服务

Instance "ORCL", status UNKNOWN, has 1 handler(s) for thisservice...

Thecommand completed successfully

2tnsping查看客户端sqlnet.oratnsname.ora文件的配置正确与否,及对应的服务器的listener进程的状态:

C:\Users\libo>tnspingorcl

TNSPing Utility for 32-bit Windows: Version 11.2.0.1.0 - Production on 17-10-201323:35:09

Copyright(c) 1997, 2010, Oracle.  All rightsreserved.

已使用的参数文件:

E:\install\oracle\product\11.2.0\dbhome_1\network\admin\sqlnet.ora

已使用 TNSNAMES 适配器来解析别名

尝试连接 (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST =192.1

68.25.133)(PORT= 1521))) (CONNECT_DATA = (SERVICE_NAME = orcl.domain)))OK (20 毫秒)

3showsga 查看instance是否已经启动 :

SQL>show sga

TotalSystem Global Area  845348864 bytes

FixedSize                1339796 bytes

VariableSize             570429036 bytes

DatabaseBuffers          268435456 bytes

RedoBuffers              5144576 bytes
 

SERVICE_NAME查询与新增

SERVICE_NAME oracle在监听器中注册的服务名称,如SERVICE_NAMEaaa.domainbbb.domainccc.domain都可以,通过下列命令只查询oracle实例的SERVICE_NAM的名称

SQL> show parameter service_names,只显示服务的名称

NAME                 TYPE         VALUE

-------------------------------------------------------------

service_names        string       aaa,bbb,ccc

新增监听名称:

SQL> alter system set service_names= 'dddeee';

Systemaltered.

查看SERVICE_NAM详细信息:

LSNRCTL> service

Connectingto (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))

ServicesSummary...

Service"ORCL" has 1 instance(s).

  Instance "ORCL", status UNKNOWN,has 1 handler(s) for this service...

    Handler(s):

      "DEDICATED" established:1refused:0

         LOCAL SERVER

Service"ddd.domain" has 1 instance(s).---service name + 域名

  Instance "orcl", status READY, has 1 handler(s) for this service...监听程序启动状态

    Handler(s):

      "DEDICATED" established:2refused:0 state:ready

         LOCAL SERVER

总结

SID = ORACLE_SID = instance_name =grobal_db_name - db_domain

grobal_db_name = instance_name + db_domain

instance_name = db_name

原创粉丝点击