Oracle的学习心得和知识总结(二十二)|Oracle数据库Real Application Testing之Database Replay实操(二)

news2024/12/24 2:52:50

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

1、参考书籍:《Oracle Database SQL Language Reference》
2、参考书籍:《PostgreSQL中文手册》
3、EDB Postgres Advanced Server User Guides,点击前往
4、PostgreSQL数据库仓库链接,点击前往
5、PostgreSQL中文社区,点击前往
6、Oracle Real Application Testing 官网首页,点击前往
7、Oracle 21C RAT Testing Guide,点击前往


1、本文内容全部来源于开源社区 GitHub和以上博主的贡献,本文也免费开源(可能会存在问题,评论区等待大佬们的指正)
2、本文目的:开源共享 抛砖引玉 一起学习
3、本文不提供任何资源 不存在任何交易 与任何组织和机构无关
4、大家可以根据需要自行 复制粘贴以及作为其他个人用途,但是不允许转载 不允许商用 (写作不易,还请见谅 💖)


Oracle数据库Real Application Testing之Database Replay实操

  • 文章快速说明索引
  • 数据库回放的背景
  • 数据库回放的演示
    • 负载捕获
    • 负载处理
    • 负载重放
    • 分析报告



文章快速说明索引

学习目标:

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


学习内容:(详见目录)

1、Oracle数据库Real Application Testing之Database Replay实操(二)


学习时间:

2023年04月20日 19: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>

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

  • Oracle的学习心得和知识总结(十三)|Oracle数据库Real Application Testing之Database Replay实操(一),点击前往

数据库回放的背景

数据库重放是在 Oracle 11g R1 中引入的,它允许您捕获生产系统上的负载并在您的开发或测试环境中重放它们,同时保持负载的独特特征。这使用户能够测试各种系统更改,例如硬件/软件迁移、操作系统/数据库升级、补丁、数据库配置更改等,并在实施到生产之前消除风险。

有许多可用的性能模拟工具,但实施它们需要大量成本,尤其是服务器的许可、采购和配置以及时间。为了执行这些工具,用户需要创建脚本、开发查询并提供一系列参数来运行负载,但这可能只提供一小部分生产工作负载,不会模拟您的实际生产负载。在生产中实施更改之前,企业需要花费大量成本和大量精力来测试这些更改。然而,尽管进行了这样的测试,许多问题往往在部署到生产环境之前未被发现。

数据库重放能够以具有成本效益的方式测试实际生产工作负载。该解决方案不需要维护任何脚本,因此可以显着减少测试工作。这使企业业务能够快速采用新技术,并在消除风险的同时进行更改。数据库重放将帮助您测试性能和应用程序功能。

用户可以使用企业管理器 GUI 界面或 DBMS_WORKLOAD_xxxxx 包提供的命令行界面来捕获工作负载。用户能够捕获运行 10g R2 或更高版本的数据库系统上的负载,并且仅在运行 11g R1 及更高版本的数据库上支持工作负载回放。相关的DBMS包可以参见本人之前的博客:

  • Oracle的学习心得和知识总结(十四)|Oracle数据库Real Application Testing之DBMS_WORKLOAD_CAPTURE包技术详解,点击前往
  • Oracle的学习心得和知识总结(十五)|Oracle数据库Real Application Testing之DBMS_WORKLOAD_REPLAY包技术详解,点击前往

数据库回放的演示

在这里插入图片描述

数据库重放由四个主要步骤组成,如上图所示,如下所述:

  1. 工作负载捕获

    启用工作负载捕获后,所有指向 Oracle 数据库的外部客户端请求都将被跟踪并存储在数据库服务器主机文件系统上的二进制文件(称为捕获文件)中。Oracle 建议在捕获负载之前对整个数据库进行备份。用户指定捕获文件的位置以及工作负载捕获的开始和结束时间。在此过程中,与外部数据库调用有关的所有信息都将写入捕获文件

  2. 工作负载处理

    捕获工作负载后,必须处理捕获文件中的信息。此处理将捕获的数据转换为重放文件,并创建重放工作负载所需的所有必要元数据。捕获文件通常会被复制到另一个系统进行处理。在重放之前,必须为每个捕获的工作负载执行一次此操作。捕获的工作负载处理后,可以在重放系统上重复重放。由于工作负载处理可能非常耗时且资源密集,因此通常建议在将重放工作负载的测试系统上执行此步骤

  3. 工作负载回放

    处理完捕获的工作负载后,就可以重放了。然后,名为 Replay Client 的客户端程序处理重播文件,并以与捕获系统完全相同的时间和并发性将调用提交给数据库。根据捕获的工作负载,您可能需要一个或多个重放客户端才能正确重放工作负载。提供了一个校准工具来帮助确定工作负载所需的重播客户端数量。应该注意的是,由于重放了整个工作负载,包括 DML 和 SQL 查询,因此重放系统中的数据必须与捕获其工作负载的生产系统中的数据相同,以便能够为报告目的进行可靠的分析

  4. 分析和报告

    提供了广泛的报告,以便对捕获和重放进行详细分析。报告重放期间遇到的任何错误。显示 DML 或查询返回的行中的任何差异。提供了捕获和回放之间的基本性能比较。对于高级分析,回放比较周期和其他 AWR 报告可用于详细比较捕获和回放之间的各种统计数据


负载捕获

在此阶段,用户将从数据库中捕获生产工作负载。启用工作负载捕获涉及跟踪和记录来自用户、应用程序等的所有外部请求,更改将存储在称为捕获文件的二进制文件中。这些文件将包含 SCN、SQL 文本、绑定变量等信息。记录过程自身在生产系统上带来的开销极低。但是根据捕获时间的长短,需要保证拥有足够的磁盘空间来保存捕获的工作负荷。如果磁盘空间用尽,则捕获过程将停止。如果可能,务必在无活动会话时开始捕获过程。虽然可以捕获正在进行中的事务,但可能无法正常重放,因为这样只会在目标系统重放每个正在进行的事务的一部分。捕获操作不包含诸如SQL*Loader操作、Oracle流、闪回查询、OCI对象导航、非基于SQL的对象访问、远程describe和commit命令。

创建一个要保存所有捕获文件的目录,如下:

[oracle@dbserver ~]$ pwd
/home/oracle
[oracle@dbserver ~]$ mkdir db_replay_capture
[oracle@dbserver ~]$ cd db_replay_capture/
[oracle@dbserver db_replay_capture]$ 
[oracle@dbserver db_replay_capture]$ pwd
/home/oracle/db_replay_capture
[oracle@dbserver db_replay_capture]$

注:我们使用两个PDB进行负载的捕获和回放,首先创建出这两个PDB,如下(过程不再展示):

  • Oracle的学习心得和知识总结(二十一)|Oracle数据库可插拔数据库PDB的创建及删除,点击前往
[oracle@dbserver ~]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Thu Apr 20 18:12:54 2023
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

SQL> show pdbs;

    CON_ID CON_NAME			  OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
	 2 PDB$SEED			  READ ONLY  NO
	 3 ORCLPDB			  READ WRITE NO
	 4 REPLAYPDB			  READ WRITE NO
	 5 CAPTUREPDB			  READ WRITE NO
SQL> Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
[oracle@dbserver ~]$

在这里插入图片描述


[oracle@dbserver ~]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Thu Apr 20 18:30:50 2023
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup;
ORACLE instance started.

Total System Global Area 1157624440 bytes
Fixed Size		    9134712 bytes
Variable Size		  536870912 bytes
Database Buffers	  603979776 bytes
Redo Buffers		    7639040 bytes
Database mounted.
Database opened.
SQL> 
SQL> conn sys/123456@capturepdb as sysdba
Connected.
SQL> show pdbs;

    CON_ID CON_NAME			  OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
	 5 CAPTUREPDB			  READ WRITE NO
SQL>
SQL> create or replace directory db_replay_capture_dir as '/home/oracle/db_replay_capture';

Directory created.

SQL>

注:因为我们这里想要 capture 所有的信息,就跳过 add_filter 的设置。关于设置过滤器,可以参见本人后面博客的详细介绍!


接下来,就可以开启捕获了,如下:

SQL> conn sys/123456@capturepdb as sysdba
Connected.
SQL> exec dbms_workload_repository.create_snapshot();

PL/SQL procedure successfully completed.

SQL> select SNAP_ID,STARTUP_TIME,BEGIN_INTERVAL_TIME,END_INTERVAL_TIME from dba_hist_snapshot;                     

   SNAP_ID STARTUP_TIME 							       BEGIN_INTERVAL_TIME							   END_INTERVAL_TIME
---------- --------------------------------------------------------------------------- --------------------------------------------------------------------------- ---------------------------------------------------------------------------
	 1 21-APR-23 09.28.38.000 AM						       21-APR-23 09.28.38.000 AM						   21-APR-23 09.31.45.293 AM
      1130 19-APR-23 10.11.09.000 AM						       19-APR-23 10.21.35.563 AM						   19-APR-23 11.00.30.577 AM
      1132 19-APR-23 10.11.09.000 AM						       19-APR-23 12.00.41.585 PM						   19-APR-23 01.00.07.221 PM
      1133 20-APR-23 04.20.33.000 PM						       20-APR-23 04.20.33.000 PM						   20-APR-23 04.30.50.006 PM
      1131 19-APR-23 10.11.09.000 AM						       19-APR-23 11.00.30.577 AM						   19-APR-23 12.00.41.585 PM
      1126 12-APR-23 05.16.19.000 PM						       12-APR-23 05.16.19.000 PM						   12-APR-23 05.26.49.832 PM
      1128 18-APR-23 11.19.32.000 PM						       18-APR-23 11.19.32.000 PM						   18-APR-23 11.30.03.024 PM
      1134 20-APR-23 05.49.08.000 PM						       20-APR-23 05.49.08.000 PM						   20-APR-23 06.00.36.412 PM
      1129 19-APR-23 10.11.09.000 AM						       19-APR-23 10.11.09.000 AM						   19-APR-23 10.21.35.563 AM
      1127 18-APR-23 06.31.53.000 PM						       18-APR-23 06.31.53.000 PM						   18-APR-23 06.42.35.592 PM

10 rows selected.

SQL> exec dbms_workload_capture.start_capture(name=>'test_capture', dir=>'DB_REPLAY_CAPTURE_DIR', duration=> NULL);

PL/SQL procedure successfully completed.

SQL>

开始负载模拟(swingbench),如下:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

注:我这里负载时间约10分钟,时间太长 需要注意存储空间大小的问题!


停止负载,停止捕获,如下:

SQL> exec dbms_workload_capture.finish_capture();

PL/SQL procedure successfully completed.

SQL> exec dbms_workload_repository.create_snapshot();

PL/SQL procedure successfully completed.

SQL>
SQL> select SNAP_ID,STARTUP_TIME,BEGIN_INTERVAL_TIME,END_INTERVAL_TIME from dba_hist_snapshot;

   SNAP_ID STARTUP_TIME 							       BEGIN_INTERVAL_TIME							   END_INTERVAL_TIME
---------- --------------------------------------------------------------------------- --------------------------------------------------------------------------- ---------------------------------------------------------------------------
      1130 19-APR-23 10.11.09.000 AM						       19-APR-23 10.21.35.563 AM						   19-APR-23 11.00.30.577 AM
      1132 19-APR-23 10.11.09.000 AM						       19-APR-23 12.00.41.585 PM						   19-APR-23 01.00.07.221 PM
      1133 20-APR-23 04.20.33.000 PM						       20-APR-23 04.20.33.000 PM						   20-APR-23 04.30.50.006 PM
      1131 19-APR-23 10.11.09.000 AM						       19-APR-23 11.00.30.577 AM						   19-APR-23 12.00.41.585 PM
      1128 18-APR-23 11.19.32.000 PM						       18-APR-23 11.19.32.000 PM						   18-APR-23 11.30.03.024 PM
      1134 20-APR-23 05.49.08.000 PM						       20-APR-23 05.49.08.000 PM						   20-APR-23 06.00.36.412 PM
      1129 19-APR-23 10.11.09.000 AM						       19-APR-23 10.11.09.000 AM						   19-APR-23 10.21.35.563 AM
      1135 21-APR-23 09.28.38.000 AM						       21-APR-23 09.28.38.000 AM						   21-APR-23 09.39.34.555 AM
      1127 18-APR-23 06.31.53.000 PM						       18-APR-23 06.31.53.000 PM						   18-APR-23 06.42.35.592 PM
	 1 21-APR-23 09.28.38.000 AM						       21-APR-23 09.28.38.000 AM						   21-APR-23 09.31.45.293 AM
	 2 21-APR-23 09.28.38.000 AM						       21-APR-23 09.31.45.293 AM						   21-APR-23 09.32.43.391 AM

   SNAP_ID STARTUP_TIME 							       BEGIN_INTERVAL_TIME							   END_INTERVAL_TIME
---------- --------------------------------------------------------------------------- --------------------------------------------------------------------------- ---------------------------------------------------------------------------
	 3 21-APR-23 09.28.38.000 AM						       21-APR-23 09.32.43.391 AM						   21-APR-23 09.55.04.855 AM
	 4 21-APR-23 09.28.38.000 AM						       21-APR-23 09.55.04.855 AM						   21-APR-23 09.55.25.590 AM

13 rows selected.

SQL>

查看捕获的目录,如下:

[oracle@dbserver db_replay_capture]$ tree
.
├── cap
│   ├── wcr_cr.html
│   ├── wcr_cr.text
│   ├── wcr_fcapture.wmd
│   └── wcr_scapture.wmd
└── capfiles
    └── inst1
        ├── aa
        │   ├── wcr_43u3nh0000000.rec
        │   ├── wcr_43u79h0000001.rec
        │   ├── wcr_43u7wh0000002.rec
        │   ├── wcr_43u7wh0000003.rec
        │   ├── wcr_43u7wh0000004.rec
        │   ├── wcr_43u7wh0000005.rec
        │   ├── wcr_43u7wh0000006.rec
        │   ├── wcr_43u7wh0000007.rec
        │   ├── wcr_43u7wh0000008.rec
        │   ├── wcr_43u7wh0000009.rec
        │   ├── wcr_43u7wh000000a.rec
        │   ├── wcr_43u7wh000000b.rec
        │   ├── wcr_43u7wh000000c.rec
        │   ├── wcr_43u7wh000000d.rec
        │   ├── wcr_43u7wh000000f.rec
        │   ├── wcr_43u7wh000000g.rec
        │   ├── wcr_43u7wh000000h.rec
        │   ├── wcr_43u7wh000000j.rec
        │   ├── wcr_43u7wh000000k.rec
        │   ├── wcr_43u7wh000000m.rec
        │   ├── wcr_43u8vh000000n.rec
        │   ├── wcr_43ud4h000000p.rec
        │   ├── wcr_43uhuh000000q.rec
        │   ├── wcr_43um7h000000r.rec
        │   ├── wcr_43um7h000000s.rec
        │   ├── wcr_43um7h000000t.rec
        │   ├── wcr_43um7h000000u.rec
        │   ├── wcr_43um7h000000v.rec
        │   ├── wcr_43um7h000000w.rec
        │   ├── wcr_43um7h000000x.rec
        │   ├── wcr_43um7h000000y.rec
        │   ├── wcr_43um7h000000z.rec
        │   ├── wcr_43um7h0000010.rec
        │   ├── wcr_43um7h0000011.rec
        │   ├── wcr_43um7h0000012.rec
        │   ├── wcr_43um7h0000013.rec
        │   ├── wcr_43um7h0000014.rec
        │   ├── wcr_43umch0000015.rec
        │   ├── wcr_43umjh0000016.rec
        │   └── wcr_43v7rh0000017.rec
        ├── ab
        ├── ac
        ├── ad
        ├── ae
        ├── af
        ├── ag
        ├── ah
        ├── ai
        └── aj

13 directories, 44 files
[oracle@dbserver db_replay_capture]$

此时获取caputre_id,如下:

-- 通过内部函数读取:

SQL> select DBMS_WORKLOAD_CAPTURE.get_capture_info('DB_REPLAY_CAPTURE_DIR') FROM dual;

DBMS_WORKLOAD_CAPTURE.GET_CAPTURE_INFO('DB_REPLAY_CAPTURE_DIR')
---------------------------------------------------------------
							      1

SQL>

-- 读取dba_workload_captures视图读取:
SQL> SELECT id, name FROM dba_workload_captures;

	ID NAME
---------- --------------------------------------------------------------------------------------------------------------------------------
	 1 test_capture

SQL>

负载处理

注:由于是测试环境、捕获和重放是同一台机器(正式环境下需要将捕获的文件复制到目标机器上),我们这里开始使用上面创建的另一个PDB,如下:

[oracle@dbserver ~]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Fri Apr 21 09:58:51 2023
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

SQL> show pdbs;

    CON_ID CON_NAME			  OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
	 2 PDB$SEED			  READ ONLY  NO
	 3 ORCLPDB			  READ WRITE NO
	 4 REPLAYPDB			  READ WRITE NO
	 5 CAPTUREPDB			  READ WRITE NO
SQL> alter session set container=replaypdb;

Session altered.

SQL> show pdbs;

    CON_ID CON_NAME			  OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
	 4 REPLAYPDB			  READ WRITE NO
SQL>

之后就开始预处理,由于是同一台机器测试的,下面在REPLAYPDB上建立目录:

CREATE OR REPLACE DIRECTORY db_replay_capture_dir AS '/home/oracle/db_replay_capture/';
SQL> conn sys/123456@replaypdb as sysdba
Connected.
SQL> BEGIN
DBMS_WORKLOAD_REPLAY.process_capture('DB_REPLAY_CAPTURE_DIR');
END;
/  2    3    4  

PL/SQL procedure successfully completed.

SQL>

这个时候再去看一下目录,上下两次对比 如下:

在这里插入图片描述

如上,预处理之后,目录方的中生成了重演的数据,pp19.3.0.0.0的目录


负载重放

这里使用wrc工具进行校验,效验结果会显示完成replay需要replay clients和hosts的数量,如下:

[oracle@dbserver ~]$ wrc mode=calibrate replaydir=/home/oracle/db_replay_capture

Workload Replay Client: Release 19.3.0.0.0 - Production on Fri Apr 21 10:02:44 2023

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.


Report for Workload in: /home/oracle/db_replay_capture
-----------------------

Recommendation:
Consider using at least 1 clients divided among 1 CPU(s)
You will need at least 67 MB of memory per client process.
If your machine(s) cannot match that number, consider using more clients.

Workload Characteristics:
- max concurrency: 18 sessions
- total number of sessions: 40

Assumptions:
- 1 client process per 100 concurrent sessions
- 4 client processes per CPU
- 256 KB of memory cache per concurrent session
- think time scale = 100
- connect time scale = 100
- synchronization = TRUE

[oracle@dbserver ~]$

接下来,开始replay。在上面的效验结果,显示一个CPU上建议一个client,所以我们这里开始一个replay client。

-- 使用 initialize_replay 装载metadata到tables里

SQL> EXEC DBMS_WORKLOAD_REPLAY.initialize_replay (replay_name=>'test_replay', replay_dir=>'DB_REPLAY_CAPTURE_DIR');

PL/SQL procedure successfully completed.

SQL>
-- 映射连接:
SQL> select id as replay_id, name, dbid, directory from dba_workload_replays;

 REPLAY_ID NAME 																  DBID DIRECTORY
---------- -------------------------------------------------------------------------------------------------------------------------------- ---------- --------------------------------------------------------------------------------------------------------------------------------
	 1 test_replay															    1097890259 DB_REPLAY_CAPTURE_DIR

SQL> select conn_id, capture_conn, replay_conn from dba_workload_connection_map where replay_id = 1;
...

-- 改主机名和服务
SQL> set lines 200 pages 0
SQL> 
SQL> select 'exec dbms_workload_replay.remap_connection('||conn_id||', ''(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = replaypdb)))'');' from dba_workload_connection_map where replay_id = 1;
exec dbms_workload_replay.remap_connection(1, '(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = replaypdb)))');
...

然后把这些SQL执行,以确保确保wrc能连上,如下:

在这里插入图片描述


-- 将数据改成PREPARE REPLAY 模式:

SQL> exec DBMS_WORKLOAD_REPLAY.prepare_replay(synchronization=>TRUE);

PL/SQL procedure successfully completed.

SQL> 
-- 检查replay的状态:

SQL> select name, status from dba_workload_replays;

NAME																 STATUS
-------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------
test_replay															 PREPARE

SQL>
[oracle@dbserver ~]$ wrc system/123456@replaypdb mode=replay replaydir=/home/oracle/db_replay_capture


-- 执行之后,replay client 被暂停,并等待start replay 。 在sqlplus 窗口执行如下命令:

SQL> exec dbms_workload_repository.create_snapshot()

PL/SQL procedure successfully completed.

SQL> exec dbms_workload_replay.start_replay()

PL/SQL procedure successfully completed.

SQL> select name,status from  dba_workload_replays;
test_replay															 IN PROGRESS

SQL> 

在这里插入图片描述

可能是我的虚拟机配置的问题,经过漫长的等待 回放完成,如下:

[oracle@dbserver ~]$ wrc system/123456@replaypdb mode=replay replaydir=/home/oracle/db_replay_capture

Workload Replay Client: Release 19.3.0.0.0 - Production on Fri Apr 21 10:11:22 2023

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.


Wait for the replay to start (10:11:22)
Replay client 1 started (10:12:11)
Replay client 1 finished (12:24:16)
[oracle@dbserver ~]$ 

等dba_workload_replays中的状态变成compelte就完成replay。此时replayclient会显示操作开始和结束的时间,如下:

SQL> select name,status from  dba_workload_replays;
test_replay															 COMPLETED

SQL> exec dbms_workload_repository.create_snapshot()

PL/SQL procedure successfully completed.

SQL> 
[oracle@dbserver db_replay_capture]$ tree
.
├── cap
│   ├── wcr_cr.html
│   ├── wcr_cr.text
│   ├── wcr_fcapture.wmd
│   └── wcr_scapture.wmd
├── capfiles
│   └── inst1
│       ├── aa
│       │   ├── wcr_43u3nh0000000.rec
│       │   ├── wcr_43u79h0000001.rec
│       │   ├── wcr_43u7wh0000002.rec
│       │   ├── wcr_43u7wh0000003.rec
│       │   ├── wcr_43u7wh0000004.rec
│       │   ├── wcr_43u7wh0000005.rec
│       │   ├── wcr_43u7wh0000006.rec
│       │   ├── wcr_43u7wh0000007.rec
│       │   ├── wcr_43u7wh0000008.rec
│       │   ├── wcr_43u7wh0000009.rec
│       │   ├── wcr_43u7wh000000a.rec
│       │   ├── wcr_43u7wh000000b.rec
│       │   ├── wcr_43u7wh000000c.rec
│       │   ├── wcr_43u7wh000000d.rec
│       │   ├── wcr_43u7wh000000f.rec
│       │   ├── wcr_43u7wh000000g.rec
│       │   ├── wcr_43u7wh000000h.rec
│       │   ├── wcr_43u7wh000000j.rec
│       │   ├── wcr_43u7wh000000k.rec
│       │   ├── wcr_43u7wh000000m.rec
│       │   ├── wcr_43u8vh000000n.rec
│       │   ├── wcr_43ud4h000000p.rec
│       │   ├── wcr_43uhuh000000q.rec
│       │   ├── wcr_43um7h000000r.rec
│       │   ├── wcr_43um7h000000s.rec
│       │   ├── wcr_43um7h000000t.rec
│       │   ├── wcr_43um7h000000u.rec
│       │   ├── wcr_43um7h000000v.rec
│       │   ├── wcr_43um7h000000w.rec
│       │   ├── wcr_43um7h000000x.rec
│       │   ├── wcr_43um7h000000y.rec
│       │   ├── wcr_43um7h000000z.rec
│       │   ├── wcr_43um7h0000010.rec
│       │   ├── wcr_43um7h0000011.rec
│       │   ├── wcr_43um7h0000012.rec
│       │   ├── wcr_43um7h0000013.rec
│       │   ├── wcr_43um7h0000014.rec
│       │   ├── wcr_43umch0000015.rec
│       │   ├── wcr_43umjh0000016.rec
│       │   └── wcr_43v7rh0000017.rec
│       ├── ab
│       ├── ac
│       ├── ad
│       ├── ae
│       ├── af
│       ├── ag
│       ├── ah
│       ├── ai
│       └── aj
├── pp19.3.0.0.0
│   ├── capfiles
│   │   └── inst1
│   │       └── aa
│   │           ├── wcr_43u7wh0000003.cscn
│   │           ├── wcr_43u7wh0000004.cscn
│   │           ├── wcr_43u7wh0000005.cscn
│   │           ├── wcr_43u7wh0000006.cscn
│   │           ├── wcr_43u7wh0000007.cscn
│   │           ├── wcr_43u7wh0000008.cscn
│   │           ├── wcr_43u7wh0000009.cscn
│   │           ├── wcr_43u7wh000000a.cscn
│   │           ├── wcr_43u7wh000000b.cscn
│   │           ├── wcr_43u7wh000000c.cscn
│   │           ├── wcr_43u7wh000000d.cscn
│   │           ├── wcr_43u7wh000000f.cscn
│   │           ├── wcr_43u7wh000000g.cscn
│   │           ├── wcr_43u7wh000000h.cscn
│   │           ├── wcr_43u7wh000000j.cscn
│   │           ├── wcr_43u7wh000000k.cscn
│   │           ├── wcr_43u7wh000000m.cscn
│   │           ├── wcr_43u8vh000000n.cscn
│   │           ├── wcr_43um7h000000r.cscn
│   │           ├── wcr_43um7h000000s.cscn
│   │           ├── wcr_43um7h000000t.cscn
│   │           ├── wcr_43um7h000000u.cscn
│   │           ├── wcr_43um7h000000v.cscn
│   │           ├── wcr_43um7h000000w.cscn
│   │           ├── wcr_43um7h000000x.cscn
│   │           ├── wcr_43um7h000000y.cscn
│   │           ├── wcr_43um7h000000z.cscn
│   │           ├── wcr_43um7h0000010.cscn
│   │           ├── wcr_43um7h0000011.cscn
│   │           ├── wcr_43um7h0000012.cscn
│   │           ├── wcr_43um7h0000013.cscn
│   │           ├── wcr_43um7h0000014.cscn
│   │           ├── wcr_43umch0000015.cscn
│   │           └── wcr_43umjh0000016.cscn
│   ├── wcr_calibrate.xml
│   ├── wcr_commits.extb
│   ├── wcr_conn_data.extb
│   ├── wcr_data.extb
│   ├── wcr_dep_graph.extb
│   ├── wcr_login.extb
│   ├── wcr_login.pp
│   ├── wcr_process.wmd
│   ├── wcr_references.extb
│   ├── wcr_schema_info.extb
│   ├── wcr_scn_order.extb
│   ├── wcr_seq_data.extb
│   ├── wcr_sqltext.extb
│   └── wcr_xa.extb
└── rep724197750
    ├── wcr_ra_724197750.dmp
    ├── wcr_ra_724197750.log
    ├── wcr_replay_div_summary.extb
    ├── wcr_replay_thread.extb
    ├── wcr_replay.wmd
    ├── wcr_rep_uc_graph_724197750.extb
    ├── wcr_rr_724197750.xml
    └── wcr_tracked_commits.extb

18 directories, 100 files
[oracle@dbserver db_replay_capture]$

分析报告

生成回放报告,如下:

SQL> select id,name,status from  dba_workload_replays;
	 1 test_replay															    COMPLETED

SQL> show pdbs;
	 4 REPLAYPDB			  READ WRITE NO
SQL> DECLARE
	l_report  CLOB;
BEGIN
	l_report := DBMS_WORKLOAD_REPLAY.report(replay_id=>1, format=>DBMS_WORKLOAD_REPLAY.TYPE_HTML);
END;
/  2    3    4    5    6  

PL/SQL procedure successfully completed.

SQL>
[oracle@dbserver db_replay_capture]$ ls
cap  capfiles  pp19.3.0.0.0  rep724197750
[oracle@dbserver db_replay_capture]$ 
[oracle@dbserver db_replay_capture]$ 
[oracle@dbserver db_replay_capture]$ cd rep724197750/
[oracle@dbserver rep724197750]$ ls
wcr_ra_724197750.dmp  wcr_ra_724197750.log  wcr_replay_div_summary.extb  wcr_replay_thread.extb  wcr_replay.wmd  wcr_rep_uc_graph_724197750.extb  wcr_rr_724197750.html  wcr_rr_724197750.xml  wcr_tracked_commits.extb
[oracle@dbserver rep724197750]$ ll
总用量 15120
-rw-rw---- 1 oracle oracle 14594048 421 12:24 wcr_ra_724197750.dmp
-rw-rw-r-- 1 oracle oracle    35567 421 12:24 wcr_ra_724197750.log
-rw-rw---- 1 oracle oracle    20480 421 12:21 wcr_replay_div_summary.extb
-rw-rw---- 1 oracle oracle    20480 421 12:24 wcr_replay_thread.extb
-rw-rw-r-- 1 oracle oracle   435209 421 12:21 wcr_replay.wmd
-rw-rw---- 1 oracle oracle    12288 421 12:24 wcr_rep_uc_graph_724197750.extb
-rw-rw-r-- 1 oracle oracle   133252 421 12:32 wcr_rr_724197750.html
-rw-rw-r-- 1 oracle oracle    82140 421 12:24 wcr_rr_724197750.xml
-rw-rw---- 1 oracle oracle   139264 421 12:24 wcr_tracked_commits.extb
[oracle@dbserver rep724197750]$ 
[oracle@dbserver rep724197750]$ ll wcr_rr_724197750.html
-rw-rw-r-- 1 oracle oracle 133252 421 12:32 wcr_rr_724197750.html
[oracle@dbserver rep724197750]$ 
[oracle@dbserver rep724197750]$ 
[oracle@dbserver rep724197750]$ 
[oracle@dbserver rep724197750]$ pwd
/home/oracle/db_replay_capture/rep724197750
[oracle@dbserver rep724197750]$

报告如下:

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述
在这里插入图片描述


在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/449286.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

操作系统概述及Linux基本指令(1)

目录 一. 操作系统 1.1 什么是操作系统 1.2 操作系统的核心工作 二. Linux的基本指令 2.1 ls指令 -- 打印文件名 2.2 pwd指令 -- 显示路径 2.3 cd指令 -- 进入特定目录 2.4 touch指令 -- 创建普通文件 2.5 mkdir指令 -- 创建路径 2.6 rmdir/rm指令 -- 删除路径或普通…

【GeoDjango框架解析】空间方法的ORM查询

原文作者:我辈理想 版权声明:文章原创,转载时请务必加上原文超链接、作者信息和本声明。 Django数据操作-ORM 第一章 【Django开发入门】ORM的增删改查和批量操作 第二章 【Django开发入门】ORM查询分页以及返回Json格式 文章目录 Django数据…

中国人民大学与加拿大女王大学金融硕士——在职读研该如何平衡学习与工作呢

边工作边考研,对于所有人来说都是个不小的挑战,每年都有大量在职生因为焦躁、压力而中途离场。学习时间碎片化,复习进度特别容易被工作上的事情所打断,再想“重新启动”就会很难。想要节省备考时间建议你读免联考的中外合作办学项…

基于Canvas实现图片的上传和渲染

1 Canvas 1.1 什么是Canvas 是一个可以使用脚本 (通常为JavaScript) 来绘制图形的 HTML 元素。例如&#xff0c;它可以用于绘制图表、制作图片构图或者制作简单的动画。 1.2 基本使用 宽高&#xff1a; <canvas id"tutorial" width"150" height&qu…

<C++>C++入门

目录 前言 一、C关键字&#xff08;C98&#xff09; 二、命名空间 1. 命名空间定义 2. 命名空间的使用 3. 命名空间的使用有三种方式&#xff1a; 三、C输入&输出 四、缺省参数 1. 缺省参数概念 2. 缺省参数的分类 3. 缺省参数的应用 五、函数重载 六、引用 1. 引用的概念…

web实验(2)

&#xff08;1&#xff09; 应用html标签和css完成如下所示页面效果&#xff0c;图片见附件。 说明&#xff1a; 内容相对于浏览器居中,宽860px鼠标移动至列表项上&#xff0c;显示背景色#F8F8F8分割线2px solid #ccc&#xff0c;每项高130px第一行文字&#xff1a;20px 黑体…

4.功能权限

基于角色的权限控制&#xff0c;用户分配角色&#xff0c;角色分配菜单。 1. 权限注解 1.基于【权限标识】的权限控制 权限标识&#xff0c;对应 system_menu 表的 permission 字段&#xff0c;推荐格式为 {系统}:{模块}:{操作}&#xff0c;例如说 system:admin:add 标识 sy…

chatgpt智能提效职场办公-ppt怎么做才好看又快

作者&#xff1a;虚坏叔叔 博客&#xff1a;https://xuhss.com 早餐店不会开到晚上&#xff0c;想吃的人早就来了&#xff01;&#x1f604; 制作ppt有几个方面可以考虑&#xff0c;以实现既好看又快速的目的&#xff1a; 使用模板&#xff1a;使用ppt模板可以更快速地制作出一…

JavaScript概述二(Date+正则表达式+Math+函数+面向对象)

1.Date 1.1 new一个Date对象表示当前系统时间 var nownew Date(); console.log(now);1.2 根据传入的时间格式表示时间 var date1new Date(2023-4-20 00:16:40); console.log(date1); 1.3 传入时间毫秒数&#xff0c;返回从1900年1月1日8时&#xff08;东八区&#xff09;X分X…

C语言入门篇——操作符篇

目录 1、操作符分类 2、操作符的属性 3、算术操作符 4、移位操作符 5、位操作符 6、赋值操作符 7、单目操作符 8、关系操作符 9、逻辑操作符 10、条件操作符 11、逗号操作符 12、下标引用、函数调用和结构成员 1、操作符分类 算术操作符&#xff08;&#xff0c;-&…

办公必备!不再被格式问题困扰,轻松搞定文档转换!

大家平时在工作中会需要将文档转换为其他格式吗&#xff1f; 日常工作中&#xff0c;经常碰到需要文件格式转换的情况&#xff0c;对于掌握了一些转换技能的朋友说&#xff0c;文件格式转换自然不在话下 对于不熟练的朋友来说&#xff0c;想要轻松转换文件格式&#xff0c;就…

c++ std::enable_shared_from_this作用

enable_shared_from_this 是什么 std::enable_shared_from_this 是一个类模板&#xff0c;用来返回指向当前对象的shared_ptr智能指针。在说明它的作用前我们可以看一下如下代码&#xff1a; demo.cpp #include <memory> #include <iostream>class A { public:A…

web实验(3)

应用JavaScript编写留言的功能&#xff0c;在文本中输入文字提交后&#xff0c;在下方进行显示。 提示&#xff1a;可将下方内容以列表体现&#xff0c;提交时动态创建列表的项。可使用以下两种方式之一的方法&#xff1a; 使用CreateElenment动态创建li标签及li中的文本 在列…

PADS-LOGIC项目原理图设计

最小板原理图设计 目录 1 菜单与工具使用 2 常用设置 2.1选项卡 2.2 图纸设置 2.3 颜色设置 3 设计技巧 3.1 模块化设计思路 3.2 元件放置 3.3 走线及连接符 4 原理图绘制 4.1 POWER原理图设计 4.2 MCU原理图设计 4.2.1晶振电路 4.2.2复位电路 4.2.3 BOOT电路 …

Windows 11快捷键功能大全 28个Windows 11快捷键功能介绍

Windows 11快捷键功能大全 28个Windows 11快捷键功能介绍 1. WinA 打开快速设置面板2. WinB 快速跳转系统托盘3. WinC 打开Microsoft Teams4. WinD 快速显示桌面5. WinE 打开资源管理器6. WinF 一键提交反馈7. WinG 启动Xbox Game Bar8. WinH 语音听写9. WinI 打开设置10. WinK…

如何正确高效地学习android开发?

每一个能成为行业大佬的人&#xff0c;一定有自己独特的方法… 之所以能成为大佬&#xff0c;是因为他们会有自己独特的见解&#xff0c;在一次次的尝试中不断否定&#xff0c;然后一次次的确定&#xff0c;一个程序员想要精益求精&#xff0c;必须要有高效的学习方法和良好的…

Spring Cloud Alibaba基于Sentinel实现限流降级自定义配置结果

hello&#xff0c;你好呀&#xff0c;我是灰小猿&#xff0c;一个超会写bug的程序员&#xff01; sentinel作为SpringCloudAlibaba的基本组件&#xff0c;在进行熔断、限流、降级等方面具有十分重要的作用&#xff0c;而且其基于Web界面对接口进行限流配置&#xff0c;使得实时…

环形链表II(链表篇)

给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整…

伪原创文章生成器-伪原创工具在线使用

文章伪原创工具 在如今数字时代&#xff0c;内容创作已经成为了一项必不可少的营销策略。然而&#xff0c;创作原创内容需要相当的时间和精力&#xff0c;尤其是对于需要大量输出内容的企业或个人而言。这时&#xff0c;文章伪原创工具就成为了一种快速、高效的选项。在本文中…

Doris(15):物化视图

1 概念 物化视图是将预先计算&#xff08;根据定义好的 SELECT 语句&#xff09;好的数据集&#xff0c;存储在 Doris 中的一个特殊的表。 物化视图的出现主要是为了满足用户&#xff0c;既能对原始明细数据的任意维度分析&#xff0c;也能快速的对固定维度进行分析查询。 首…