目录结构

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

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之DBMS_WORKLOAD_REPLAY包技术详解

文章快速说明索引负载捕获包简介DBMS_WORKLOAD_REPLAY 安全模型ADD_CAPTURE FunctionADD_FILTER ProcedureADD_SCHEDULE_ORDERING FunctionASSIGN_GROUP_TO_INSTANCE ProcedureBEGIN_REPLAY_SCHEDULE ProcedureCALIBRATE FunctionCANCEL_REPLAY ProcedureCOMPARE_PERIOD_REPORT ProcedureCOMPARE_SQLSET_REPORT FunctionCREATE_FILTER_SET ProcedureDELETE_FILTER ProcedureDELETE_REPLAY_INFO ProcedureEND_REPLAY_SCHEDULE ProcedureEXPORT_AWR ProcedureGENERATE_CAPTURE_SUBSET ProcedureGET_DIVERGING_STATEMENT FunctionGET_REPLAY_DIRECTORY FunctionGET_REPLAY_INFO FunctionGET_REPLAY_TIMEOUT ProcedureIMPORT_AWR FunctionINITIALIZE_CONSOLIDATED_REPLAY ProcedureINITIALIZE_REPLAY ProcedureIS_REPLAY_PAUSED FunctionLOAD_LONG_SQLTEXT ProcedurePAUSE_REPLAY ProcedurePOPULATE_DIVERGENCE ProcedurePREPARE_CONSOLIDATED_REPLAY ProcedurePREPARE_REPLAY ProcedurePROCESS_CAPTURE ProcedureREMAP_CONNECTION ProcedureREMOVE_CAPTURE ProcedureREMOVE_SCHEDULE_ORDERING ProcedureREPORT FunctionRESUME_REPLAY ProcedureREUSE_REPLAY_FILTER_SET ProcedureSET_ADVANCED_PARAMETER ProcedureSET_REPLAY_DIRECTORY ProcedureSET_REPLAY_TIMEOUT ProcedureSET_SQL_MAPPING ProcedureSET_USER_MAPPING ProcedureSTART_CONSOLIDATED_REPLAY ProcedureSTART_REPLAY ProcedureUSE_FILTER_SET Procedure

文章快速说明索引

学习目标:

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

学习内容:(详见目录)

1、Oracle数据库Real Application Testing之DBMS_WORKLOAD_REPLAY包技术详解

学习时间:

2023年03月28日 21:02:57

学习产出:

1、Oracle数据库Real Application Testing之DBMS_WORKLOAD_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>

负载捕获包简介

官方链接:https://docs.oracle.com/en/database/oracle/oracle-database/21/arpls/DBMS_WORKLOAD_REPLAY.html

Oracle 测试指南 数据库回放,相关内容:

官方链接:https://docs.oracle.com/en/database/oracle/oracle-database/21/ratug/database-replay.html

DBMS_WORKLOAD_REPLAY 包提供了一个接口来重放工作负载捕获。DBMS_WORKLOAD_REPLAY 包提供了一个接口来重放最初通过 DBMS_WORKLOAD_CAPTURE 包创建的工作负载捕获。通常,在生产系统中使用 DBMS_WORKLOAD_CAPTURE 包来捕获生产工作负载,随后在测试系统中使用 DBMS_WORKLOAD_REPLAY 包来重放捕获的生产工作负载以用于测试目的。

DBMS_WORKLOAD_REPLAY 安全模型

安全模型描述了使用 DBMS_WORKLOAD_REPLAY 所需的权限。以下代码示例显示了执行以下操作所需的最低权限集:

创建目录对象操作DBMS_WORKLOAD_CAPTURE和DBMS_WORKLOAD_REPLAY包提供的接口充当重播客户端用户(wrc someuser/somepassword 或 wrc USER=someuser PASSWORD=somepassword)

DROP USER rom1 CASCADE;

CREATE USER rom1 IDENTIFIED BY rom1;

GRANT EXECUTE ON DBMS_WORKLOAD_CAPTURE TO rom1;

GRANT EXECUTE ON DBMS_WORKLOAD_REPLAY TO rom1;

GRANT CREATE SESSION TO rom1;

GRANT CREATE ANY DIRECTORY TO rom1;

GRANT SELECT_CATALOG_ROLE TO rom1;

GRANT BECOME USER TO rom1;

需要适当的操作系统权限才能访问和操作捕获和重放系统上的文件和目录。Oracle 进程和执行捕获或重放的操作系统用户必须能够访问和操作至少一个可从运行实例的主机访问的公共目录。

重放客户端是一个多线程程序(一个名为 wrc 的可执行文件,位于 $ORACLE_HOME/bin 目录中),其中每个线程从捕获的会话中提交工作负载。执行重放的操作系统用户必须能够在用于重放客户端的主机上执行 wrc,并且能够适当地访问文件系统,以便能够在需要时将捕获复制到重放客户端的主机。

此表按字母顺序列出了 DBMS_WORKLOAD_REPLAY 包子程序。

DBMS_WORKLOAD_REPLAY Package Subprograms

SubprogramDescriptionADD_CAPTURE Function将给定的捕获添加到当前计划ADD_FILTER Procedure添加一个过滤器以仅重放捕获的工作负载的一个子集ADD_SCHEDULE_ORDERING Function在两次捕获之间添加计划顺序ASSIGN_GROUP_TO_INSTANCE Procedure修改视图 DBA_WORKLOAD_GROUP_ASSIGNMENTSBEGIN_REPLAY_SCHEDULE Procedure开始创建可重复使用的重放计划CALIBRATE Function在已处理的工作负载捕获目录上运行,以估计忠实重放给定工作负载所需的主机和工作负载重放客户端的数量CANCEL_REPLAY Procedure取消正在进行的工作负载重放COMPARE_PERIOD_REPORT Procedure生成一份报告,将回放与其捕获或同一捕获的另一个回放进行比较COMPARE_SQLSET_REPORT Function生成一份报告,将重放期间捕获的 sqlset 与工作负载捕获期间捕获的 sqlset 或同一捕获的另一重放期间捕获的 sqlset 进行比较CREATE_FILTER_SET Procedure使用添加的重放过滤器创建一组过滤器以用于 replay_dir 中的重放DELETE_FILTER Procedure删除命名过滤器DELETE_REPLAY_INFO Procedure删除 DBA_WORKLOAD_REPLAYS 中与给定工作负载重放 ID 对应的行END_REPLAY_SCHEDULE Procedure结束当前计划的创建EXPORT_AWR Procedure导出与给定重放 ID 关联的自动工作负载存储库 (AWR) 快照GENERATE_CAPTURE_SUBSET Procedure从现有工作负载捕获创建新捕获GET_DIVERGING_STATEMENT Function导出与给定重放 ID 关联的自动工作负载存储库 (AWR) 快照GET_REPLAY_DIRECTORY Function返回由 SET_REPLAY_DIRECTORY 过程设置的当前重放目录GET_REPLAY_INFO Function从相关目录中检索有关工作负载捕获的信息和所有工作负载重放尝试的历史记录GET_REPLAY_TIMEOUT Procedure检索重放超时设置IMPORT_AWR Function导入与给定重放 ID 关联的自动工作负载存储库 (AWR) 快照INITIALIZE_CONSOLIDATED_REPLAY Procedure将数据库状态置于 INIT 中以进行多次捕获重放INITIALIZE_REPLAY Procedure初始化回放,并将处理过程中产生的特定数据加载到数据库中IS_REPLAY_PAUSED Function报告回放当前是否暂停LOAD_LONG_SQLTEXT Procedure将捕获的超过 1000 个字符的 SQL 语句加载到 DBA_WORKLOAD_LONG_SQLTEXT 视图PAUSE_REPLAY Procedure暂停正在进行的工作负载重放POPULATE_DIVERGENCE Procedure预先计算给定调用、流或整个重放的发散信息,以便 GET_DIVERGING_STATEMENT 函数尽快返回预先计算的调用PREPARE_CONSOLIDATED_REPLAY Procedure将数据库置于特殊的“准备”模式以进行多次捕获重放PREPARE_REPLAY Procedure将数据库置于特殊的“准备”模式PROCESS_CAPTURE Procedure就地处理在 capture_dir 中找到的工作负载捕获REMAP_CONNECTION Procedure将捕获的连接重新映射到新连接,以便用户会话可以在工作负载重放期间以所需方式连接到数据库REMOVE_CAPTURE Procedure从当前计划中删除给定的捕获REMOVE_SCHEDULE_ORDERING Procedure从当前重放计划中删除现有的计划顺序REPORT Function生成有关给定工作负载重放的报告RESUME_REPLAY Procedure恢复暂停的工作负载重放REUSE_REPLAY_FILTER_SET Procedure重复使用指定过滤器集中的过滤器,就好像每个过滤器都是使用 ADD_SCHEDULE_ORDERING 函数添加的一样SET_ADVANCED_PARAMETER Procedure除了与 PREPARE_REPLAY 程序一起使用的参数之外,还为回放设置一个高级参数SET_REPLAY_DIRECTORY Procedure将包含多个工作负载捕获的目录设置为当前重放目录SET_REPLAY_TIMEOUT Procedure设置重放超时设置SET_SQL_MAPPING Procedure指定在数据库重放操作期间要跳过或替换的 SQL 语句SET_USER_MAPPING Procedure设置一个新的模式或用户名以在重播期间使用而不是捕获的用户START_CONSOLIDATED_REPLAY Procedure开始重播多重捕获捕获START_REPLAY Procedure启动工作负载重放USE_FILTER_SET Procedure使用通过调用 CREATE_FILTER_SET 过程创建的给定过滤器集来过滤当前重放

ADD_CAPTURE Function

此函数将给定的捕获添加到当前计划。该目录必须是在当前数据库版本中处理的有效捕获。它返回一个唯一 ID,用于标识此计划中的此捕获。其语法格式如下:

DBMS_WORKLOAD_REPLAY.ADD_CAPTURE (

capture_dir_name IN VARCHAR2,

start_delay_seconds IN NUMBER DEFAULT 0,

stop_replay IN BOOLEAN FALSE,

take_begin_snapshot IN BOOLEAN TRUE,

take_end_snapshot IN BOOLEAN TRUE,

query_only IN BOOLEAN DEFAULT FALSE)

RETURN NUMBER;

DBMS_WORKLOAD_REPLAY.ADD_CAPTURE (

capture_dir_name IN VARCHAR2,

start_delay_seconds IN NUMBER DEFAULT 0,

stop_replay IN BOOLEAN FALSE,

take_begin_snapshot IN BOOLEAN TRUE,

take_end_snapshot IN BOOLEAN TRUE,

query_only IN VARCHAR2 DEFAULT 'N')

RETURN NUMBER;

其参数解释如下:

ParameterDescriptioncapture_dir_name重放顶级目录下包含捕获的操作系统目录的名称start_delay_seconds开始重放此捕获之前的延迟时间(以秒为单位)stop_replay结束后停止回放take_begin_snapshot当此捕获的回放开始时拍摄 AWR 快照take_end_snapshot在此捕获的回放完成时获取 AWR 快照query_only仅重放此工作负载捕获的只读查询

注意事项:必须已经调用了 SET_REPLAY_DIRECTORY 过程。

ADD_FILTER Procedure

此过程添加一个过滤器以仅重放捕获的工作负载的一个子集。

该过程添加一个新过滤器,用于使用 CREATE_FILTER_SET 过程创建的下一个回放过滤器集。根据创建过滤器集时传递给 CREATE_FILTER_SET 的参数,此过滤器将被视为“包含”或“排除”过滤器。

其语法格式如下:

DBMS_WORKLOAD_REPLAY.ADD_FILTER (

fname IN VARCHAR2,

fattribute IN VARCHAR2,

fvalue IN VARCHAR2);

DBMS_WORKLOAD_REPLAY.ADD_FILTER (

fname IN VARCHAR2,

fattribute IN VARCHAR2,

fvalue IN NUMBER);

其参数解释如下:

ParameterDescriptionfname(强制)过滤器的名称。如果不需要,可用于稍后删除过滤器。fattribute(强制)指定将过滤器定义为以下类型 STRING 值之一的属性:USER MODULE ACTION PROGRAM SERVICE CONNECTION_STRINGfvalue(强制)指定给定的“属性”必须等于的值才能将过滤器视为活动的。对于类型为 STRING 的所有属性,诸如“%”之类的通配符是可接受的。当前列出的所有 fattribute 值都是 STRING 类型。INSTANCE_NUMBER 是一个 NUMBER 属性。目前仅支持捕获。

ADD_SCHEDULE_ORDERING Function

此函数在两次捕获之间添加计划顺序。

schedule_capture_id 和 waitfor_capture_id 一起构成了之前由 ADD_SCHEDULE_ORDERING 函数添加的调度顺序。该命令是除非waiting_for_capture_id 指示的捕获重放完成,否则schedule_capture_id 指示的捕获重放不会开始。其语法格式如下:

DBMS_WORKLOAD_REPLAY.ADD_SCHEDULE_ORDERING (

schedule_capture_id IN VARCHAR2,

waitfor_capture_id IN VARCHAR2)

RETURN NUMBER;

其参数解释如下:

ParameterDescriptionschedule_capture_id指向已添加到当前重放计划的捕获。根据这个子程序添加的新的调度顺序,它的重放将不会开始,直到 waitfor_capture_id 指定的另一个捕获的重放运行完成。waitfor_capture_id指向已添加到当前重播计划的捕获。根据本子程序新增的调度顺序,schedule_capture_id指定的捕获回放只有在本次捕获回放运行完成后才会开始。

函数返回值:如果无法添加约束,则返回非零错误代码

注意事项:这两个捕获必须已经添加到重放计划中。

ASSIGN_GROUP_TO_INSTANCE Procedure

此过程修改视图 DBA_WORKLOAD_GROUP_ASSIGNMENTS。其语法格式如下:

DBMS_WORKLOAD_REPLAY.ASSIGN_GROUP_TO_INSTANCE (

group_id IN INTEGER,

instance_number IN INTEGER);

其参数解释如下:

ParameterDescriptiongroup_id指定组抓包文件的标识instance_number用于实例注册的号码。它相当于 V$INSTANCE 中的 INSTANCE_NUMBER 列。

注意事项:

DBA_WORKLOAD_GROUP_ASSIGNMENTSV$INSTANCE

BEGIN_REPLAY_SCHEDULE Procedure

此过程启动可重用重放计划的创建。其语法格式如下:

DBMS_WORKLOAD_REPLAY.BEGIN_REPLAY_SCHEDULE (

replay_dir_obj IN VARCHAR2,

schedule_name IN VARCHAR2);

其参数解释如下:

ParameterDescriptionreplay_dir_obj指向重播目录的目录对象,该目录包含计划中涉及的所有捕获目录schedule_name要重播的计划的名称

注意事项:一次只能有一个计划处于创建模式。在 end_replay_schedule 之前再次调用子程序将引发错误。先决条件:

已使用同一数据库版本中的 PROCESS_CAPTURE 过程处理工作负载捕获用户必须已正确复制捕获目录数据库未处于重放模式SET_REPLAY_DIRECTORY 过程已被调用

CALIBRATE Function

此函数在处理过的工作负载捕获目录上运行,以估计忠实重放给定工作负载所需的主机和工作负载重放客户端的数量。此函数将结果作为 XML CLOB 返回。其语法格式如下:

DBMS_WORKLOAD_REPLAY.CALIBRATE (

capture_dir IN VARCHAR2,

process_per_cpu IN BINARY_INTEGER DEFAULT 4,

threads_per_process IN BINARY_INTEGER DEFAULT 50)

RETURN CLOB;

其参数解释如下:

ParameterDescriptioncapture_dir指向包含已处理捕获数据的(区分大小写的)操作系统目录的目录对象的名称process_per_cpu每个 CPU 允许的最大进程数(默认为 4)threads_per_process每个进程允许的最大线程数(默认为 50)

函数返回值:返回一个格式化为 XML 的 CLOB,其中包含:

捕获信息当前数据库版本此函数的输入参数重放给定工作负载所需的 CPU 和重放客户端数量有关捕获的会话的信息(总数和最大并发数)

注意事项:

先决条件:已使用同一数据库版本中的 PROCESS_CAPTURE 过程处理输入工作负载捕获此过程将返回与校准模式下的工作负载重播客户端相同的结果,可以按如下方式运行

$ wrc mode=calibrate replaydir=

CANCEL_REPLAY Procedure

此过程取消正在进行的工作负载重放。将自动通知所有外部重放客户端 (WRC) 停止发布捕获的工作负载并退出。

其语法格式如下:

DBMS_WORKLOAD_REPLAY.CANCEL_REPLAY (

error_msg IN VARCHAR2 DEFAULT NULL);

其参数解释如下:

ParameterDescriptionerror_msg可以传递一个可选的取消重放的原因,它被记录到 DBA_WORKLOAD_REPLAYS.ERROR_MESSAGE 中

注意事项:先决条件:已发出对 INITIALIZE_REPLAY 过程、PREPARE_REPLAY 过程或 START_REPLAY 过程的调用。

COMPARE_PERIOD_REPORT Procedure

此过程生成一份报告,将回放与其捕获或同一捕获的另一个回放进行比较。其语法格式如下:

DBMS_WORKLOAD_REPLAY.COMPARE_PERIOD_REPORT (

replay_id1 IN NUMBER,

replay_id2 IN NUMBER,

format IN VARCHAR2,

result OUT CLOB );

其参数解释如下:

ParameterDescriptionreplay_id1请求其报告的工作负载重播的第一个 IDreplay_id2请求其报告的工作负载重播的第二个 ID。如果这是 NULL,则比较与捕获一起完成format指定报告格式。有效值为 DBMS_WORKLOAD_CAPTURE.TYPE_HTML 和 DBMS_WORKLOAD_CAPTURE.TYPE_XMLresult报告的输出 (CLOB)

COMPARE_SQLSET_REPORT Function

此过程生成一份报告,将重放期间捕获的 sqlset 与工作负载捕获期间捕获的 sqlset 或同一捕获的另一重放期间捕获的 sqlset 进行比较。其语法格式如下:

DBMS_WORKLOAD_REPLAY.COMPARE_SQLSET_REPORT (

replay_id1 IN NUMBER,

replay_id2 IN NUMBER,

format IN VARCHAR2,

r_level IN VARCHAR2 DEFAULT 'ALL',

r_sections IN VARCHAR2 DEFAULT 'ALL',

result OUT CLOB )

RETURN VARCHAR2;

其参数解释如下:

ParameterDescriptionreplay_id1更改后工作负载重放的第一个 IDreplay_id2更改前工作负载重播的第二个 ID。如果这是 NULL,则比较与捕获一起完成format指定报告格式。有效值为 DBMS_WORKLOAD_CAPTURE.TYPE_HTML、DBMS_WORKLOAD_CAPTURE.TYPE_XML 和 DBMS_WORKLOAD_CAPTURE.TYPE_TEXTr_level参见DBMS_SQLPA包中REPORT_ANALYSIS_TASK函数中的level参数r_sections请参阅 DBMS_SQLPA 包中的 REPORT_ANALYSIS_TASK 函数中的部分参数result报告的输出 (CLOB)

CREATE_FILTER_SET Procedure

此过程在 replay_dir 为重播创建一个新的过滤器集。

它包括所有已由 ADD_FILTER 过程添加的重放过滤器。 在该过程完成并启动回放后,可以使用新创建的过滤器集通过调用 USE_FILTER_SET 过程来过滤 replay_dir 中的回放。其语法格式如下:

DBMS_WORKLOAD_REPLAY.CREATE_FILTER_SET(

replay_dir IN VARCHAR2,

filter_set IN VARCHAR2,

default_action IN VARCHAR2 DEFAULT 'INCLUDE');

其参数解释如下:

ParameterDescriptionreplay_dir待过滤回放的对象目录filter_set要创建的过滤器集的名称(在 USE_FILTER_SET 过程中使用)default_action可以是 INCLUDE 或 EXCLUDE。默认情况下,确定是否必须重播每个捕获的呼叫。还确定指定的工作负载过滤器是否必须被视为 INCLUSION 过滤器或 EXCLUSION 过滤器。)

如果它是 INCLUDE,则默认情况下会重放所有捕获的调用,但过滤器定义的工作负载部分除外。在这种情况下,使用 ADD_SCHEDULE_ORDERING 函数指定的所有过滤器都被视为 EXCLUSION 过滤器,并将确定不会重放的工作负载。

如果它是 EXCLUDE,则默认情况下不会重播捕获的对数据库的调用,除了由过滤器定义的那部分工作负载。在这种情况下,使用 ADD_SCHEDULE_ORDERING 函数指定的所有过滤器都被视为 INCLUSION 过滤器,并将确定重放的工作负载。

默认值:INCLUDE 并且指定的所有过滤器都假定为 EXCLUSION 过滤器

注意事项:当没有初始化、准备或正在进行重播时,必须调用此操作。

DELETE_FILTER Procedure

此过程删除命名过滤器。其语法格式如下:

DBMS_WORKLOAD_REPLAY.DELETE_FILTER(

fname IN VARCHAR2);

ParameterDescriptionfname(必填)必须删除的过滤器名称

注意事项:DELETE_FILTER 过程只影响之前的任何捕获都没有使用过的过滤器。因此,只有在任何捕获完成后使用 ADD_FILTER 过程添加了过滤器,才能删除过滤器。不能再使用此子程序删除在 START_CAPTURE 和 FINISH_CAPTURE 之前使用 ADD_FILTER 添加的过滤器。

DELETE_REPLAY_INFO Procedure

此过程删除 DBA_WORKLOAD_REPLAYS 中与给定工作负载重放 ID 对应的行。其语法格式如下:

DBMS_WORKLOAD_REPLAY.DELETE_REPLAY_INFO (

replay_id IN NUMBER);

其参数解释如下:

ParameterDescriptionreplay_id(必填)必须删除的工作负载重放的 ID。对应DBA_WORKLOAD_REPLAYS.ID

END_REPLAY_SCHEDULE Procedure

此过程结束了当前计划的创建。计划现已保存并与回放目录相关联,可用于回放。其语法格式如下:

DBMS_WORKLOAD_REPLAY.END_REPLAY_SCHEDULE;

注意事项:BEGIN_REPLAY_SCHEDULE 过程必须已经被调用。

EXPORT_AWR Procedure

此过程导出与规定的重播 ID 关联的 AWR 快照。其语法格式如下:

DBMS_WORKLOAD_REPLAY.EXPORT_AWR (

replay_id IN NUMBER);

其参数格式如下:

ParameterDescriptionreplay_id(必填)要导出AWR快照的replay ID

使用说明:

在每次回放结束时,会自动导出相应的 AWR 快照。因此,在工作负载重放完成后无需手动执行此操作,除非自动 EXPORT_AWR 调用失败只有在当前数据库中执行了相应的工作负载重放(意味着 DBA_WORKLOAD_REPLAYS 中的相应行不是通过调用 GET_REPLAY_INFO 函数创建的)并且与该重放时间段对应的 AWR 快照仍然可用时,此过程才会起作用

GENERATE_CAPTURE_SUBSET Procedure

此过程从现有工作负载捕获创建新捕获。其语法格式如下:

DBMS_WORKLOAD_REPLAY.GENERATE_CAPTURE_SUBSET (

input_capture_dir IN VARCHAR2,

output_capture_dir IN VARCHAR2,

new_capture_name IN VARCHAR2,

begin_time IN NUMBER,

begin_include_incomplete IN BOOLEAN DEFAULT TRUE,

end_time IN NUMBER,

end_include_incomplete IN BOOLEAN DEFAULT FALSE,

parallel_level IN NUMBER DEFAULT NULL);

其参数解释如下:

ParameterDescriptioninput_capture_dir(必填)指向现有工作负载捕获的目录对象的名称output_capture_dir(必填)指向新捕获的目录对象的名称new_capture_name(必填)新捕获名称begin_time时间范围的开始 - 从工作负载捕获开始的时间偏移量(以秒为单位)begin_include_incomplete包含由 begin_time 引起的不完整调用的列end_time时间范围结束 - 从工作负载捕获开始的时间偏移量(以秒为单位)。如果 end_time 为零或 end_time 小于或等于 begin_time,则时间范围无效。新捕获将使用输入捕获的整个持续时间end_include_incomplete包含由 end_time 引起的不完整调用的列parallel_level用于以并行方式处理输入捕获的 Oracle 进程数。NULL 默认值将根据 CPU 数量自动计算并行度级别,而值为 1 将强制执行串行执行。

GET_DIVERGING_STATEMENT Function

此函数检索有关发散调用的信息,包括语句文本、SQL ID 和绑定。如果记录的用户呼叫的重放有数据或错误发散,则它是发散呼叫。其语法格式如下:

DBMS_WORKLOAD_REPLAY.GET_DIVERGING_STATEMENT (

replay_id IN NUMBER,

stream_id IN NUMBER,

call_counter IN NUMBER)

RETURN CLOB;

其参数解释如下:

ParameterDescriptionreplay_id该呼叫发生分歧的重播 IDstream_id分流呼叫的流 IDcall_counter分流呼叫的呼叫计数器

注意事项:返回一个格式化为 XML 的 CLOB,其中包含:

SQL ID SQL Text绑定信息:位置、名称和值

此函数将静默调用 POPULATE_DIVERGENCE 过程以从捕获文件中读取信息。 因此,如果未填充分歧,则针对特定分歧调用首次调用此函数可能需要更长的时间,尤其是在非常大的捕获中。

GET_REPLAY_DIRECTORY Function

此函数返回由 SET_REPLAY_DIRECTORY 过程设置的当前重放目录。如果未设置重放目录,则返回 NULL。其语法格式如下:

DBMS_WORKLOAD_REPLAY.GET_REPLAY_DIRECTORY

RETURN VARCHAR2;

GET_REPLAY_INFO Function

此函数从规定的目录中检索有关工作负载捕获的信息和所有工作负载重放尝试的历史记录。其语法格式如下:

DBMS_WORKLOAD_REPLAY.GET_REPLAY_INFO (

replay_dir IN VARCHAR2,

load_details IN BOOLEAN DFAULT FALSE)

RETURN NUMBER;

其参数解释如下:

ParameterDescriptionreplay_dir(必填)工作负载重放目录对象的名称(区分大小写)load_details加载差异和跟踪的提交数据。 默认值为 FALSE

函数返回值:该过程返回 CAPTURE_ID,它可以与 DBA_WORKLOAD_CAPTURES.ID 和 DBA_WORKLOAD_REPLAYS.CAPTURE_ID 相关联以访问导入的信息。

注意事项:

该过程首先将一行导入 DBA_WORKLOAD_CAPTURES,其中将包含有关捕获的信息。然后它将从给定重播目录中检索到的每次重播尝试导入一行到 DBA_WORKLOAD_REPLAYS 中如果 DBA_WORKLOAD_CAPTURES 和 DBA_WORKLOAD_REPLAYS 这些视图已经包含描述给定目录中存在的捕获和重放历史记录的行,则该过程不会向这些视图插入新行

GET_REPLAY_TIMEOUT Procedure

此过程获取重播超时设置。其语法格式如下:

DBMS_WORKLOAD_REPLAY.GET_REPLAY_TIMEOUT (

enabled OUT BOOLEAN,

min_delay OUT NUMBER,

max_delay OUT NUMBER,

delay_factor OUT NUMBER);

其参数解释如下:

ParameterDescriptionenabled如果启用超时操作,则为 TRUE,否则为 FALSEmin_delay呼叫延迟的下限(以分钟为单位)。 仅当延迟等于或大于 min_delay 时才会激活重放操作max_delay呼叫延迟的上限(以分钟为单位)。 当延迟超过 max_delay 时,超时操作将抛出 ORA-15569delay_factor介于 min_delay 和 max_delay 之间的呼叫延迟因子。 当当前重播经过时间大于捕获经过时间和 delay_factor 的乘积时,超时操作将抛出 ORA-15569

注意事项:在回放期间可以随时调用此过程。

IMPORT_AWR Function

此过程从给定的回放中导入 AWR 快照。其语法格式如下:

DBMS_WORKLOAD_REPLAY.IMPORT_AWR (

replay_id IN NUMBER,

staging_schema IN VARCHAR2)

RETURN NUMBER;

其参数解释如下:

ParameterDescriptionreplay_id(必填)必须导入其 AWR 快照的回放 IDstaging_schema(强制)当前数据库中有效模式的名称,在将 AWR 快照从重播目录导入 SYS AWR 模式时可用作临时区域。SYS 模式不是有效输入。

返回值:返回用于导入 AWR 快照的新的随机生成的数据库 ID。在 DBA_WORKLOAD_REPLAYS 视图的 AWR_DBID 列中可以找到相同的值。

注意事项:

1. 如果这些 AWR 快照之前使用 EXPORT_AWR 过程从原始回放系统导出,则此过程将起作用。

2. 如果作为输入提供的 staging_schema 包含与任何 AWR 表同名的任何表,例如 WRM$_SNAPSHOT 或 WRH$_PARAMETER,IMPORT_AWR 将失败。在调用 IMPORT_AWR 之前删除 staging_schema 中的任何此类表。

INITIALIZE_CONSOLIDATED_REPLAY Procedure

此过程将数据库状态置于 INIT 中以进行多次捕获重播。

它使用已经由 SET_REPLAY_DIRECTORY 过程定义的 replay_dir,指向包含计划中涉及的所有捕获目录的目录。它从目录中读取有关调度 schedule_name 的数据,并将所需的连接数据加载到重放系统中。其语法格式如下:

DBMS_WORKLOAD_REPLAY.INITIALIZE_CONSOLIDATED_REPLAY (

replay_name IN VARCHAR2,

schedule_name IN VARCHAR2,

plsql_mode IN VARCHAR2 DEFAULT 'TOP_LEVEL');

其参数解释如下:

ParameterDescriptionreplay_name(必填)工作负载重放的名称。 可以为已处理的工作负载捕获的每个重播指定一个名称schedule_name要重播的计划的名称。 它必须是通过重放目录 replay_dir 的 BEGIN_REPLAY_SCHEDULE 过程创建的plsql_mode指定 PL/SQL 调用的重放选项:TOP_LEVEL — 仅重放顶级 PL/SQL 调用。EXTENDED — 从 PL/SQL 执行的 SQL 或顶级 SQL PL/SQL(如果 PL/SQL 中没有记录 SQL)将被重放。所有捕获都必须在“EXTENDED”PL/SQL 模式下完成

注意事项:先决条件:

已使用同一数据库版本中的 PROCESS_CAPTURE 过程处理工作负载捕获数据库状态已在逻辑上恢复到原始工作负载捕获开始时的状态已调用 SET_REPLAY_DIRECTORY 过程

INITIALIZE_REPLAY Procedure

此过程将数据库状态置于 INIT 以进行重放模式,并在准备重放之前将数据加载到所需的重放系统(通过执行 PAUSE_REPLAY 过程)。其语法格式如下:

DBMS_WORKLOAD_REPLAY.INITIALIZE_REPLAY (

replay_name IN VARCHAR2,

replay_dir IN VARCHAR2,

plsql_mode IN VARCHAR2 DEFAULT 'TOP_LEVEL',

rac_inst_list IN VARCHAR2 DEFAULT NULL);

其参数解释如下:

ParameterDescriptionreplay_name(必填)工作负载重放的名称。 可以为已处理的工作负载捕获的每个重播指定一个名称replay_dir指向包含已处理捕获数据的操作系统目录(区分大小写)的目录对象的名称plsql_mode指定 PL/SQL 调用的重放选项:TOP_LEVEL — 仅重放顶级 PL/SQL 调用。EXTENDED — 从 PL/SQL 执行的 SQL 或顶级 SQL PL/SQL(如果 PL/SQL 中没有记录 SQL)将被重放。所有捕获都必须在“EXTENDED”PL/SQL 模式下完成rac_inst_list指定将用于重放的 Oracle Real Application Clusters (Oracle RAC) 实例的列表。 该参数是一串用逗号分隔的实例编号。 例如:rac_inst_list=‘1,3,5’

注意事项:

一、先决条件:

已使用同一数据库版本中的 PROCESS_CAPTURE 过程处理工作负载捕获数据库状态已在逻辑上恢复到原始工作负载捕获开始时的状态

二、子程序通过调用 PAUSE_REPLAY 过程将数据加载到准备重放之前所需的重放系统。

例如,在捕获期间,用户可能会记录每个会话用于连接到服务器的连接字符串。 INITIALIZE_REPLAY 过程加载此数据并允许用户将记录的连接字符串重新映射到新的连接字符串或服务点。详细说明 PROCESS_CAPTURE 过程中描述的示例,用户可以调用以下内容:

DBMS_WORKLOAD_REPLAY.INITIALIZE_REPLAY('replay foo #1', 'rec_dir');

此命令将加载连接映射,默认情况下会将所有重播时间连接字符串设置为等于 NULL。NULL 重播时间连接字符串意味着工作负载重播客户端 (WRC) 将连接到由重播客户端的运行时环境设置确定的默认主机。用户可以使用 REMAP_CONNECTION 过程将特定连接字符串更改为新连接字符串(或新服务点)以进行重放。

三、对于加密捕获,INITIALIZE_REPLAY Procedure 依赖于 Oracle wallet。标识符是 oracle.rat.database_replay.encryption(区分大小写)。

IS_REPLAY_PAUSED Function

此函数报告重放当前是否已暂停。其语法格式如下:

DBMS_WORKLOAD_REPLAY.IS_REPLAY_PAUSED

RETURN BOOLEAN;

函数返回值:如果已成功调用 PAUSE_REPLAY 过程且尚未调用 RESUME_REPLAY 过程,则返回 TRUE。

注意事项:作为先决条件,必须已经发出对 START_REPLAY 过程的调用。

LOAD_LONG_SQLTEXT Procedure

此过程将捕获的超过 1000 个字符的 SQL 语句加载到 DBA_WORKLOAD_LONG_SQLTEXT 视图。其语法格式如下:

DBMS_WORKLOAD_REPLAY.LOAD_LONG_SQLTEXT (

capture_id IN NUMBER);

其参数解释如下:

ParameterDescriptioncapture_id工作负载捕获的内部密钥

Note: This procedure is available starting with Oracle Database Release 18c.

DBA_WORKLOAD_LONG_SQLTEXT

PAUSE_REPLAY Procedure

此过程暂停正在进行的工作负载重放。来自重放客户端的所有后续用户调用将被暂停,直到发出对 RESUME_REPLAY 过程的调用或重放被取消。

其语法格式如下:

DBMS_WORKLOAD_REPLAY.PAUSE_REPLAY;

注意事项:

先决条件:必须已经发出对 START_REPLAY 过程的调用允许调用此过程时已经在进行中的用户调用运行完成。 只有发出的后续用户调用才会暂停

POPULATE_DIVERGENCE Procedure

此过程预先计算给定调用、流或整个重播的发散信息,以便 GET_DIVERGING_STATEMENT 函数尽快返回预先计算的调用。其语法格式如下:

DBMS_WORKLOAD_REPLAY.POPULATE_DIVERGENCE (

replay_id IN NUMBER,

stream_id IN NUMBER DEFAULT NULL,

call_counter IN NUMBER DEFAULT NULL);

其参数解释如下:

ParameterDescriptionreplay_id回放IDstream_id分流呼叫的流 ID。如果提供 NULL,则会为给定重播中的所有发散调用预先计算发散信息call_counter分流呼叫的呼叫计数器。如果提供 NULL,则会为给定流中的所有发散调用预先计算发散信息

PREPARE_CONSOLIDATED_REPLAY Procedure

类似于 PREPARE_REPLAY 过程,此过程将数据库置于特殊的“准备”模式以进行多次捕获重放。不同之处在于该子程序应该仅用于合并重放。其语法格式如下:

DBMS_WORKLOAD_REPLAY.PREPARE_CONSOLIDATED_REPLAY (

synchronization IN BOOLEAN,

connect_time_scale IN NUMBER DEFAULT 100,

think_time_scale IN NUMBER DEFAULT 100,

think_time_auto_correct IN BOOLEAN DEFAULT TRUE,

capture_sts IN BOOLEAN DEFAULT FALSE,

sts_cap_interval IN NUMBER DEFAULT 300);

DBMS_WORKLOAD_REPLAY.PREPARE_CONSOLIDATED_REPLAY (

synchronization IN VARCHAR2 DEFAULT 'OBJECT_ID',,

connect_time_scale IN NUMBER DEFAULT 100,

think_time_scale IN NUMBER DEFAULT 100,

think_time_auto_correct IN BOOLEAN DEFAULT TRUE,

capture_sts IN BOOLEAN DEFAULT FALSE,

sts_cap_interval IN NUMBER DEFAULT 300);

其参数解释如下:

ParameterDescriptionsynchronization设置重放的同步模式,下面详细解释connect_time_scale缩放从工作负载捕获开始到会话连接给定值之间经过的时间。 输入被解释为 % 值。可能用于在工作负载重放期间增加或减少并发用户数。 默认值为 100。think_time_scale输入被解释为 % 值。可能用于在工作负载重放期间增加或减少并发用户数。 默认值为 100。think_time_auto_correct当用户调用在回放期间比在原始捕获期间需要更长的时间才能完成时,自动会适当地更正调用之间的思考时间。 DEFAULT 为 TRUE,如果回放比捕获慢,则减少思考时间。capture_sts如果此参数为 TRUE,则还会在工作负载重放的同时启动 SQL 调优集捕获。 生成的 SQL 调整集可以使用 EXPORT_AWR 过程连同自动工作负载存储库 (AWR) 数据一起导出。 目前,Oracle RAC 环境不支持并行 SQL 调整集 (STS) 捕获。 因此,此参数在该上下文中无效。 调用用户必须具有适当的权限(“ADMINISTER SQL TUNING SET”)。默认值为 FALSE。sts_cap_interval指定从游标缓存中捕获 SQL 集的捕获间隔,以秒为单位。 默认值为 300。

synchronization:

‘TIME’——同步将基于捕获期间动作发生的时间(基于时钟的时间)‘SCN’——同步将基于捕获时间提交;重播期间将保留提交顺序。这是默认模式‘OBJECT_ID’——每个重放的动作只有在相关提交完成执行后才会执行。相关提交是那些在捕获的工作负载中的给定操作之前发出的提交,并且至少修改了给定操作引用的数据库对象之一(隐式或显式)。这种同步模式确保任何重放操作将看到与捕获期间操作看到的相同数据,但允许不接触相同对象/表的操作具有更高的并发性。此值已弃用

为了兼容性,此过程的重载版本对此参数使用 BOOLEAN:

TRUE 表示“SCN” FALSE 表示“时间”

注意事项:合并重播在一次重播中重播多个捕获。每个捕获记录不同的系统更改号 (SCN) 值。因此,合并重放不支持基于 SCN 的同步。Consolidated replays 仅支持非同步模式和基于 Object-ID 的同步,目前不支持基于 SCN 的同步。

PREPARE_REPLAY Procedure

此过程将数据库状态置于 PREPARE FOR REPLAY 模式。其语法格式如下:

DBMS_WORKLOAD_REPLAY.PREPARE_REPLAY (

synchronization IN BOOLEAN DEFAULT TRUE,

connect_time_scale IN NUMBER DEFAULT 100,

think_time_scale IN NUMBER DEFAULT 100,

think_time_auto_correct IN BOOLEAN DEFAULT TRUE,

scale_up_multiplier IN NUMBER DEFAULT 1,

capture_sts IN BOOLEAN DEFAULT FALSE,

sts_cap_interval IN NUMBER DEFAULT 300,

rac_mode IN NUMBER DEFAULT GLOBAL_SYNC,

query_only IN BOOLEAN DEFAULT FALSE);

DBMS_WORKLOAD_REPLAY.PREPARE_REPLAY (

synchronization IN VARCHAR2 DEFAULT 'OBJECT_ID',

connect_time_scale IN NUMBER DEFAULT 100,

think_time_scale IN NUMBER DEFAULT 100,

think_time_auto_correct IN BOOLEAN DEFAULT TRUE,

scale_up_multiplier IN NUMBER DEFAULT 1,

capture_sts IN BOOLEAN DEFAULT FALSE,

sts_cap_interval IN NUMBER DEFAULT 300),

rac_mode IN NUMBER DEFAULT GLOBAL_SYNC,

query_only IN BOOLEAN DEFAULT FALSE);

其参数解释如下:

ParameterDescriptionsynchronization同上connect_time_scale同上think_time_scale同上think_time_auto_correct同上scale_up_multiplier定义查询工作负载在重播期间扩大的次数。 每个捕获的会话同时重放的次数与 scale_up_multiplier 的值一样多。 但是,每组相同的重放会话中只有一个会话同时执行查询和更新。其余会话仅执行查询。capture_sts同上sts_cap_interval同上rac_mode指定 Oracle Real Application Cluster (Oracle RAC) 环境中的重放选项。此参数接受以下值:query_only仅重播工作负载捕获的只读查询。 默认值为 FALSE

rac_mode:

GLOBAL_SYNC — 所有 Oracle RAC 实例之间的同步。这是默认值PER_INSTANCE_CLIENT — 同步是全局的,每个 WRC 客户端处理仅发送到一个实例的部分工作负载PER_INSTANCE_SYNC — 同步是本地的(仅在每个实例内),每个 WRC 客户端处理仅发送到一个实例的部分工作负载

注意事项:

一、先决条件:

数据库已使用 INITIALIZE_REPLAY 过程进行重放初始化任何需要重新映射的捕获时间连接字符串都已使用 REMAP_CONNECTION 过程完成

二、一旦执行了 PREPARE_REPLAY 过程,就可以启动一个或多个外部重放客户端 (WRC)

三、关于 scale_up_multiplier:

每组相同会话的一个重播会话(基本会话)将像往常一样重播来自捕获的每个呼叫其余会话(扩展会话)将仅重放只读的调用。 因此,会跳过修改数据库的 DDL、DML 和 PL/SQL 调用。SELECT FOR UPDATE 语句也被跳过来自放大的只读调用会适当同步,并遵守由 think_time_scale、connect_time_scale 和 think_time_auto_correct 定义的时序。此外,进行查询以等待适当的提交没有为放大会话生成重放数据或错误差异记录重放相同捕获文件的所有基本或扩展会话将从相同的工作负载重放客户端连接

示例 connect_time_scale 参数的应用:

-- 如果在原始工作负载捕获期间观察到以下情况:

12:00 : Capture was started

12:10 : First session connect (10m after)

12:30 : Second session connect (30m after)

12:42 : Third session connect (42m after)

-- 如果 connect_time_scale 为 50,则会话连接将按如下方式发生:

12:00 : Replay was started with 50% connect time scale

12:05 : First session connect ( 5m after)

12:15 : Second session connect (15m after)

12:21 : Third session connect (21m after)

-- 如果 connect_time_scale 为 200,则会话连接将按如下方式发生:

12:00 : Replay was started with 200% connect time scale

12:20 : First session connect (20m after)

13:00 : Second session connect (60m after)

13:24 : Third session connect (84m after)

示例 think_time_scale 参数的应用:

-- 如果在原始工作负载捕获期间观察到以下情况:

12:00 : User SCOTT connects

12:10 : First user call issued (10m after completion of prevcall)

12:14 : First user call completes in 4mins

12:30 : Second user call issued (16m after completion of prevcall)

12:40 : Second user call completes in 10m

12:42 : Third user call issued ( 2m after completion of prevcall)

12:50 : Third user call completes in 8m

-- 如果在工作负载重放期间 think_time_scale 为 50,则用户调用将如下所示:

12:00 : User SCOTT connects

12:05 : First user call issued 5 mins (50% of 10m) after the completion of previous call

12:10 : First user call completes in 5m (takes a minute longer)

12:18 : Second user call issued 8 mins (50% of 16m) after the completion of prev call

12:25 : Second user call completes in 7m (takes 3 minutes less)

12:26 : Third user call issued 1 min (50% of 2m) after the completion of prev call

12:35 : Third user call completes in 9m (takes a minute longer)

示例 think_time_auto_correct 参数的应用:

-- 如果在原始工作负载捕获期间观察到以下情况:

12:00 : User SCOTT connects

12:10 : First user call issued (10m after completion of prevcall)

12:14 : First user call completes in 4m

12:30 : Second user call issued (16m after completion of prevcall)

12:40 : Second user call completes in 10m

12:42 : Third user call issued ( 2m after completion of prevcall)

12:50 : Third user call completes in 8m

-- 如果 think_time_scale 为 100 且 think_time_auto_correct 在工作负载重放期间为 TRUE,则用户调用将如下所示:

12:00 : User SCOTT connects

12:10 : First user call issued 10 mins after the completion of prev call

12:15 : First user call completes in 5m (takes 1 minute longer)

12:30 : Second user call issued 15 mins (16m minus the extra time of 1m the prev call took) after the completion of prev call

12:44 : Second user call completes in 14m (takes 4 minutes longer)

12:44 : Third user call issued immediately (2m minus the extra time of 4m the prev call took) after the completion of prev call

12:52 : Third user call completes in 8m

PROCESS_CAPTURE Procedure

此过程就地处理在 capture_dir 中找到的工作负载捕获。其语法格式如下:

DBMS_WORKLOAD_REPLAY.PROCESS_CAPTURE (

capture_dir IN VARCHAR2,

parallel_level IN NUMBER DEFAULT NULL,

synchronization IN VARCHAR2 DEFAULT 'SCN',

plsql_mode IN VARCHAR2 DEFAULT 'TOP_LEVEL');

其参数解释如下:

ParameterDescriptioncapture_dir(必填)工作负载捕获目录对象的名称(区分大小写)。目录对象必须指向具有适当权限的有效操作系统目录。新文件添加到此目录。parallel_level用于并行处理捕获的 Oracle 进程数。 NULL 默认值将自动计算并行度级别,而值为 1 将强制执行串行执行。synchronization确定用户将能够用于重播的同步模式 详细如下plsql_mode指定 PL/SQL 的处理模式 详细如下

synchronization:

‘TIME’——选择‘TIME’时,回放只能使用‘TIME’同步方式。当“TIME”同步模式用于回放时,同步将基于捕获期间动作发生的时间(基于时钟的时间)“ SCN” - 选择“ SCN”时,重播可以使用“时间”或“ SCN”同步模式。 这是默认值。 当“SCN”同步模式用于回放时,同步将基于捕获时间提交; 重播期间将保留提交顺序。 这是默认模式‘OBJECT_ID’——选择‘OBJECT_ID’时,回放可以使用‘TIME’、‘SCN’或‘OBJECT_ID’同步模式。当’OBJECT_ID’同步模式用于重放时,每个重放的动作只有在相关提交完成执行后才会执行。相关提交是那些在捕获的工作负载中的给定操作之前发出的提交,并且至少修改了给定操作引用的数据库对象之一(隐式或显式)。这种同步模式确保任何重放操作将看到与捕获期间操作看到的相同数据,但允许不接触相同对象/表的操作具有更高的并发性。此同步模式已弃用

plsql_mode:

‘TOP_LEVEL’ — 仅为顶级 PL/SQL 调用生成元数据; “TOP_LEVEL”将是重播的唯一选项‘EXTENDED’——为顶级 PL/SQL 调用和从 PL/SQL 调用的 SQL 生成元数据。 在捕获根目录下创建一个新目录 ppe_X.X.X.X(其中 X 代表当前 Oracle 版本)。 必须使用相同的 plsql_mode 参数值完成捕获。 重播可以使用“TOP_LEVEL”或“EXTENDED”

注意事项:

该子程序分析在 capture_dir 中找到的工作负载捕获,并创建重放给定工作负载捕获所需的新工作负载重放特定元数据文件。 它只会创建新文件,不会修改在工作负载捕获期间最初创建的任何文件。因此,该过程可以在同一个捕获目录上运行多次,例如当该过程遇到意外错误或被用户取消时。此过程成功运行后,capture_dir 可用作 INITIALIZE_REPLAY 过程的输入,以便重放 capture_dir 中存在的已捕获工作负载。在可以在特定数据库版本中重放工作负载捕获之前,必须在同一数据库版本中使用 PROCESS_CAPTURE 处理捕获。 创建后,已处理的工作负载捕获可用于在同一数据库版本中多次重放捕获的工作负载。 例如,假设在 Oracle 数据库版本 10.2.0.5 中的 rec_dir 中捕获了工作负载“foo”。 为了重放版本 11.1.0.1 中的工作负载“foo”,必须在版本 11.1.0.1 中处理工作负载。 必须在 11.1.0.1 数据库中执行以下过程才能处理捕获目录 rec_dir:

DBMS_WORKLOAD_REPLAY.PROCESS_CAPTURE('rec_dir');

-- 现在,rec_dir 包含一个有效的 11.1.0.1 处理的工作负载捕获,可用于根据需要多次重放 11.1.0.1 数据库中的工作负载“foo”

对于加密捕获,PROCESS_CAPTURE 过程依赖于 Oracle wallet。 标识符是 oracle.rat.database_replay.encryption(区分大小写)。

REMAP_CONNECTION Procedure

此过程将捕获的连接重新映射到新连接,以便用户会话可以在工作负载重放期间以所需方式连接到数据库。其语法格式如下:

DBMS_WORKLOAD_REPLAY.REMAP_CONNECTION (

connection_id IN NUMBER,

replay_connection IN VARCHAR2);

DBMS_WORKLOAD_REPLAY.REMAP_CONNECTION (

capture_number IN VARCHAR2,

connection_id IN NUMBER,

replay_connection IN VARCHAR2);

其参数解释如下:

ParameterDescriptioncapture_number指向当前重播计划的捕获connection_id要重新映射的连接的 ID。对应于 DBA_WORKLOAD_CONNECTION_MAP.CONN_ID。replay_connection重播期间要使用的新连接字符串

注意事项:

在调用 REMAP_CONNECTION 之前,所有重播连接字符串默认设置为 NULL。 如果 replay_connection 为 NULL,则重播会话将根据重播客户端的运行时环境进行连接。 例如,如果定义了环境变量 TNS_ADMIN 并且用户没有调用 REMAP_CONNECTION 过程,那么 wrc 可执行文件将连接到 TNS_ADMIN 指向的 tnsnames.ora 文件中指定的服务器有效的 replay_connection 必须指定连接标识符或服务点。 有关指定连接标识符(例如网络服务名称、数据库服务名称和网络服务别名)的方法以及可用于将连接标识符解析为连接描述符的命名方法,请参阅 Oracle 数据库网络服务参考如果没有行与给定的 connection_id 匹配,则返回错误使用 DBA_WORKLOAD_CONNECTION_MAP 视图查看后续工作负载重放使用的所有连接字符串,并检查用于先前工作负载重放的连接字符串重新映射

REMOVE_CAPTURE Procedure

此过程从当前计划中删除给定的捕获。其语法格式如下:

DBMS_WORKLOAD_REPLAY.REMOVE_CAPTURE (

schedule_capture_number IN NUMBER);

其参数解释如下:

ParameterDescriptionschedule_capture_number在此计划中标识此捕获的唯一 ID

REMOVE_SCHEDULE_ORDERING Procedure

此过程从当前重放计划中删除现有计划顺序。

schedule_capture_id 和 waitfor_capture_id 一起构成了之前由 ADD_SCHEDULE_ORDERING 函数 (schedule_capture_id, waitfor_capture_id) 添加的调度顺序。 该命令是除非waiting_for_capture_id 指示的捕获重放完成,否则schedule_capture_id 指示的捕获重放不会开始。

其语法格式如下:

DBMS_WORKLOAD_REPLAY.REMOVE_SCHEDULE_ORDERING (

schedule_capture_id IN NUMBER,

waitfor_capture_id IN NUMBER);

其参数解释如下:

ParameterDescriptionschedule_capture_id指向已添加到当前重播计划的捕获(请参阅过程描述)waitfor_capture_id指向已添加到当前重播计划的捕获

注意事项:先决条件:

必须调用 BEGIN_REPLAY_SCHEDULE 过程应该已经使用 ADD_SCHEDULE_ORDERING 函数添加了重播计划顺序

REPORT Function

此函数生成有关规定的工作负载重播的报告。其语法格式如下:

DBMS_WORKLOAD_REPLAY.REPORT (

replay_id IN NUMBER,

format IN VARCHAR2)

RETURN CLOB;

其参数解释如下:

ParameterDescriptionreplay_id(必填)指定请求其报告的工作负载重播的 IDformat(必填)指定报告格式。 有效值如下

HTML - 生成报告的 HTML 版本XML - 生成报告的 XML 版本TEXT - 生成报告的文本版本

函数返回值:以所需格式返回的报告正文作为 CLOB。

RESUME_REPLAY Procedure

此过程恢复暂停的工作负载重播。其语法格式如下:

DBMS_WORKLOAD_REPLAY.RESUME_REPLAY;

注意事项:先决条件:必须已经发出对 PAUSE_REPLAY 过程的调用。

REUSE_REPLAY_FILTER_SET Procedure

此过程重复使用指定过滤器集中的过滤器,就好像每个过滤器都是使用 ADD_SCHEDULE_ORDERING 函数添加的一样。

每次调用都会添加一个过滤器集,它是针对各种属性的单个过滤器的集合。此外,可以添加新的过滤器规则,并可以在调用 CREATE_FILTER_SET 过程以创建新的过滤器集之前删除现有的过滤器。

其语法格式如下:

DBMS_WORKLOAD_REPLAY.REUSE_REPLAY_FILTER_SET(

replay_dir IN VARCHAR2,

filter_set IN VARCHAR2);

其参数解释如下:

ParameterDescriptionreplay_dir与其关联的现有过滤器集的捕获 IDfilter_set要重用的过滤器集的名称

SET_ADVANCED_PARAMETER Procedure

除了与 PREPARE_REPLAY 过程一起使用的参数之外,此过程还为重播设置了一个高级参数。

高级参数控制更专业的回放方面。回放完成后,高级参数将重置为其默认值。其语法格式如下:

DBMS_WORKLOAD_REPLAY.SET_ADVANCED_PARAMETER(

pname IN VARCHAR2,

pvalue IN VARCHAR2);

DBMS_WORKLOAD_REPLAY.SET_ADVANCED_PARAMETER(

pname IN VARCHAR2,

pvalue IN NUMBER);

DBMS_WORKLOAD_REPLAY.SET_ADVANCED_PARAMETER(

pname IN VARCHAR2,

pvalue IN BOOLEAN);

其参数解释如下:

ParameterDescriptionpname参数名称(不区分大小写)pvalue参数值

当前可以使用的参数和值是:

'DO_NO_WAIT_COMMITS': (default: FALSE)

该参数控制replay session发出的COMMIT是否为NOWAIT。此参数的默认值为 FALSE。 在这种情况下,所有 COMMIT 都以它们被捕获的模式发出(等待、不等待、批处理、非批处理)。 如果该参数设置为 TRUE,则所有 COMMIT 都以无等待模式发出。 这在重播由于大量并发 COMMIT 而变得明显变慢的情况下很有用。 将参数设置为 TRUE 将显着减少重放期间对捕获的“日志文件同步”事件的等待。

SET_REPLAY_DIRECTORY Procedure

此过程将包含多个工作负载捕获的目录设置为当前重放目录。其语法格式如下:

DBMS_WORKLOAD_REPLAY.SET_REPLAY_DIRECTORY (

replay_dir IN VARCHAR2);

其参数解释如下:

ParameterDescriptionreplay_dir包含工作负载整合捕获的操作系统目录的名称

SET_REPLAY_TIMEOUT Procedure

此过程设置重播超时设置。 目的是中止可能使重播变慢甚至导致重播挂起的用户调用。其语法格式如下:

DBMS_WORKLOAD_REPLAY.SET_REPLAY_TIMEOUT (

enabled OUT BOOLEAN DEFAULT TRUE,

min_delay OUT NUMBER DEFAULT 10,

max_delay OUT NUMBER DEFAULT 120,

delay_factor OUT NUMBER DEFAULT 8);

其参数解释如下:

ParameterDescriptionenabledTRUE 启用超时操作,FALSE 禁用min_delay呼叫延迟的下限(以分钟为单位)。 仅当延迟等于或大于 min_delay 时才会激活重放操作。 默认值 = 10max_delay呼叫延迟的上限(以分钟为单位)。 当延迟超过 max_delay 时,超时操作将抛出 ORA-15569。 默认值 = 120delay_factor介于 min_delay 和 max_delay 之间的呼叫延迟因子。 当当前重播经过时间大于捕获经过时间和 delay_factor 的乘积时,超时操作将抛出 ORA-15569。 默认值 = 8

注意事项:

在回放期间可以随时调用此过程。如果重放经过时间长于调用经过时间,则调用延迟定义为重放和捕获之间的差异。启用重播超时操作后,如果延迟超过重播操作指定的条件,用户调用将退出并返回 ORA-15569。 调用及其错误被报告为错误分歧。

重播超时操作如下:

如果未启用,则超时操作无效如果以分钟为单位的呼叫延迟小于参数 min_delay 指定的下限,则超时操作不可操作如果以分钟为单位的延迟超过参数 max_delay 指定的上限,超时操作将中止用户调用并抛出 ORA-15569对于介于下限和上限之间的延迟,仅当当前重播经过时间大于捕获经过时间和参数 delay_factor 的乘积时,用户调用才会中止并返回 ORA-15569

SET_SQL_MAPPING Procedure

此过程指定在数据库重放操作期间要跳过或替换的 SQL 语句。其语法格式如下:

PROCEDURE SET_SQL_MAPPING (

schedule_cap_id IN NUMBER,

sql_id IN VARCHAR2,

operation IN VARCHAR2,

replacement_sql_text IN VARCHAR2 DEFAULT NULL);

PROCEDURE SET_SQL_MAPPING (

sql_id IN VARCHAR2,

operation IN VARCHAR2,

replacement_sql_text IN VARCHAR2 DEFAULT NULL);

其参数解释如下:

ParameterDescriptionschedule_cap_id计划中捕获的 IDsql_id捕获时 SQL 语句的 SQL 标识符operation指示在数据库重放期间对指定语句执行以下操作之一:

‘SKIP’——跳过由 sql_id 标识的 SQL 语句‘REPLACE’——用 replacement_sql_text 参数中的 SQL 语句替换由 sql_id 标识的 SQL 语句

注意事项:

replacement_sql_text:当为操作参数指定‘SKIP’时,该参数为NULL。当为操作参数指定“REPLACE”时,此参数的值是要使用的 SQL 语句。schedule_cap_id 用于合并重播。

SET_USER_MAPPING Procedure

此过程设置一个新的模式或用户名,以在重放期间使用而不是捕获的用户。其语法格式如下:

DBMS_WORKLOAD_REPLAY.SET_USER_MAPPING (

schedule_cap_id IN NUMBER,

capture_user IN VARCHAR2,

replay_user IN VARCHAR2);

DBMS_WORKLOAD_REPLAY.SET_USER_MAPPING (

capture_user IN VARCHAR2,

replay_user IN VARCHAR2);

其参数解释如下:

ParameterDescriptionschedule_cap_id计划中捕获的 IDcapture_user工作负载捕获期间的用户名replay_user在回放期间将捕获的用户重新映射到的用户名

注意事项:

NULL 的 schedule_cap_id 用于常规非合并重播重播必须初始化但不准备才能使用此子程序如果 replay_user 设置为 NULL,则映射被禁用同一个 capture_user 多次调用后,最后一次调用总是生效要列出将在后续重放期间生效的所有映射,请执行以下操作:

SELECT * FROM DBA_WORKLOAD_ACTIVE_USER_MAP

没有 schedule_cap_id 的重载版本通过传入 NULL 调用带有 schedule_cap_id 参数的版本映射存储在通过视图 DBA_WORKLOAD_USER_MAP 公开的表中。 删除旧映射执行

DELETE * FROM DBA_WORKLOAD_USER_MAP

START_CONSOLIDATED_REPLAY Procedure

此过程启动多重捕获捕获的重放。 它应该仅用于合并重播。其语法格式如下:

DBMS_WORKLOAD_REPLAY.START_CONSOLIDATED_REPLAY;

注意事项:先决条件:

已发出对 PREPARE_REPLAY 过程的调用。足够数量的外部重放客户端 (WRC) 可以忠实地重放已经开始捕获的工作负载。可以使用 V$WORKLOAD_REPLAY_CLIENTS 监视此类外部重放客户端的状态

START_REPLAY Procedure

此过程启动工作负载重放。

当前连接到重放数据库的所有外部重放客户端 (WRC) 将自动收到通知,并且这些重放客户端 (WRC) 将开始发布捕获的工作负载。 它应该只用于合并重播。其语法格式如下:

DBMS_WORKLOAD_REPLAY.START_REPLAY;

注意事项:

一、先决条件:

已发出对 PREPARE_REPLAY 过程的调用足够数量的外部重放客户端 (WRC) 可以忠实地重放已经开始捕获的工作负载。 可以使用 V$WORKLOAD_REPLAY_CLIENTS 监视此类外部重放客户端的状态

二、使用 WRC 的 CALIBRATE 模式来确定忠实重放捕获的工作负载可能需要的重放客户端的数量。 例如:

$ wrc mode=calibrate replaydir=.

USE_FILTER_SET Procedure

此过程将过滤器集应用于当前重放计划中的捕获。

过滤器集必须是通过调用 CREATE_FILTER_SET 过程创建的。其语法格式如下:

DBMS_WORKLOAD_REPLAY.USE_FILTER_SET(

capture_number IN VARCHAR2,

filter_set IN VARCHAR2);

DBMS_WORKLOAD_REPLAY.USE_FILTER_SET(

filter_set IN VARCHAR2);

其参数解释如下:

ParameterDescriptioncapture_number指向当前重播计划的捕获filter_set过滤器集的名称

注意事项:过滤器集必须是通过调用 CREATE_FILTER_SET 过程创建的。

精彩内容

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: