注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下:



Oracle的学习心得和知识总结(二十三)|Oracle数据库Real Application Testing之Database Replay相关视图-LMLPHP


文章快速说明索引

学习目标:

目的:接下来这段时间我想做一些兼容Oracle数据库Real Application Testing (即:RAT)上的一些功能开发,本专栏这里主要是学习以及介绍Oracle数据库功能的使用场景、原理说明和注意事项等,基于PostgreSQL数据库的功能开发等之后 由新博客进行介绍和分享!


学习内容:(详见目录)

1、Oracle数据库Real Application Testing之Database Replay相关视图


学习时间:

2023年04月23日 20:27:54


学习产出:

1、Oracle数据库Real Application Testing之Database Replay相关视图
2、CSDN 技术博客 1篇


注:下面我们所有的学习环境是Centos7+PostgreSQL15.0+Oracle19c+MySQL5.7

postgres=# select version();
                                   version                                   
-----------------------------------------------------------------------------
 PostgreSQL 15.0 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 7.1.0, 64-bit
(1 row)

postgres=#

#-----------------------------------------------------------------------------#

SQL> select * from v$version; 

BANNER									    BANNER_FULL 								BANNER_LEGACY									CON_ID
--------------------------------------------------------------------------- --------------------------------------------------------------------------- --------------------------------------------------------------------------- ----------
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production	    Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production	Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production		     0
									    Version 19.3.0.0.0


SQL>
#-----------------------------------------------------------------------------#

mysql> select version();
+-----------+
| version() |
+-----------+
| 5.7.19    |
+-----------+
1 row in set (0.06 sec)

mysql>

注:数据库回放的实操大致步骤一样,不过在不同的场景下有不同的操作 因此有了不同的实操案例,有兴趣的小伙伴们可以看一下之前的实操文档:


DBA_WORKLOAD_FILTERS

  1. 官方链接:https://docs.oracle.com/en/database/oracle/oracle-database/21/refrn/DBA_WORKLOAD_FILTERS.html

DBA_WORKLOAD_FILTERS 显示已在当前数据库中定义的所有工作负载过滤器。在 Oracle 数据库 11g 中,仅支持 CAPTURE 类型的负载过滤器。从 Oracle Database 11gR2 开始,支持 REPLAY 类型的过滤器。


DBA_WORKLOAD_CAPTURES

  1. 官方链接:https://docs.oracle.com/en/database/oracle/oracle-database/21/refrn/DBA_WORKLOAD_CAPTURES.html

DBA_WORKLOAD_CAPTURES 显示当前数据库中已执行的所有工作负载捕获。它还列出调用了 DBMS_WORKLOAD_CAPTURE.GET_CAPTURE_INFO() 或 DBMS_WORKLOAD_REPLAY.GET_REPLAY_INFO() 的捕获。每行包含有关一个工作负载捕获的信息。


DBA_WORKLOAD_CAPTURE_SQLTEXT

  1. 官方链接:https://docs.oracle.com/en/database/oracle/oracle-database/21/refrn/DBA_WORKLOAD_CAPTURE_SQLTEXT.html

DBA_WORKLOAD_CAPTURE_SQLTEXT 显示已记录在工作负载捕获中的所有 SQL 语句。对于那些长度超过 1000 个字符的 SQL 语句,可以使用 DBMS_WORKLOAD_REPLAY.LOAD_LONG_SQLTEXT 过程将完整语句加载到 DBA_WORKLOAD_LONG_SQLTEXT 视图。


DBA_WORKLOAD_REPLAYS

  1. 官方链接:https://docs.oracle.com/en/database/oracle/oracle-database/21/refrn/DBA_WORKLOAD_REPLAYS.html

DBA_WORKLOAD_REPLAYS 显示当前数据库中已执行的所有工作负载重放。它还列出了调用了 DBMS_WORKLOAD_REPLAY.GET_REPLAY_INFO() 的回放。每行包含有关一个工作负载重放的信息。


DBA_WORKLOAD_CONNECTION_MAP

  1. 官方链接:https://docs.oracle.com/en/database/oracle/oracle-database/21/refrn/DBA_WORKLOAD_CONNECTION_MAP.html

DBA_WORKLOAD_CONNECTION_MAP 显示工作负载重放的连接映射信息。 每行为特定工作负载重放定义一个连接映射。


DBA_WORKLOAD_REPLAY_CLIENTS

  1. 官方链接:https://docs.oracle.com/en/database/oracle/oracle-database/21/refrn/DBA_WORKLOAD_REPLAY_CLIENTS.html

DBA_WORKLOAD_REPLAY_CLIENTS 显示所有工作负载重放客户端及其分配的实例。


DBA_WORKLOAD_REPLAY_DIVERGENCE

  1. 官方链接:https://docs.oracle.com/en/database/oracle/oracle-database/21/refrn/DBA_WORKLOAD_REPLAY_DIVERGENCE.html

DBA_WORKLOAD_REPLAY_DIVERGENCE 显示有关已重放的用户调用的数据/错误分歧的信息。

DBA_WORKLOAD_DIV_SUMMARY 在 DBA_WORKLOAD_REPLAY_DIVERGENCE 视图中显示重放分歧信息的摘要。DBA_WORKLOAD_REPLAY_DIVERGENCE 可能有重复的条目,而 DBA_WORKLOAD_DIV_SUMMARY 只保留一个条目并跟踪每个重复条目的出现次数。


DBA_WORKLOAD_DIV_SUMMARY

  1. 官方链接:https://docs.oracle.com/en/database/oracle/oracle-database/21/refrn/DBA_WORKLOAD_DIV_SUMMARY.html

DBA_WORKLOAD_DIV_SUMMARY 在 DBA_WORKLOAD_REPLAY_DIVERGENCE 视图中显示重放分歧信息的摘要。 DBA_WORKLOAD_REPLAY_DIVERGENCE 可能有重复的条目,而 DBA_WORKLOAD_DIV_SUMMARY 只保留一个条目并跟踪每个重复条目的出现次数。

从 Oracle 数据库 12.2.0.1 开始,重放报告是从 DBA_WORKLOAD_DIV_SUMMARY 而不是从 DBA_WORKLOAD_REPLAY_DIVERGENCE 生成的,这样可以更快地生成重放报告。

示例:

以下查询打印在回放期间出现错误分歧的前 3 个 SQL 语句。此查询显示捕获的错误号和重放期间看到的实际错误号。

SQL> SELECT * FROM  
 (SELECT occurrences, sql_id, expected_error#, observed_error#   
  FROM    dba_workload_div_summary
  WHERE   replay_id = 123     
   AND    is_error_divergence = 'Y'
  ORDER BY occurrences DESC) 
WHERE ROWNUM <= 3;  

OCCURRENCES SQL_ID        EXPECTED_ERROR# OBSERVED_ERROR# 
----------- ------------- --------------- ---------------           
          8 0xrm2wjdqv17m               0               1           
          4 8bzwdnnznspjd            1422               0
          3 6d8rwrac8dsk7               1            1400

SQL>

DBA_WORKLOAD_REPLAY_SCHEDULES

  1. 官方链接:https://docs.oracle.com/en/database/oracle/oracle-database/21/refrn/DBA_WORKLOAD_REPLAY_SCHEDULES.html

DBA_WORKLOAD_REPLAY_SCHEDULES 显示当前重放目录的重放计划名称。

重放计划定义一个或多个工作负载捕获,以及开始重放的顺序。当前重放目录由 DBMS_WORKLOAD_REPLAY.SET_REPLAY_DIRECTORY('replay_dir') 设置。视图中的每一行都包含有关一个重放计划的信息。

04-25 12:32