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
8 【共享连接配置实例】
在共享服务架构中至少要包含一个调度进程。当一个连接请求发起,监听进程不会启动专有服务进程,而是维护一系列的调度进程
连接请求被路由到为给定服务名提供服务的负载最小的调度程序。在会话期间,用户保持与同一个调度程序的连接
与专用服务器进程不同,单个调度程序可以管理数百个用户会话
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)要求分配 3个dispatcher,最大dispatchers能支持10个
alter system set dispatchers='(protocol=tcp)(dispatchers=3)';
alter system set max_dispatchers=10;
ps -ef | grep ora_d0 | grep -v grep
共享server为10,最大共享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.ora与sqlnet.ora
1.配置sqlnet.ora,支持local naming和easy 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,此连接失败
- 不做任何说明:如果服务器端配置了dispatchers,SHARED 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);
注:11gR2的session处于空闲时,查看状态SERVER是none,但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))
)
)