[20170825]11G备库启用DRCP连接3.txt

--//昨天测试了11G备库启用DRCP连接,要设置alter system set audit_trail=none scope=spfile ;
--//参考链接http://blog.itpub.net/267265/viewspace-2144036/.
--//在测试过程中我遇到1个奇怪问题,就是如果主库没有打开drcp,备库执行exec dbms_connection_pool.start_pool();失败.
--//今天分析看看.

1.环境:
SYS@bookdg> @ 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

SYS@bookdg> exec dbms_connection_pool.start_pool();
BEGIN dbms_connection_pool.start_pool(); END;

*
ERROR at line 1:
ORA-56501: DRCP: Pool startup failed
ORA-56501: DRCP: Pool startup failed
ORA-06512: at "SYS.DBMS_CONNECTION_POOL", line 4
ORA-06512: at line 1

--//在主库没有启动drcp的情况下,在备库启动会报错.

$ oerr ora 56501
56501, 0000, "DRCP: Pool startup failed"
// *Cause: The connection pool failed to start up.
// *Action: Check logs for details.

2.分析:
--//先做一个10046跟踪看看.

SYS@bookdg> @ &r/10046on 12
old   1: alter session set events '10046 trace name context forever, level &1'
new   1: alter session set events '10046 trace name context forever, level 12'
Session altered.

SYS@bookdg> exec dbms_connection_pool.start_pool();
BEGIN dbms_connection_pool.start_pool(); END;
*
ERROR at line 1:
ORA-56501: DRCP: Pool startup failed
ORA-56501: DRCP: Pool startup failed
ORA-06512: at "SYS.DBMS_CONNECTION_POOL", line 4
ORA-06512: at line 1

SYS@bookdg> @ &r/10046off
Session altered.

--//检查跟踪文件发现如下:
...
=====================
PARSING IN CURSOR #182929053448 len=274 dep=1 uid=0 oct=3 lid=0 tim=1503624921300601 hv=3872345143 ad='7e890610' sqlid='2s0zgjvmcym1r'
SELECT connection_pool_name, status, minsize, maxsize,           incrsize, session_cached_cursors, inactivity_timeout,
max_think_time, max_use_session, max_lifetime_session,           num_cbrok, maxconn_cbrok FROM cpool$           WHERE (connection_pool_name = :1)
END OF STMT
BINDS #182929053448:
 Bind#0
  oacdty=01 mxl=32(27) mxlc=00 mal=00 scl=00 pre=00
  oacflg=00 fl2=0000 frm=01 csi=852 siz=32 off=0
  kxsbbbfp=2a97747a38  bln=32  avl=27  flg=05
  value="SYS_DEFAULT_CONNECTION_POOL"
EXEC #182929053448:c=999,e=178,p=0,cr=0,cu=0,mis=0,r=0,dep=1,og=1,plh=1895327128,tim=1503624921300745
FETCH #182929053448:c=0,e=30,p=0,cr=2,cu=0,mis=0,r=1,dep=1,og=1,plh=1895327128,tim=1503624921300818
EXEC #182928806584:c=999,e=502,p=0,cr=2,cu=0,mis=0,r=0,dep=0,og=1,plh=0,tim=1503624921300951
ERROR #182928806584:err=56501 tim=1503624921300974
WAIT #182928806584: nam='SQL*Net break/reset to client' ela= 4 driver id=1650815232 break?=1 p3=0 obj#=5762 tim=1503624921301028
WAIT #182928806584: nam='SQL*Net break/reset to client' ela= 53 driver id=1650815232 break?=0 p3=0 obj#=5762 tim=1503624921301103
WAIT #182928806584: nam='SQL*Net message to client' ela= 2 driver id=1650815232 #bytes=1 p3=0 obj#=5762 tim=1503624921301128

*** 2017-08-25 09:35:25.227
WAIT #182928806584: nam='SQL*Net message from client' ela= 3926451 driver id=1650815232 #bytes=1 p3=0 obj#=5762 tim=1503624925227651
CLOSE #182928806584:c=0,e=41,dep=0,type=0,tim=1503624925227808
=====================

--//很明显因为访问底层基表cpool$
SYS@bookdg> @ &r/pt2 'select * from cpool$';
ROW_NUM COL_NUM COL_NAME               COL_VALUE
------- ------- ---------------------- ----------------------------
      1       1 CONNECTION_POOL_NAME   SYS_DEFAULT_CONNECTION_POOL
              2 STATUS                 INACTIVE
              3 MINSIZE                4
              4 MAXSIZE                40
              5 INCRSIZE               2
              6 SESSION_CACHED_CURSORS 20
              7 INACTIVITY_TIMEOUT     300
              8 MAX_THINK_TIME         120
              9 MAX_USE_SESSION        500000
             10 MAX_LIFETIME_SESSION   86400
             11 NUM_CBROK              1
             12 MAXCONN_CBROK          40000
12 rows selected.

--//而且在执行成功后STATUS='ACTIVE'.也就是exec dbms_connection_pool.start_pool();后如果STATUS='INACTIVE'要变成'状态是'ACTIVE'.
--//执行类似的dml语句,这在备库read only的情况下是不可行的.知道这个道理就明白为什么要在主库先执行exec dbms_connection_pool.start_pool();
--//修改STATUS='ACTIVE',这样备库也跟着修改.在备库执行exec dbms_connection_pool.start_pool();才能OK了.

3.有了以上知识,就可以通过一个特殊的例子说明问题.

--//在主库上执行如下,启动drcp.
SYS@book> exec dbms_connection_pool.start_pool()
PL/SQL procedure successfully completed.

--//检查备库
SYS@bookdg> @ &r/pt2 'select * from cpool$';
ROW_NUM    COL_NUM COL_NAME               COL_VALUE
------- ---------- ---------------------- ---------------------------
      1          1 CONNECTION_POOL_NAME   SYS_DEFAULT_CONNECTION_POOL
                 2 STATUS                 ACTIVE
                 3 MINSIZE                4
                 4 MAXSIZE                40
                 5 INCRSIZE               2
                 6 SESSION_CACHED_CURSORS 20
                 7 INACTIVITY_TIMEOUT     300
                 8 MAX_THINK_TIME         120
                 9 MAX_USE_SESSION        500000
                10 MAX_LIFETIME_SESSION   86400
                11 NUM_CBROK              1
                12 MAXCONN_CBROK          40000
12 rows selected.

--//取消redo应用.
SYS@bookdg> alter database recover managed standby database cancel ;
Database altered.

--//在主库上执行如下,停止drcp.
SYS@book> exec dbms_connection_pool.stop_pool()
PL/SQL procedure successfully completed.

SYS@book> select CONNECTION_POOL_NAME,STATUS from cpool$;
CONNECTION_POOL_NAME        STATUS
--------------------------- ---------
SYS_DEFAULT_CONNECTION_POOL INACTIVE

--//由于停止备库的日志应用,cpool$的记录不会修改.依旧是status='ACTIVE'
SYS@bookdg> select CONNECTION_POOL_NAME,STATUS from cpool$;
CONNECTION_POOL_NAME        STATUS
--------------------------- -------
SYS_DEFAULT_CONNECTION_POOL ACTIVE

SYS@bookdg> exec dbms_connection_pool.start_pool();
PL/SQL procedure successfully completed.

$ sqlplus scott/book@192.168.100.40:1521/bookdg:POOLED
--//测试连接ok.

--//同样的道理在当前的状态,无法在备库执行exec dbms_connection_pool.stop_pool();因为这样要修改staus,
--//而只读数据库是无法执行dml语句的.
SYS@bookdg> exec dbms_connection_pool.stop_pool();
BEGIN dbms_connection_pool.stop_pool(); END;
*
ERROR at line 1:
ORA-56506: DRCP: Pool shutdown failed
ORA-56506: DRCP: Pool shutdown failed
ORA-06512: at "SYS.DBMS_CONNECTION_POOL", line 16
ORA-06512: at line 1

--//而同步应用日志后,status变成了'INACTIVE',在备库再执行停止drcp就ok了.
SYS@bookdg> alter database recover managed standby database using current logfile disconnect ;
Database altered.

SYS@bookdg> select CONNECTION_POOL_NAME,STATUS from cpool$;
CONNECTION_POOL_NAME        STATUS
--------------------------- ---------
SYS_DEFAULT_CONNECTION_POOL INACTIVE

SYS@bookdg> exec dbms_connection_pool.stop_pool();
PL/SQL procedure successfully completed.

[20170825]11G备库启用DRCP连接3.txt的更多相关文章

  1. [20170824]11G备库启用DRCP连接.txt

    [20170824]11G备库启用DRCP连接.txt --//参考链接:http://blog.itpub.net/267265/viewspace-2099397/blogs.oracle.com ...

  2. Oracle备库TNS连接失败的分析

    今天在测试12c的temp_undo的时候,准备在备库上测试一下,突然发现备库使用TNS连接竟然失败. 抛出的错误如下: $ sqlplus sys/oracle@testdb as sysdba S ...

  3. Oracle 11g DRCP连接方式——基本原理

    学习Oracle是一个复杂.繁琐的过程.在浩如烟海的Oracle官方资料.新特性.MOS资料和各种Internal知识面前,我们总是觉得力不从心.不知所措.但是,这往往也就是我们不断坚持.积累和追寻的 ...

  4. 使用DUPLICATE 方式创建ORACLE 11G DG备库环境

    我的最佳实践 ① 手动创建好初始化参数文件: *.audit_file_dest='E:\APP\XJXU\ADMIN\ORASTAND\ADUMP'*.control_files='E:\APP\X ...

  5. ORACLE 11g 用Duplicate恢复Data Guard 备库详细过程

    1.先查找备库控制文件路径 先在备库上找出控制文件的路径,通过和主库一样,不过为了以防万一,还是check为好. SQL>  select name from v$controlfile; NA ...

  6. Oracle DG强制激活 备库

    在实际运营环境中,我们经常碰到类似这样的需求,譬如想不影响现网业务评估DB补丁在现网环境中运行的时间,或者是想在做DB切换前想连接Standby DB做实际业务运行的测试,如果在9i版本的时候,想做到 ...

  7. oracle data guard备库备份恢复

    客户有套data guard环境,主库在阿里云上,备库在本地机房,现在想定期做备份,但是因为一些原因,备份阿里云上的主库实现会有些问题,所以只能备份本地的备库.目前需求就是测试备库的备份文件是否可以进 ...

  8. OGG 从Oracle备库同步数据至kafka

    OGG 从Oracle备库同步数据至kafka Table of Contents 1. 目的 2. 环境及规划 3. 安装配置JDK 3.1. 安装jdk 3.2. 配置环境变量 4. 安装Data ...

  9. pgsql物理复制(pgsql 备库的搭建以及角色互换,提升)

    结构图如下: Postgresql早在9.0版本开始支持物理复制,也称为流复制,通过从实例级复制出一个与主库一模一样的备库.流复制同步方式有同步,异步两种,如果主节点和备节点不是很忙,通常异步模式下备 ...

随机推荐

  1. python --第三方登录--微博

    理解第三方登录的流程: 用户向本地应用商城发起请求,我要用微博进行登录 我们的商城凑一个url让用户跳转到第三方应用的url(微博的登录页面) 用户在该界面点击输入用户名密码之后,点击授权. 微博有个 ...

  2. org.springframework.dao.TransientDataAccessResourceException

    今天给大家分析一个在mybatis中遇见的错误 是什么原因导致这个错误信息呢,请看下面代码 再来看看下面找个 发现区别在哪里没有,没错就是#与$的区别. 1 #是将传入的值当做字符串的形式,eg:se ...

  3. Java 单元测试顺序执行

    坑死我了,原来@Before会执行多次. 通过函数名可以实现顺序执行,执行顺序和函数的位置无关. import org.junit.Before; import org.junit.BeforeCla ...

  4. 【深入 MongoDB 开发】使用正确的姿势连接分片集群

    MongoDB分片集群(Sharded Cluster)通过将数据分散存储到多个分片(Shard)上,来实现高可扩展性.实现分片集群时,MongoDB 引入 Config Server 来存储集群的元 ...

  5. 【DB2】Event monitor for locking

    Customer said, they got the following Errors in applications logs Caused by: financing.tools.hub.sha ...

  6. 插入排序——Insertion Sort

    基本思想: 在要排序的一组数中,假定前n-1个数已经排好序,现在将第n个数插到前面的有序数列中,使得这n个数也是排好顺序的.如此反复循环,直到全部排好顺序. 过程: 平均时间复杂度:O(n2) jav ...

  7. 网络基础知识-TCP/IP协议各层详解

    TCP/IP简介 虽然大家现在对互联网很熟悉,但是计算机网络的出现比互联网要早很多. 计算机为了联网,就必须规定通信协议,早期的计算机网络,都是由各厂商自己规定一套协议,IBM.Apple和Micro ...

  8. Redis服务搭建与基础功能示例

    一.Redis简介 Redis是一个非关系型远程内存数据库,它也是一个Key-value模型的数据库.Redis支持5种数据类型(string.list.set.sorted set.hash),可以 ...

  9. [转]【Angular4】基础(二):创建组件 Component

    本文转自:https://blog.csdn.net/u013451157/article/details/79445138 版权声明:本文为博主原创文章,未经博主允许不得转载. https://bl ...

  10. [转]How to Improve Entity Framework Add Performance?

    本文转自:http://entityframework.net/improve-ef-add-performance When you overuse the Add() method for mul ...