目录结构
注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下:
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包技术详解,点击前往
数据库回放的演示
数据库重放由四个主要步骤组成,如上图所示,如下所述:
-
工作负载捕获
启用工作负载捕获后,所有指向 Oracle 数据库的外部客户端请求都将被跟踪并存储在数据库服务器主机文件系统上的二进制文件(称为捕获文件)中。Oracle 建议在捕获负载之前对整个数据库进行备份。用户指定捕获文件的位置以及工作负载捕获的开始和结束时间。在此过程中,与外部数据库调用有关的所有信息都将写入捕获文件
-
工作负载处理
捕获工作负载后,必须处理捕获文件中的信息。此处理将捕获的数据转换为重放文件,并创建重放工作负载所需的所有必要元数据。捕获文件通常会被复制到另一个系统进行处理。在重放之前,必须为每个捕获的工作负载执行一次此操作。捕获的工作负载处理后,可以在重放系统上重复重放。由于工作负载处理可能非常耗时且资源密集,因此通常建议在将重放工作负载的测试系统上执行此步骤
-
工作负载回放
处理完捕获的工作负载后,就可以重放了。然后,名为 Replay Client 的客户端程序处理重播文件,并以与捕获系统完全相同的时间和并发性将调用提交给数据库。根据捕获的工作负载,您可能需要一个或多个重放客户端才能正确重放工作负载。提供了一个校准工具来帮助确定工作负载所需的重播客户端数量。应该注意的是,由于重放了整个工作负载,包括 DML 和 SQL 查询,因此重放系统中的数据必须与捕获其工作负载的生产系统中的数据相同,以便能够为报告目的进行可靠的分析
-
分析和报告
提供了广泛的报告,以便对捕获和重放进行详细分析。报告重放期间遇到的任何错误。显示 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 4月 21 12:24 wcr_ra_724197750.dmp
-rw-rw-r-- 1 oracle oracle 35567 4月 21 12:24 wcr_ra_724197750.log
-rw-rw---- 1 oracle oracle 20480 4月 21 12:21 wcr_replay_div_summary.extb
-rw-rw---- 1 oracle oracle 20480 4月 21 12:24 wcr_replay_thread.extb
-rw-rw-r-- 1 oracle oracle 435209 4月 21 12:21 wcr_replay.wmd
-rw-rw---- 1 oracle oracle 12288 4月 21 12:24 wcr_rep_uc_graph_724197750.extb
-rw-rw-r-- 1 oracle oracle 133252 4月 21 12:32 wcr_rr_724197750.html
-rw-rw-r-- 1 oracle oracle 82140 4月 21 12:24 wcr_rr_724197750.xml
-rw-rw---- 1 oracle oracle 139264 4月 21 12:24 wcr_tracked_commits.extb
[oracle@dbserver rep724197750]$
[oracle@dbserver rep724197750]$ ll wcr_rr_724197750.html
-rw-rw-r-- 1 oracle oracle 133252 4月 21 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]$
报告如下: