[20170825]11G备库启用DRCP连接3.txt
[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的更多相关文章
- [20170824]11G备库启用DRCP连接.txt
[20170824]11G备库启用DRCP连接.txt --//参考链接:http://blog.itpub.net/267265/viewspace-2099397/blogs.oracle.com ...
- Oracle备库TNS连接失败的分析
今天在测试12c的temp_undo的时候,准备在备库上测试一下,突然发现备库使用TNS连接竟然失败. 抛出的错误如下: $ sqlplus sys/oracle@testdb as sysdba S ...
- Oracle 11g DRCP连接方式——基本原理
学习Oracle是一个复杂.繁琐的过程.在浩如烟海的Oracle官方资料.新特性.MOS资料和各种Internal知识面前,我们总是觉得力不从心.不知所措.但是,这往往也就是我们不断坚持.积累和追寻的 ...
- 使用DUPLICATE 方式创建ORACLE 11G DG备库环境
我的最佳实践 ① 手动创建好初始化参数文件: *.audit_file_dest='E:\APP\XJXU\ADMIN\ORASTAND\ADUMP'*.control_files='E:\APP\X ...
- ORACLE 11g 用Duplicate恢复Data Guard 备库详细过程
1.先查找备库控制文件路径 先在备库上找出控制文件的路径,通过和主库一样,不过为了以防万一,还是check为好. SQL> select name from v$controlfile; NA ...
- Oracle DG强制激活 备库
在实际运营环境中,我们经常碰到类似这样的需求,譬如想不影响现网业务评估DB补丁在现网环境中运行的时间,或者是想在做DB切换前想连接Standby DB做实际业务运行的测试,如果在9i版本的时候,想做到 ...
- oracle data guard备库备份恢复
客户有套data guard环境,主库在阿里云上,备库在本地机房,现在想定期做备份,但是因为一些原因,备份阿里云上的主库实现会有些问题,所以只能备份本地的备库.目前需求就是测试备库的备份文件是否可以进 ...
- OGG 从Oracle备库同步数据至kafka
OGG 从Oracle备库同步数据至kafka Table of Contents 1. 目的 2. 环境及规划 3. 安装配置JDK 3.1. 安装jdk 3.2. 配置环境变量 4. 安装Data ...
- pgsql物理复制(pgsql 备库的搭建以及角色互换,提升)
结构图如下: Postgresql早在9.0版本开始支持物理复制,也称为流复制,通过从实例级复制出一个与主库一模一样的备库.流复制同步方式有同步,异步两种,如果主节点和备节点不是很忙,通常异步模式下备 ...
随机推荐
- 排序算法系列:插入排序算法JAVA版(靠谱、清晰、真实、可用、不罗嗦版)
在网上搜索算法的博客,发现一个比较悲剧的现象非常普遍: 原理讲不清,混乱 啰嗦 图和文对不上 不可用,甚至代码还出错 我总结一个清晰不罗嗦版: 原理: 和选择排序类似的是也分成“已排序”部分,和“未排 ...
- java-null简介
对于每一个Java程序员来说,null肯定是一个让人头痛的东西,连Java的发明者都承认这是一项巨大的设计失误,今天就来总结一下Java中关于null的知识. 1.null不属于任何类型,可以被转换成 ...
- 【Object类、常用API】
Object类 1.1 概述 java.lang.Object类是Java语言中的根类,即所有类的父类.它中描述的所有方法子类都可以使用.在对象实例化的时候,最终找的父类就是Object. 如果一个类 ...
- 【sping揭秘】22、事务管理
有关事务的楔子 什么是事务??? 事务就是以可控的方式对数据资源进行访问的一组操作. 事务本身持有四个限定属性 原子性,一致性,隔离性,持久性 事务家族 Resource Manager RM,负责 ...
- Jquery 动态追加控件并获取值
先展示通过动态添加控件的结果: 实现步骤: 1.引用js文件 <script src="Script/jquery-1.5.1.min.js" type="text ...
- js排序问题
1.直接排序 var arr = [1,3,2,5]; function compare(a,b){ return a - b;//从小到大 return b - a;//从大到小 } console ...
- pip更新到18版本后使用pycharm更新问题:module 'pip' has no attribute 'main'
今天升级pip到18.0版本后更新模块时出现错误 分析报错信息可知,问题出在packaging_tool.py文件的213行和109行,找到具体的代码,如下 # 109行函数 def do_insta ...
- .6-浅析webpack源码之validateSchema模块
validateSchema模块 首先来看错误检测: const webpackOptionsValidationErrors = validateSchema(webpackOptionsSchem ...
- Umbraco 资源推荐
Umbraco 社区 Umbraco 官方社区.找到人们谈论当前的 Umbraco 主题的最好方法是通过 Twitter.Umbraco 也知道他们很多的聚会和节日在世界各地举行.Umbraco 的开 ...
- DDD初探
领域驱动设计(DDD)对开发者来说是面向对象设计的自然进化 总的来说DDD包括两个部分: 分析部分 分析部分通常是由开发人员去和领域专家沟通业务知识,但是开发人员和领域专家是有代沟的, 为了简化沟通成 ...