[20171106]配置客户端连接注意.txt
[20171106]配置客户端连接注意.txt
--//在配置客户端连接时一般建议使用Net Manager工具,windows下调用执行Net Manager.
--//linux下执行 netmgr,这样能一定程度避免copy & paste的 错误.
--//我这里想说的是在连接类型选择上一定要注意,一般存在4中选择:
数据库默认设置
专用服务器
共享服务器
池中服务器.
--//最好明确设置那种模式,而不是选择"数据库默认设置"模式,这样会导致以后配置启用"共享服务器"出现问题.
--//最近我们生产系统就遭遇这样的问题,还是通过例子说明:
1.环境:
SYS@book> @ &r/ver1
PORT_STRING VERSION BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
--//我在我的client配置如下:
R:\>cat tnsnames.ora
# tnsnames.ora Network Configuration File: r:\tnsnames.ora
# Generated by Oracle configuration tools.
BOOK =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.78)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = book)
)
)
BOOK1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.78)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = book)
)
)
BOOK2 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.78)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = SHARED)
(SERVICE_NAME = book)
)
)
--//注第一种情况连接串BOOK就是"数据库默认设置".没有明确参数SERVER的值.许多开发包括我们下发的程序都是这样设置的.
2.我开启共享服务模式:
SYS@book> show parameter dispatchers
NAME TYPE VALUE
---------------- -------- -------------------------------------
dispatchers string (PROTOCOL=TCP) (SERVICE=book,bookXDB)
max_dispatchers integer
SYS@book> show parameter shared_server
NAME TYPE VALUE
---------------------- ------- -----
max_shared_servers integer 1
shared_server_sessions integer
shared_servers integer 1
--//我打开2个会话:
R:\>sqlplus scott/book@book
R:\>sqlplus scott/book@book
--//打开另外会话以sys用户执行如下(session 3):
--//session 3:
SELECT s.sid
,s.serial#
,p.spid
,p.pid
,p.serial# p_serial#
,s.SERVER
,s.status
,s.username
, 'alter system kill session '''
|| s.sid
|| ','
|| s.serial#
|| ''''
|| ' immediate;'
c50
FROM v$session s, v$process p
WHERE s.paddr = p.addr and s.username='SCOTT';
SID SERIAL# SPID PID P_SERIAL# SERVER STATUS USERNAME C50
----- ------- ------ ------- ---------- --------- -------- ---------- --------------------------------------------------
262 241 5750 19 1 NONE INACTIVE SCOTT alter system kill session '262,241' immediate;
263 77 5750 19 1 NONE INACTIVE SCOTT alter system kill session '263,77' immediate;
--//你可以发现现在2个会话没有执行任何语句,status='INACTIVE',server='NONE'.如果你在其中会话执行语句.
--//session 1:
select count(*) from emp,emp,emp,emp,emp,emp,emp,emp;
--//session 3:
SID SERIAL# SPID PID P_SERIAL# SERVER STATUS USERNAME C50
----- ------- ------ ------- ---------- --------- -------- ---------- --------------------------------------------------
263 77 5750 19 1 NONE INACTIVE SCOTT alter system kill session '263,77' immediate;
262 241 5752 20 1 SHARED ACTIVE SCOTT alter system kill session '262,241' immediate;
--//你可以发现其中1个会话status从'INACTIVE'->'ACTIVE',server从'NONE'=>SHARED.
--//在sessiono 1没有执行结束时,在session 2执行:
SCOTT@book> select sysdate from dual ;
--//session 2会挂起,这个是因为我没有设置dispatchers参数D000进程太少.
--//如果这时在执行如下:
R:\>sqlplus scott/book@book
SQL*Plus: Release 12.1.0.1.0 Production on Mon Nov 6 12:00:05 2017
Copyright (c) 1982, 2013, Oracle. All rights reserved.
ERROR:
ORA-28547: connection to server failed, probable Oracle Net admin error
3.重复测试看看awr报表:
--session 3:
exec dbms_workload_repository.create_snapshot();
--session 1:
select count(*) from emp,emp,emp,emp,emp,emp,emp,emp;
--session 2:
select sysdate from dual ;
--//等待结束.
--session 3:
exec dbms_workload_repository.create_snapshot();
--//查看awr报表.实际上根本看不出问题.
SYS@book> @ &r/wait
P1RAW P2RAW P3RAW P1 P2 P3 SID SERIAL# SEQ# EVENT STATE WAIT_TIME_MICRO SECONDS_IN_WAIT
---------------- ---------------- ---------------- ---------- ---------- ---------- ---------- ---------- ---------- ---------------------------------------- ------------------- --------------- ---------------
000000004D545300 0000000000000001 00 1297371904 1 0 262 241 77 SQL*Net message to client WAITED SHORT TIME 5 31
--//这个也是共享服务器模式的弊端.执行的语句必须很快完成,不然会影响别的会话执行sql语句.blog.itpub.net/267265/viewspace-2124172/
4.如果增加参数max_shared_servers,max_dispatchers数量:
SYS@book> alter system set max_shared_servers=6 scope=memory;
System altered.
SYS@book> alter system set max_dispatchers=10 scope=memory ;
System altered.
SYS@book> alter system set dispatchers='(PROTOCOL=TCP) (SERVICE=book,bookXDB)(dispatchers=6)' scope=memory;
System altered.
SYS@book> alter system register ;
System altered.
$ ps -lef | egrep "d00[0-9]_book|UI[D]"
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
0 S oracle 53333 1 0 80 0 - 61860 poll_s 14:45 ? 00:00:00 ora_d000_book
0 S oracle 53471 1 0 80 0 - 61827 poll_s 14:56 ? 00:00:00 ora_d001_book
0 S oracle 53473 1 0 80 0 - 61827 poll_s 14:56 ? 00:00:00 ora_d002_book
0 S oracle 53475 1 0 80 0 - 61827 poll_s 14:56 ? 00:00:00 ora_d003_book
0 S oracle 53477 1 0 80 0 - 61827 poll_s 14:56 ? 00:00:00 ora_d004_book
0 S oracle 53479 1 0 80 0 - 61827 poll_s 14:56 ? 00:00:00 ora_d005_book
--//依次打开3个会话:
R:\>sqlplus scott/book@book
R:\>sqlplus scott/book@book
R:\>sqlplus scott/book@book
--//session 4:
SELECT s.sid
,s.serial#
,p.spid
,p.pid
,p.serial# p_serial#
,s.SERVER
,s.status
,s.username
,s.program
,p.program
, 'alter system kill session '''
|| s.sid
|| ','
|| s.serial#
|| ''''
|| ' immediate;'
c50
FROM v$session s, v$process p
WHERE s.paddr = p.addr and s.username='SCOTT';
SID SERIAL# SPID PID P_SERIAL# SERVER STATUS USERNAME PROGRAM PROGRAM C50
---------- ---------- ------ ------- ---------- --------- -------- -------- ------------ -------------------------- --------------------------------------------------
262 33 53471 29 4 NONE INACTIVE SCOTT sqlplus.exe oracle@xxxxxdg4 (D001) alter system kill session '262,33' immediate;
261 11 53473 30 2 NONE INACTIVE SCOTT sqlplus.exe oracle@xxxxxdg4 (D002) alter system kill session '261,11' immediate;
263 9 53479 33 1 NONE INACTIVE SCOTT sqlplus.exe oracle@xxxxxdg4 (D005) alter system kill session '263,9' immediate;
--//分别运行不同dispatchers上.这样就不会存在阻塞.
--//session 1:
SCOTT@book> select count(*) from emp,emp,emp,emp,emp,emp,emp,emp;
...
--//session 2:
SCOTT@book> select sysdate from dual ;
SYSDATE
-------------------
2017-11-06 15:11:00
--//session 3:
SCOTT@book> select sysdate from dual ;
SYSDATE
-------------------
2017-11-06 15:11:03
--//如果要增加S00N进程数量,修改参数:
SYS@book> alter system set shared_servers=4 scope=memory ;
System altered.
$ ps -lef | egrep "s00[0-9]_book|UI[D]"
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
0 S oracle 53335 1 3 80 0 - 60697 poll_s 14:45 ? 00:00:55 ora_s000_book
0 S oracle 53617 1 0 80 0 - 60565 poll_s 15:13 ? 00:00:00 ora_s001_book
0 S oracle 53619 1 0 80 0 - 60565 poll_s 15:13 ? 00:00:00 ora_s002_book
0 S oracle 53621 1 0 80 0 - 60565 poll_s 15:13 ? 00:00:00 ora_s003_book
5.总结:
1.讲了这么多,回到前面遇到的问题,可以发现如果client配置时使用数据库默认设置,在共享服务器存在的情况下,会优先使用.这样
如果应用配置存在问题,特别是2层应用模式,全部使用共享服务器模式连接数据库,这样如果某个sql执行很慢,就有可能阻塞业务的
正常运行,即使你配置足够的dispatchers.实际上如果你使用ezconnect连接也是共享模式.
参考链接: http://blog.itpub.net/267265/viewspace-2130292/=>[20161212]ezconnect与共享服务模式.txt
2.从上面的情况,说明在配置client时,需要选择正确的连接类型,而不是选择"数据库默认设置",以免造成不必要麻烦.
3.如果这样只能建立新的服务名,指派服务名使用共享服务器模式.
SYS@book> show parameter service
NAME TYPE VALUE
------------- ------ ---------------
service_names string BOOK, BOOKSHARE
SYS@book> alter system set dispatchers='(PROTOCOL=TCP) (SERVICE=bookshare,bookXDB)(dispatchers=6)' scope=memory;
System altered.
--//修改连接串如下:
BOOKS =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.78)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = SHARED)
(SERVICE_NAME = bookshare)
)
)
R:\>sqlplus scott/book@books
SCOTT@books> @ spid
SID SERIAL# SPID PID P_SERIAL# C50
---------- ---------- ------ ------- ---------- --------------------------------------------------
171 7 53621 37 1 alter system kill session '171,7' immediate;
--//session 4:
SELECT s.sid
,s.serial#
,p.spid
,p.pid
,p.serial# p_serial#
,s.SERVER
,s.status
,s.username
,s.program
,s.SERVICE_NAME
,p.program
, 'alter system kill session '''
|| s.sid
|| ','
|| s.serial#
|| ''''
|| ' immediate;'
c50
FROM v$session s, v$process p
WHERE s.paddr = p.addr and s.username='SCOTT';
SID SERIAL# SPID PID P_SERIAL# SERVER STATUS USERNAME PROGRAM SERVICE_NAME PROGRAM C50
--- ---------- ------ ------- ---------- --------- -------- -------- ----------- ------------ ---------------------- --------------------------------------------------
171 7 53727 32 6 NONE INACTIVE SCOTT sqlplus.exe BOOKSHARE oracle@xxxxxdg4 (D004) alter system kill session '171,7' immediate;
--//退出重新登录:
R:\>sqlplus scott/book@book
SCOTT@book> @ spid
SID SERIAL# SPID PID P_SERIAL# C50
---------- ---------- ------ ------- ---------- --------------------------------------------------
184 19 53781 38 8 alter system kill session '184,19' immediate;
--//session 4:
SYS@book> /
SID SERIAL# SPID PID P_SERIAL# SERVER STATUS USERNAME PROGRAM SERVICE_NAME PROGRAM C50
--- ---------- ------ ------- ---------- --------- -------- -------- ----------- ------------ --------------- --------------------------------------------------
184 19 53781 38 8 DEDICATED INACTIVE SCOTT sqlplus.exe book oracle@gxqyydg4 alter system kill session '184,19' immediate;
--//这样连接模式就是专用服务器模式.
[20171106]配置客户端连接注意.txt的更多相关文章
- plsql 无需配置客户端连接.
plsql 无需配置客户端连接. (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.5)(PORT=1521)))(C ...
- 【ActiveMQ】之安全机制(二)客户端连接安全
配置完管控台的安全之后,我们还要配置客户端连接安全,否则大家都可以往MQ上发送消息,这样太危险! 根据官方文档,http://activemq.apache.org/security.html Act ...
- 配置ORACLE 客户端连接到数据库
--================================= -- 配置ORACLE 客户端连接到数据库 --================================= Oracle ...
- 干货 | SSMS客户端连接京东云RDS SQL Server配置方法
干货 | SSMS客户端连接京东云RDS SQL Server配置方法 原创: 于振江 京东云开发者社区 微软SQL Server, Oracle数据库以及MySQL系列占据了关系型数据库市场的绝对 ...
- sqlserver客户端连接只显示特定数据库的配置方法
首先,在实例级,有一个 view any database的这个属性,打开时可以看到所有数据库的元数据表,因此能看到实例下所有数据库的名字.默认public角色拥有这个属性.所以新建的登陆是可以看到所 ...
- Redis客户端连接池
使用场景 对于一些大对象,或者初始化过程较长的可复用的对象,我们如果每次都new对象出来,那么意味着会耗费大量的时间. 我们可以将这些对象缓存起来,当接口调用完毕后,不是销毁对象,当下次使用的时候,直 ...
- 【RabbitMQ】CentOS安装RabbitMQ,及简单的Java客户端连接
在CentOS安装 因Rabbit MQ使用Erlang,所以需要先安装Erlang,安装过程中可能会遇到种种问题,可参考CentOS 6.5安装Erlang/OTP 17.0.然后就可以安装MQ了. ...
- redis客户端连接异常
本文参考:http://mdba.cn/2015/04/02/redistwemproxy-%e5%ae%a2%e6%88%b7%e7%ab%af%e8%bf%9e%e6%8e%a5%e5%bc%82 ...
- atitit.客户端连接oracle数据库的方式总结
客户端连接oracle数据库的方式总结 目录 Java程序连接一般使用jar驱动连接..... 桌面GUI一般采取c语言驱动oci.dll 直接连接... 间接连接(需要配置tns及其envi var ...
随机推荐
- 解决Eclipse中DDMS一直打印输出Connection attempts的问题
Eclipse/MyEclipse出现以下错误的解决方案: [2015-01-25 16:10:29 - DeviceMonitor] Adb connection Error:远程主机强迫关闭了一个 ...
- 【WebAPI No.5】Core WebAPI中的自定义格式化
介绍 Web API为JSON和XML提供媒体类型格式化程序.框架默认将这些格式化程序插入管道中.客户端可以在HTTP请求的Accept标头中请求JSON或XML. 格式化数据这个东西,其实没有什么最 ...
- C# sqlhelper 2
using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Secu ...
- JAR(Spring Boot)应用的后台运行配置
酱油一篇,整理一下关于Spring Boot后台运行的一些配置方式.在介绍后台运行配置之前,我们先回顾一下Spring Boot应用的几种运行方式: 运行Spring Boot的应用主类 使用Mave ...
- [java初探外篇]__关于StringBuilder类与String类的区别
前言 我们前面学习到String类的相关知识,知道了它是一个字符串类,并且了解到其中的一些方法,但是当时并没有太过注意到String类的特点,今天就StringBuilder类的学习来比较一下两者的区 ...
- Spring Boot + Spring Cloud 构建微服务系统(四):容错机制和熔断(Hystrix)
雪崩效应 在微服务架构中,由于服务众多,通常会涉及多个服务层级的调用,而一旦基础服务发生故障,很可能会导致级联故障,进而造成整个系统不可用,这种现象被称为服务雪崩效应.服务雪崩效应是一种因“服务提供者 ...
- nginx介绍(五) - 高可用
前言 即便想 nginx 这么牛B的服务器, 也不能保证他不挂啊, 就算不是机器出故障, 比如, 停电了, 那么机器挂了, 很正常啊. 这时候, 没有分发服务器, 网站就不能正常访问了, 咋搞? 网站 ...
- Docker入门记1
Docker是一个部署容器技术,它出现的目的主要解决开发人员在本机开发的时候安装的各类类库等一系列运行程序的包啊库啊,然后把这些引用的第三方类库和操作系统需要的配置打包起来,形成一个原子环境,然后部署 ...
- Topshelf 学习 跨平台【转载】
Topshelf 学习 跨平台 Topshelf是一个开源的跨平台的宿主服务框架,支持Windows和Mono,只需要几行代码就可以构建一个很方便使用的服务宿主. 官网:http://topshe ...
- Excel与minitab的不同
minitab是专业数据分析软件,可以直接通过导入数据源出结果,出图表, EXCEL的长处就是单元格可编辑,可视化强,也能做较多的分析,导入一些加载宏后功能更强大,但就分析能力而言,还 是比minit ...