oracle网络

oracle网络

官方文档入口:

Net Services Administrator's Guide ---> Net Services Reference

1 Oracle Net是什么

建立在通用的TCP和IPC之上的网络协议

1)服务器端的listener(监听器)负责注册的Oracle的服务

2)远程客户端通过Oracle Net访问Oracle 服务器端的服务

3)以TCP协议为基础的OracleNet必须描述三个基本要素:

  • 协议是TCP
  • 服务器的IP地址或主机名
  • 端口号

 

2 配置文件

Oracle Net配置文件都是文本形式的,可以通过netca实用程序生成和修改,也可以使用文本编辑器生成和修改

1)Oracle Net配置文件的路径

$ORACLE_HOME/network/admin/

2)三个Oracle Net配置文件

  • listener.ora         在服务器端的配置文件
  • tnsnames.ora     在客户端的配置文件
  • sqlnet.ora           描述连接方式的配置文件

2.1 netca创建的listener.ora

lsnrctl status

cd $ORACLE_HOME/network/admin
cat listener.ora

如果没有listener.ora也可以启默认的动态监听

mv listener.ora listener.ora.bak
lsnrctl stop
lsnrctl start

alter system register;

lsnrctl status

 

3 轻松连接方式(ezconnect)

优点:不需要网络配置文件的描述

缺点:登录不方便

连接方法:只要服务器端启动默认的监听器listener,并数据库打开(动态注册)

远程登录语法为:sqIplus 用户/密码@IP地址:端口号/服务名  (主机名、端口号、服务名)

sqlplus scott/tiger@192.168.9.10:1521/orcl

客户端sqlnet.ora不存在,默认支持ezconnect;

客户端sqlnet.ora文件存在,使用轻松连接,需要配置sqlnet.ora添加ezconnect

官方文档入口:

Net Services Administrator's Guide ---> 8 Configuring Naming Methods

3.1 netca中命名方法配置

3.2 客户端sqlnet.ora配置文件(win7)

 

4 动态注册

1)实例启动后,LREG每分钟自动将服务名(service_name注册到监听器中也可以通过alter system register命令通知LREG立刻注册

2)系统有一个默认的监听器叫做LISTENER,端口号是1521,利用它可以不需要listener.ora配置文件

3)动态注册要求实例至少启动到mounted状态,listener监听器才能注册成功

如果不想使用默认的listener监听器,可以自定义一个动态监听器

关闭默认动态监听,恢复listener.ora文件

lsnrctl stop
mv listener.ora.bak listener.ora

4.1 配置非默认端口1522动态监听LSNR1

listener.ora配置文件描述自定义监听器

官方文档入口:

Net Services Reference ---> 7 Oracle Net Listener Parameters (listener.ora)                Example 7-1 listener.ora File【推荐】

cd $ORACLE_HOME/network/admin
vi listener.ora

 追加写入:

LSNR1=
  (DESCRIPTION=
    (ADDRESS_LIST=
    (ADDRESS=(PROTOCOL=tcp)(HOST=dba)(PORT=1522))
    )
  )

启动监听程序LSNR1

lsnrctl start lsnr1

alter system register;

lsnrctl status lsnr1

实例没有成功注册到非默认端口的监听lsnr1

4.2 修改local_listener参数

使用非默认端口的动态监听程序时,需要修改local_listener参数

方法一:

alter system set local_listener='(ADDRESS=(PROTOCOL=tcp)(HOST=dba)(PORT=1522))';
show parameter local_listener
alter system register;

原来的1521端口的默认监听没有注册

方法二:local_listener=network_name

vi tnsnames.ora

追加写入:

ORCL1 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = dba)(PORT = 1522))
  )

alter system set local_listener='orcl','orcl1';
show parameter local_listener
alter system register;

lsnrctl status
lsnrctl status lsnr1

实例同时注册到两个动态监听程序

 

5 静态注册

要点:

  • 静态注册必须在listener.ora中描述
  • 实例不必启动,静态监听器也能注册
  • 服务器启动静态监听后,可以通过远程启动数据库

静态注册的描述分为两部分内容::

  • 网络三要素:服务名描述:GLOBAL_DBNAME全局数据库名(静态注册特征)
    •   ①Protocal
    •   ②Host
    •   Port

listener.ora配置示例:

  配置1523端口的静态监听程序LSNR2实现prod.enmoedu.com的静态注册

官方文档入口:

Net Services Reference ---> 7 Oracle Net Listener Parameters (listener.ora)        Example 7-1 listener.ora File

LSNR2=
  (DESCRIPTION=
    (ADDRESS_LIST=
    (ADDRESS=(PROTOCOL=tcp)(HOST=ORCL)(PORT=1523))
    )
  )
SID_LIST_LSNR2=
  (SID_LIST=
    (SID_DESC=
      (GLOBAL_DBNAME=ORCL)
      (ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1)
      (SID_NAME=ORCL)
    )
  )

lsnrctl start lsnr2

数据库实例关闭后,通过动态注册的监听程序无法连接到数据库实例(至少要mounted状态)静态注册的监听程序可以通过网络连接数据库,并进行远程启动数据库实例

 

6 客户端配置文件tnsnames.ora

1)可以描述登录多个服务器

2)示例(win7端手工配置tnsnames.ora)

静态注册可以实现远程启动数据库

6.1 tnsping

C:\Windows\System32> tnsping orcl

关闭监听程序后,对应的tnsping不通

lsnrctl stop
lsnrctl start

刚刚启动动态监听程序,实例没有注册时,tnsping通,但是无法使用tns别名登陆

 

7 理解监听器

1)实例以service的形式对外提供服务,监听器负责注册service

2)Service_name对外屏蔽了实例和数据库的复杂描述

3)客户端tnsnames.ora的SERVICE_NAME与服务器端listener.ora的静态监听中GLOBAL_DBNAME等同

4)listener.ora中监听器的SID_NAME与实例的SID等同

5)一个$ORACLE_HOME下只能对应一个listener.ora和tnsnames.ora

6)一个linstener.ora可以描述多个监听器

7)一个tnsnames.ora可以描述多个网络连接符

8)一个listener.ora可以为多个数据库描述监听器

9)一个实例可以对应多个service_name

 

【共享连接配置实例】

  在共享服务架构中至少要包含一个调度进程。当一个连接请求发起,监听进程不会启动专有服务进程,而是维护一系列的调度进程

  连接请求被路由到为给定服务名提供服务的负载最小的调度程序。在会话期间,用户保持与同一个调度程序的连接

  与专用服务器进程不同,单个调度程序可以管理数百个用户会话

  Dispatchers并不实际处理用户请求的工作。相反,它们将用户请求传递给位于SGA的共享池部分中的公共队列

  共享服务器进程接管了专用服务器进程的大部分工作,从队列中提取请求并处理它们,直到它们完成

  因为用户会话可能有多个共享服务器进程处理的请求,所以通常存储在PGA中的大多数内存结构必须位于共享内存位置(默认情况下,在共享池中)。但是,如果配置了大池,或者设置了SGA_TARGET自动内存管理,这些内存结构存储在SGA的大池部分

linux

关闭所有监听程序

lsnrctl stop

删除所有配置文件 listener.ora tnsnames.ora sqlnet.ora

8.1 sharded server mode的几个参数

  • dispatchers                                                    调度进程数,一个despatcher process理论上可以支持 256 user process请求
  • max_dispatchers dispatcher process            最大数量,dispatchers<=max_dispatchers
  • shared_servers                                              共享服务器进程数,与 dispatcher process数有关,最大不超过max_shared_servers
  • max_shared_servers                                     所有session可使用的共享进程的最大值

8.2 参数修改

1要求session登录总数限制在300个以内,其中专用连接100个,共享连接200

alter system set sessions=300 scope=spfile;
alter system set shared_server_sessions=200;
alter system set processes=150 scope=spfile;

注:processes=专用连接数+后台进程数+100*10%)约=150

2要求分配 3dispatcher,最大dispatchers能支持10

alter system set dispatchers='(protocol=tcp)(dispatchers=3)';
alter system set max_dispatchers=10;
ps -ef | grep ora_d0 | grep -v grep

共享server10,最大共享server能支持30

alter system set shared_servers=10;
alter system set max_shared_servers=30;
shutdown immediate
startup
ps -ef | grep ora_s0 | grep -v grep

show parameter dispatcher
show parameter shared_server

ps -ef |grep ora_d0
ps -ef |grep ora_s0

8.3 配置两个监听器

listener:端口1521,支持ORCL(服务名 orcl.example.com)

lsnr2:端口1522,仅支持动态注册

配置listener.ora

vi listener.ora

写入:

LISTENER=
  (DESCRIPTION=
    (ADDRESS_LIST=
      (ADDRESS=(PROTOCOL=tcp)(HOST=dba)(PORT=1521))
    )
  )

SID_LIST_LISTENER=
  (SID_LIST=
    (SID_DESC=
      (GLOBAL_DBNAME=dba)
      (ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1)
      (SID_NAME=ORCL)
    )
  )

LSNR2=
  (DESCRIPTION=
    (ADDRESS_LIST=
      (ADDRESS=(PROTOCOL=tcp)(HOST=dba)(PORT=1522))
    )
  )

开启监听

lsnrctl start
lsnrctl start lsnr2

8.4 配置tnsnames.orasqlnet.ora

1.配置sqlnet.ora,支持local namingeasy connect

vi sqlnet.ora

写入:

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

2.配置orcl_d使用专用连接模式连接到默认监听

3.配置orcl_s使用共享连接模式连接到lsnr2

4.配置orcl_fs能够首先使用默认监听,不成功时使用lsnr2

vi tnsnames.ora

写入:

orcl_d=
  (DESCRIPTION=
    (ADDRESS=(PROTOCOL=tcp)(HOST=orcl)(PORT=1521))
    (CONNECT_DATA=
      (SERVICE_NAME=orcl)
      (server=dedicated)
    )
  )

orcl_s=
  (DESCRIPTION=
    (ADDRESS=(PROTOCOL=tcp)(HOST=dba)(PORT=1522))
    (CONNECT_DATA=
      (SERVICE_NAME=orcl)
      (server=shared)
    )
  )

orcl_fs=
  (DESCRIPTION=
    (ADDRESS_LIST=
      (FAILOVER=on)
      (LOAD_BALANCE=off)
      (ADDRESS=(PROTOCOL=tcp)(HOST=dba)(PORT=1521))
      (ADDRESS=(PROTOCOL=tcp)(HOST=dba)(PORT=1522)))
    (CONNECT_DATA=
      (server=dedicated)
      (SERVICE_NAME=orcl)
    )
  )

注意:

  • (SERVER = DEDICATED):表示此连接使用DEDICATED SERVER MODE缺省的配置
  • (SERVER = SHARED):表示此连接使用SHARED SERVER MODE,如果服务器端未配置dispatchers,此连接失败
  • 不做任何说明:如果服务器端配置了dispatchersSHARED SERVER MODE优先

8.5 设置local_listener

alter system set local_listener='orcl_fs';
show parameter local_listener

8.6 查看监听器状态

lsnrctl status
lsnrctl status lsnr2

8.7 远程连接依次以两个session登录

select sid,server,status from v$session where sid=(select sid from v$mystat where rownum=1);

注:11gR2session处于空闲时,查看状态SERVERnone,但active状态的应该是SHARE

8.8 【扩展】添加EMREP配置到静态监听程序

如果当前服务器上除了dbca创建的PROD库,还有手工建库创建的EMREP如果需要静态监听listener同时注册emrep服务,则增加EMREP部分配置即可

LISTENER=
  (DESCRIPTION=
    (ADDRESS_LIST=
      (ADDRESS=(PROTOCOL=tcp)(HOST=dba)(PORT=1521))
    )
  )

SID_LIST_LISTENER=
  (SID_LIST=
    (SID_DESC=
      (GLOBAL_DBNAME=dba)
      (ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1)
      (SID_NAME=ORCL)
    )
    (SID_DESC=
    (GLOBAL_DBNAME=EMREP)     (ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1)     (SID_NAME=EMREP) ) ) LSNR2= (DESCRIPTION= (ADDRESS_LIST= (ADDRESS=(PROTOCOL=tcp)(HOST=dba)(PORT=1522)) ) )

posted @ 2021-06-25 16:09  chchcharlie、  阅读(169)  评论(0编辑  收藏  举报