[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;
--//这样连接模式就是专用服务器模式.

时间: 2024-10-18 11:32:33

[20171106]配置客户端连接注意.txt的相关文章

Centos 6.4安装pptp同时配置debian gnome桌面vpn客户端连接

 pptp vpn我相信很多的朋友都有听过吧,今天我就为各位介绍Centos 6.4安装pptp同时配置debian gnome桌面vpn客户端连接的例子,希望下文对各位有帮助.     以下是基于Linode VPS Centos 6.4下安装pptp服务,记住Linode VPS是Xen虚拟的,所以请看清楚环境配置. 快速安装,当然少不了yum: # rpm -Uvh http://poptop.sourceforge.net/yum/stable/rhel6/pptp-release-cu

启动-zookeeper客户端连接一直报无法定位登录配置信息,可能原因有哪些?求教?

问题描述 zookeeper客户端连接一直报无法定位登录配置信息,可能原因有哪些?求教? 启动三台主机,有两台主机客户端连接zookeeper时一直报错无法定位登录配置,可能都有哪些原因造成的? 解决方案 这是我执行zkCli.cmd报错信息:图片说明 大家帮忙分析分析错误原因 解决方案二: 首先要清楚,slave之间是不用建互信的. 你看错误很显示是连不上zk.那继续跟,为什么连不上. 先jps一下,看看zk启来了吗,经常有的问题会导致它启不来.然后telnet zk的远程端口,看看能不能通,

openvpn配置出错-win7系统中OpenVPN配置时,服务器可以连接,客户端连接不上

问题描述 win7系统中OpenVPN配置时,服务器可以连接,客户端连接不上 client.log中报错如下: Wed Dec 16 21:07:04 2015 library versions: OpenSSL 1.0.1j 15 Oct 2014, LZO 2.08 Enter Management Password: Wed Dec 16 21:07:04 2015 MANAGEMENT: TCP Socket listening on [AF_INET]127.0.0.1:25340 W

配置ORACLE 客户端连接到数据库

       --================================= -- 配置ORACLE 客户端连接到数据库 --=================================       Oracle 客户端连接到Oracle 数据库服务器貌似不同于SQL serve中的网络配置,其实不然,只不过所有的SQL server 运行于Windows平台,故很多配置直接集成到了操作系统之中.所以无需配置客户端即可连接到服务器.Oracle 客户端连接到数据库依赖于Oracle

Oracle RAC实现客户端连接负载均衡

实现负载均衡(Load Balance)是Oracle RAC最重要的特性之一,主要是把负载平均分配到集群中的各个节点,以提高系统的整体吞吐能力.通常情况下有两种方式来实现负载均衡,一个是基于客户端连接的负载均衡,一个是基于服务器端监听器(Listener)收集到的信息来将新的连接请求分配到连接数较少实例上的实现方式.本文主要讨论的是基于客户端连接的负载均衡,并给出演示. 一.客户端的负载均衡 客户端的负载均衡主要是通过为tnsnames.ora增加load_balance=yes条目来实现,下

锐捷客户端连接失败怎么办

  锐捷客户端连接失败怎么办 锐捷连不上解决办法 方法一:重装网卡 第一步 造成无法认证服务器可能是因为网卡无法正常工作.这时候,可以win+r输入devmgmt.msc,打开设备管理器; 第二步 找到设备管理器--网络适配器,找到本地网卡,可以这样区分,没有wireless的就是本地网卡; 第三步 选中本地网卡,右键单击,然后先[卸载]网卡,等卸载完毕后,再重新[扫描硬件改动]重装网卡,使网卡恢复初始设置. 方法二:修改网卡模式 第一步 单击计算机右下角的网络标识,选中[打开网络共享和中心];

vpn xl2tpd-板子上的xl2tpd客户端连接xl2tpd的vpn server,总是连接不上?

问题描述 板子上的xl2tpd客户端连接xl2tpd的vpn server,总是连接不上? 我在amlogic板子上,板子上为android系统,交叉编译xl2tpd,然后push到板子上,配置好相关配置文件,运行xl2tpd, 去连接ubantu14.04上的vpn server,vpn server使用的也是xl2tpd, 我用手机或另外一台ubantu系统都可以连接,运行板子上的xl2tpd,echo "c testvpn" > /var/run/xl2tpd/l2tp-c

DB2新手使用的一些小笔记:新建实例、数据库路径不存在、客户端连接 ._DB2

首先,是添加数据库实例: DB2的实例之间是相互独立的,实例可以被看作是数据库的容器.而默认DB2装好后会自己建一个名为DB2的实例.我们这里需要新建一个,命令这样敲: 在db2的命令行工具里面打开命令行,然后输入: 复制代码 代码如下: db2icrt INSTNAME 它这个实例名还挺恶心的,必须是小于8个字符的名字. 再用命令行创建好以后才能用那个控制中心的添加实例的功能来添加刚才创建的实例.其实这个添加只是把已有的实例添加到GUI的控制中心里,而不是创建实例....所以,必须注意的是,在

Oracle RAC 客户端连接负载均衡(Load Balance)

        实现负载均衡(Load Balance)是Oracle RAC最重要的特性之一,主要是把负载平均分配到集群中的各个节点,以提高系统的整体吞吐能力.通常情况下有两种方式来实现负载均衡,一个是基于客户端连接的负载均衡,一个是基于服务器端监听器(Listener)收集到的信息来将新的连接请求分配到连接数较少实例上的实现方式.本文主要讨论的是基于客户端连接的负载均衡,并给出演示.         与负载均衡配置之前的监听配置请参考              ORACLE RAC 监听配置