ORA-12801: error signaled in parallel query server PZ99分析

分析结论

      这个案例本身很简单,不难,就是想和大家分享下(主要是ORACLE的初学者,牛人请无视之)
1,查询SQL的WHERE条件列的数据类型一定要明确
2,查询报错的几个ORACLE错误,要学会分析,有些报错可能只是表象,有烟雾弹的作用哟,小心上当
3,在分析排错时,如果一种思路走不通,马上尝试另一种思路,本文我就采用了调换列值和反向思维,以及启用自己的测试环境
   (在自己的测试环境你可以大胆操作,先把原理搞清晰,再在生产上操作),切切
4,学习方法很重要,欢迎与大家交流,共同提升


案例

今天在某客户监控数据库时,分析latch free等待事件,发现运行如下查询SQL竟然报错
   
 数据库版本
SQL> select * from v$version;


BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
CORE    11.2.0.4.0      Production
TNS for IBM/AIX RISC System/6000: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production


  操作系统版本
SQL> host uname -a
AIX actdb4 1 6 00F902584C00

   发现有并行查询报错,没启用并行哟,怪怪?
SQL> select count(*) from gv$active_session_history where p1='070000000003A8A0';
select count(*) from gv$active_session_history where p1='070000000003A8A0'
*
ERROR at line 1:
ORA-12801: error signaled in parallel query server PZ99, instance actdb4:act42 (2)
ORA-01722: invalid number


查查上述数据库报错的原因,可以通过10397 EVENT可以关闭这个报错,再次运行SQL就会报出真正的错误
(但我没用过这个10397事件哟,风险几何,本人不知哟)
SQL> host oerr ora 12801
12801, 00000, "error signaled in parallel query server %s"
// *Cause: A parallel query server reached an exception condition.
// *Action: Check the following error message for the cause, and consult
//          your error manual for the appropriate action.
// *Comment: This error can be turned off with event 10397, in which
//           case the server's actual error is signaled instead.


SQL> host oerr ora 01722
01722, 00000, "invalid number"
// *Cause: The specified number was invalid.
// *Action: Specify a valid number.


SQL> 

我们继续分析,继续上述有ORA-01722报错


换一个值试下,却是运行正常不错吗,可见是P1的值有问题
SQL> select p1 from gv$active_session_history where rownum=1;


                        P1
--------------------------
                      6844
可见用数字就OK了
SQL> select p1 from gv$active_session_history where p1='6844';


                        P1
--------------------------
                      6844

果然我们用特殊字符替代,哈哈报错了 
SQL> select p1 from gv$active_session_history where p1='07A8';
select p1 from gv$active_session_history where p1='07A8'
*
ERROR at line 1:
ORA-12801: error signaled in parallel query server PZ99, instance actdb4:act42 (2)
ORA-01722: invalid number  


突然想起来,我们再看看P1的列数据类型,我的哈哟,是数字类型;回头再想,确实和运行查询SQL的第2个ORACLE报错对应上了
SQL> desc gv$active_session_history;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 INST_ID                                            NUMBER
 SAMPLE_ID                                          NUMBER
 SAMPLE_TIME                                        TIMESTAMP(3)
 IS_AWR_SAMPLE                                      VARCHAR2(1)
 SESSION_ID                                         NUMBER
 SESSION_SERIAL#                                    NUMBER
 SESSION_TYPE                                       VARCHAR2(10)
 FLAGS                                              NUMBER
 USER_ID                                            NUMBER
 SQL_ID                                             VARCHAR2(13)
 IS_SQLID_CURRENT                                   VARCHAR2(1)
 SQL_CHILD_NUMBER                                   NUMBER
 SQL_OPCODE                                         NUMBER
 FORCE_MATCHING_SIGNATURE                           NUMBER
 TOP_LEVEL_SQL_ID                                   VARCHAR2(13)
 TOP_LEVEL_SQL_OPCODE                               NUMBER
 SQL_OPNAME                                         VARCHAR2(64)
 SQL_PLAN_HASH_VALUE                                NUMBER
 SQL_PLAN_LINE_ID                                   NUMBER
 SQL_PLAN_OPERATION                                 VARCHAR2(30)
 SQL_PLAN_OPTIONS                                   VARCHAR2(30)
 SQL_EXEC_ID                                        NUMBER
 SQL_EXEC_START                                     DATE
 PLSQL_ENTRY_OBJECT_ID                              NUMBER
 PLSQL_ENTRY_SUBPROGRAM_ID                          NUMBER
 PLSQL_OBJECT_ID                                    NUMBER
 PLSQL_SUBPROGRAM_ID                                NUMBER
 QC_INSTANCE_ID                                     NUMBER
 QC_SESSION_ID                                      NUMBER
 QC_SESSION_SERIAL#                                 NUMBER
 PX_FLAGS                                           NUMBER
 EVENT                                              VARCHAR2(64)
 EVENT_ID                                           NUMBER
 EVENT#                                             NUMBER
 SEQ#                                               NUMBER
 P1TEXT                                             VARCHAR2(64)
  P1                                                 NUMBER                   






个人简介

8年oracle从业经验,具备丰富的oracle技能,目前在国内北京某专业oracle服务公司从事高级技术顾问。
服务过的客户:
中国电信
中国移动
中国联通
中国电通
国家电网
四川达州商业银行
湖南老百姓大药房
山西省公安厅
中国邮政
北京302医院     
河北廊坊新奥集团公司

 项目经验:
中国电信3G项目AAA系统数据库部署及优化
      中国联通4G数据库性能分析与优化
中国联通CRM数据库性能优化
中国移动10086电商平台数据库部署及优化
湖南老百姓大药房ERR数据库sql优化项目
四川达州商业银行TCBS核心业务系统数据库模型设计和RAC部署及优化
四川达州商业银行TCBS核心业务系统后端批处理存储过程功能模块编写及优化
北京高铁信号监控系统RAC数据库部署及优化
河南宇通客车数据库性能优化
中国电信电商平台核心采购模块表模型设计及优化
中国邮政储蓄系统数据库性能优化及sql优化
北京302医院数据库迁移实施
河北廊坊新奥data guard部署及优化
山西公安厅身份证审计数据库系统故障评估
国家电网上海灾备项目4 node rac+adg 
       贵州移动crm及客服数据库性能优化项目
       贵州移动crm及客服务数据库sql审核项目
       深圳穆迪软件有限公司数据库性能优化项目

联系方式:
手机:18201115468
qq   :   305076427
qq微博: wisdomone1
新浪微博:wisdomone9
qq群:275813900    
itpub博客名称:wisdomone1     http://blog.itpub.net/9240380/

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9240380/viewspace-1723699/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/9240380/viewspace-1723699/

你可能感兴趣的:(ORA-12801: error signaled in parallel query server PZ99分析)