Oracle Real Application Testing-RAT时ORA600处理

2025年2月19日 作者 XiaofeiHuangfu

一、基本概念介绍

    Oracle Real Application Testing 选件和 Oracle DB 的测试数据管理功能有助于确保数据 库更改的完整性并管理测试数据。使用 Oracle Real Application Testing 选件可以执行实 际测试。通过捕获生产工作量并在生产部署之前评估系统更改对这些工作量的影响, Oracle Real Application Testing 可最大程度地降低与系统更改关联的不稳定性风险。 SQL 性能分析程序和数据库重放是 Oracle Real Application Testing 的关键组件。
根据所测试的系统更改的性质和影响以及将要执行测试的系统类型,可以使用其中一个或两个组件来执行测试。
SQL 性能分析程序 (SPA)
     SPA 是在以下情况下可以选用的一个工具:在数据库或操作系统级别进行更改后,您尝 试确定性能将发生变化的 SQL 语句。SQL 性能分析程序将不同来源的 SQL 语句捕获到 一个 SQL 优化集 (STS) 中,这些来源包括游标高速缓存、自动工作量资料档案库 (AWR) 和现有的 SQL 优化集。通过孤立地执行每条 SQL 语句来分析 STS。执行顺序由优化集 中语句的顺序而定。STS 包含绑定变量、执行计划和执行上下文信息。使用 SQL 性能分 析程序时,您将执行 STS 并捕获性能统计信息,在更改系统后再次执行 STS,然后比较 两次结果。SQL 性能分析程序不考虑 SQL 语句的相互影响。
Database Replay数据库重放
     如果发生了影响广泛的更改,如操作系统或数据库版本更改,或者必须测试总体系统性能, 您应将“数据库重放”作为首选的工具。“数据库重放”捕获一个时间段内的实际工作量 以及性能统计信息。先是针对目标系统处理工作量,然后重放工作量。重放选项包括重放 速度、考虑时间、维护事务处理顺序(同步)及其他。重放工作量后,可针对原始捕获或 另一个重放会话来比较性能统计信息、数据偏差和错误数。可以使用 AWR 和重放报告。

Oracle Real Application Testing在以下场景非常有用
• 数据库升级
• 实施优化建议
• 方案更改
• 搜集统计信息
• 更改数据库参数
• 更改操作系统和硬件

二、环境信息

操作系统:Linux 7.9
数据库版本及架构: Oracle 11.2.0.4 RAC 

三、问题描述

Prepare the Replay时失败,报ORA-00600: internal error code, arguments: [kecubBroadcast:msgctx holder:]

四、解决方案

1、停掉RAC一个节点,进行执行RAT;
2、Prepare the Replay时
设置同步模式,connect_time_scale和think_time_scale使用默认值。
execute dbms_workload_replay.prepare_replay (synchronization => TRUE);

五、日志分析

数据库日志alert_orcl1.log  

数据库日志忠报错信息是ORA-00600: internal error code, arguments: [kecubBroadcast:msgctx holder:], [129], [44],我们在orcl1_ora_36473.trc和orcl1_ora_36473_i648765.trc中进一步查看信息…
Mon Sep 19 13:30:44 2022Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl1/trace/orcl1_ora_36473.trc (incident=648765):ORA-00600: internal error code, arguments: [kecubBroadcast:msgctx holder:], [129], [44], [], [], [], [], [], [], [], [], []Incident details in: /u01/app/oracle/diag/rdbms/orclzdata/orcl1/incident/incdir_648765/orcl1_ora_36473_i648765.trc


orcl1_ora_36473.trc

*** 2022-09-19 13:20:37.143*** SESSION ID:(4978.221) 2022-09-19 13:20:37.143*** CLIENT ID:() 2022-09-19 13:20:37.143*** SERVICE NAME:(orclzdata) 2022-09-19 13:20:37.143*** MODULE NAME:(WRC$) 2022-09-19 13:20:37.143*** ACTION NAME:() 2022-09-19 13:20:37.143 2022-09-19 13:20:37.143107 :kecps.c@7600: kecpsThreadFailureLocal: Handling thread failure for file_id 2874062372111143347*** 2022-09-19 13:30:44.242Incident 648765 created, dump file: /u01/app/oracle/diag/rdbms/orcl/orcl1/incident/incdir_648765/orcl1_ora_36473_i648765.trcORA-00600: internal error code, arguments: [kecubBroadcast:msgctx holder:], [129], [44], [], [], [], [], [], [], [], [], []

orcl1_ora_36473_i648765.trc

Dump continued from file: /u01/app/oracle/diag/rdbms/orcl/orcl1/trace/orcl1_ora_36473.trcORA-00600: internal error code, arguments: [kecubBroadcast:msgctx holder:], [129], [44], [], [], [], [], [], [], [], [], []========= Dump for incident 648765 (ORA 600 [kecubBroadcast:msgctx holder:]) ========*** 2022-09-19 13:30:44.243dbkedDefDump(): Starting incident default dumps (flags=0x2, level=3, mask=0x0)----- Current SQL Statement for this session (sql_id=dxqnuun5s1055) -----begin :1 := dbms_workload_replay.client_connect( dbms_workload_replay.KECP_CLIENT_CONNECT_THRDFAIL, :2 ); end;----- PL/SQL Stack ---------- PL/SQL Call Stack ----- object line object handle number name0x4b333bc700 1907 package body SYS.DBMS_WORKLOAD_REPLAY0x4b333bc700 8662 package body SYS.DBMS_WORKLOAD_REPLAY0x4b333bc700 8848 package body SYS.DBMS_WORKLOAD_REPLAY0x4b309f2160 1 anonymous block

从orcl1_ora_36473_i648765.trc可以看到ORA-600报错是执行DBMS_WORKLOAD_REPLAY包触发的。

-the end-