Oracle Replay测试(全)

来源:这里教程网 时间:2026-03-03 18:01:46 作者:

执行流程

Replay 流程

Database Replay 实施的流程是workload_capture->workload preprocess->replay client prepare->replay->generate replay report,对于同一个capture可以进行多次replay  

执行数据库

生产数据库:用于workload_capture,即负载捕获

迁移数据库:用于workload_ preprocess和replay,即负载预处理和负载重放

Replay client :用于发起workload的客户端进程

生产数据库

创建capture目录

需要确保目录下无任何文件

mkdir -p /home/oracle/capdir

create or replace directory capdir as '/home/oracle/capdir';

查询是否有原来的capture任务

SQL> SELECT id, name FROM dba_workload_captures;

根据id 用以下进行删除:

SQL> exec dbms_workload_capture.delete_capture_info(2);

 

创建过滤器

过滤器可以通过START_CAPTURE 过程的DEFAULT_ACTION 参数,参数值 INCLUDE 排除(默认) 或者 EXCLUDE 包含 过滤器。

创建 HEAGLEDB 用户执行信息的过滤器:

EXEC DBMS_WORKLOAD_CAPTURE.ADD_FILTER ('filter_user1','USER','HEAGLEDB');

 

过滤器其他方式:

capture 所有的信息,可以跳过add_filter设置

查询过滤器

select * from dba_workload_filters;

 

运行Capture

10g 数据库需要开启PRE_11G_ENABLE_CAPTURE

alter system set PRE_11G_ENABLE_CAPTURE=true;

函数:

DBMS_WORKLOAD_CAPTURE.START_CAPTURE (

   name              IN  VARCHAR2,

   dir               IN  VARCHAR2,

   duration          IN  NUMBER   DEFAULT NULL,

   default_action    IN  VARCHAR2 DEFAULT 'INCLUDE',

   auto_unrestrict   IN  BOOLEAN  DEFAULT TRUE,

   capture_sts       IN  BOOLEAN  DEFAULT FALSE,

   sts_cap_interval  IN  NUMBER   DEFAULT 300);

 

常用全库捕获:

BEGIN

    DBMS_WORKLOAD_CAPTURE.start_capture (name     => 'pri_capture_1',

                                         dir      =>'CAPDIR',

                                         duration => NULL);

 END;

/

 

 

如果上面使用过滤器,可以使用以下语法。 注意:exclude 意思是包含上面过滤器中的任务

BEGIN

DBMS_WORKLOAD_CAPTURE.START_CAPTURE (

   name              => 'pri_capture_1',

   dir               => 'CAPDIR',

   default_action    => ' EXCLUDE ',

   duration          => NULL);

END;

/

 

Sql 执行

生产数据库运行阶段。

停止 capture  

BEGIN

DBMS_WORKLOAD_CAPTURE.finish_capture;

END;

/

 

获取capture ID

SELECT DBMS_WORKLOAD_CAPTURE.get_capture_info('CAPDIR')   FROM dual;

select id, name, status,dir_path from dba_workload_captures;    

 

 

查询捕获信息

可以在捕获路径下获取已生成的报告wcr_cr.html、wcr_cr.text。

set pagesize 0 long 30000000 longchunksize 2000 line   150

spool pri_capture.html

select dbms_workload_capture.report ( 11 ,'HTML')   from dual;

spool off

注:11 为的capture   id。

 

 

导出awr报告

exec dbms_workload_capture.export_awr (capture_id => 11);

 

注:11 为的capture id。

 

查询dba_workload_captures

select id,AWR_BEGIN_SNAP,AWR_END_SNAP from dba_workload_captures;

 

迁移数据库

创建directory

cap and capfiles 上传到目标服务器

 

创建directory

mkdir -p /oracle/replay

CREATE OR REPLACE DIRECTORY db_replay_capture_dir AS '/oracle/replay';

节点1

scp -r /oracle/replay/* oracle@168.68.19.138:/oracle/replay/

 

加载capture日志

使用PROCESS_CAPTURE过程来准备capture logs。

exec DBMS_WORKLOAD_REPLAY.PROCESS_CAPTURE('DB_REPLAY_CAPTURE_DIR');

执行完毕后,会生成wcr_process.wmd,wcr_login.pp, wcr_seq_data.extb, wcr_scn_order.extb , wcr_conn_data.extb等文件。

 

初始化replay

使用Initializing replay 装载metadata到tables里:

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

将数据改成PREPARE REPLAY 模式:

exec DBMS_WORKLOAD_REPLAY.PREPARE_REPLAY();

默认synchronization参数TRUE。

 

检查replay的状态:

set lin 160

col name for a20

col status for a20

select name,status from  dba_workload_replays;

启动重放客户端 

评估客户端需求

wrc MODE=calibrate REPLAYDIR=/oracle/replay

前台执行replay:

wrc system/mhqx1190 mode=replay replaydir=/oracle/replay

可以后台执行 (可选)

nohup wrc system/mhqx1190 mode=replay replaydir=/oracle/replay &

 

执行replay

执行时间跟生产库获取的时间有关

exec   DBMS_WORKLOAD_REPLAY.START_REPLAY;

select id,   name, status from dba_workload_replays;

初始状态:PREPARE

执行状态:IN PROGRESS

完成状态:COMPLETED

停止replay

如果希望在完成replay 前stop replay过程,调用CANCEL_REPLAY 过程即可。

exec DBMS_WORKLOAD_REPLAY.CANCEL_REPLAY ();

 

获取replay报告

select id, name, status from dba_workload_replays;

 

set pagesize 0 long 30000000 longchunksize 2000 line 150

spool /home/oracle/replay_report.html

select dbms_workload_replay.report(replay_id => 46 ,format => 'HTML') from dual;

spool off

注:46为上面的replay id。

 

导入capture awr数据

导入Capture AWR data 到测试数据库,比较replay AWR data

set serveroutput on

declare capid number := 0; BEGIN capid := DBMS_WORKLOAD_CAPTURE.GET_CAPTURE_INFO(dir =>' DB_REPLAY_CAPTURE_DIR '); dbms_output.put_line('capid is ' || capid); END; /

输出: 1

select dbms_workload_capture.import_awr(capture_id => 1, staging_schema => 'SYSTEM') from dual;  

输出:1959014922

SQL> select snap_id,dbid from dba_hist_snapshot where dbid= 1959014922 ;

   SNAP_ID       DBID

---------- ----------

      3212 1959014922

      3213 1959014922

 

获取capture信息

SQL> select id, awr_begin_snap, awr_end_snap from dba_workload_captures;

1           3212         3213

获取replay信息

SQL> select id, awr_begin_snap, awr_end_snap from dba_workload_replays;

          3           6414         6415

   

比较capture和replay

set serveroutput on

spool /home/ora19c/compare_period_report.html

declare

  v_rlt        clob;

  v_replay_id1 number   := 46;

  v_replay_id2 number   := null;

  v_snum       number := 1;

  v_length     number;

  v_char       varchar2(32767);

begin

    dbms_workload_replay.compare_period_report(replay_id1 =>   v_replay_id1,

                                               replay_id2 => v_replay_id2,

                                               format     => 'HTML',

                                             result       => v_rlt);

  v_length :=   dbms_lob.GETLENGTH(v_rlt);

  while (v_snum <   v_length) loop

    v_char :=   dbms_lob.substr(lob_loc => v_rlt,

                                amount  => 32767,

                                offset  => v_snum);

    v_snum := v_snum +   32767;

      dbms_output.put_line(v_char);

  end loop;

end;

/

 

awr 性能比较报告

生成awr比较报告

set pagesize 0 long 30000000 longchunksize 2000 heading off line 1000

spool / home / oracle / replay / awrdiff_10g_11g.html

SELECT output

  FROM TABLE ( DBMS_WORKLOAD_REPOSITORY.AWR_DIFF_REPORT_HTML ( dbid1     => 1959014922 ,

                                                           inst_num1 => 1 ,

                                                           bid1      => 3212 ,

                                                           eid1      => 3213 ,

                                                           dbid2     => 2791053097 ,

                                                           inst_num2 => 1 ,

                                                           bid2      => 6414 ,

                                                           eid2      => 6415 ));

spool off

 

测试完成,删除capture和replay

SQL> SELECT id, name FROM dba_workload_captures;

SQL> exec dbms_workload_capture.delete_capture_info(2);

SQL> select id, awr_begin_snap, awr_end_snap from dba_workload_replays;

SQL> exec DBMS_WORKLOAD_REPLAY.DELETE_REPLAY_INFO (1);

 

 

相关推荐