oracle database replay的相关测试

二.Database Replay 示例
 

2.1 捕获(Capture) --生产库
DBMS_WORKLOAD_CAPTURE包提供了一些列的过程和函数来控制capture 进程。

 

2.1.1 创建目录存放capture 日志
在生产库上创建如下目录:

[root@dave ~]# su - oracle

[oracle@dave ~]$ mkdir /oracle/app/oracle/db_replay_capture

 

连接实例,创建directory:

[oracle@dave ~]$ ora si

 

SQL*Plus: Release 11.2.0.3.0 Production onWed Oct 10 18:57:05 2012

 

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

 

 

Connected to:

Oracle Database 11g Enterprise EditionRelease 11.2.0.3.0 - 64bit Production

With the Partitioning, OLAP, Data Miningand Real Application Testing options

 

SQL> CREATE OR REPLACE DIRECTORY db_replay_capture_dir AS '/oracle/app/oracle/db_replay_capture/';

 

Directory created.

 

SQL> SHUTDOWN IMMEDIATE

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> STARTUP

ORACLE instance started.

 

Total System Global Area  730714112 bytes

Fixed Size                  2231952 bytes

Variable Size             285213040 bytes

Database Buffers          419430400 bytes

Redo Buffers               23838720 bytes

Database mounted.

Database opened.

SQL>

 

注意:

    这里的shutdown 和startup 操作不是必须的操作。 但是Oracle 建议我们执行这个操作。 这样可以确保我们在开始captureprocess 之前,其他的outstanding processes已经执行完毕。

 

2.1.2 创建Filter
结合ADD_FILTER 过程和START_CAPTURE 过程的DEFAULT_ACTION 参数,通过对如下属性的including或者excluding的设置,来定制我们自己的workload。

(1)  INSTANCE_NUMBER

(2)  USER

(3)  MODULE

(4)  ACTION

(5)  PROGRAM

(6)  SERVICE

 

Add_filer的使用示例:

SQL> exec dbms_workload_capture.ADD_FILTER( fname IN VARCHAR2, fattribute  IN VARCHAR2,fvalue IN VARCHAR2);

 

fname=Name of the filter.
fattribute=Attribute on which the filter will be applied i.e USER, PROGRAM,INSTANCE_NUMBER etc.

--就是我们上面列的6个属性。
fvalue= value for the corresponding attribute.

 

如:

SQL > exec dbms_workload_capture.ADD_FILTER(fname =>'FILTER_DAYU',fattribute => 'USER',fvalue => 'DAYU');

 

这里为了简单,假设我们capture 所有的信息,就跳过add_filter 的设置。

 

2.1.3 运行Capture
    运行START_CAPTURE 过程时,需要指定capture 名称,directory 和capture 进程运行的时间。 如果duration设置为NULL,则captureprocess 必须等我们手工调用FINISH_CAPTURE 过程来结束。

 

具体操作如下:

BEGIN

  DBMS_WORKLOAD_CAPTURE.start_capture (name     => 'test_capture_1',

                                       dir      =>'DB_REPLAY_CAPTURE_DIR',

                                       duration => NULL);

 END;

 /

 

PL/SQL procedure successfully completed.

--运行这个过程,必须要具有SYSDBA和SYSOPER的用户来执行。

 

2.1.4 做一些变更操作
 

--创建用户:

SQL> CREATE USER anqing IDENTIFIED BY anqing QUOTA UNLIMITED ON users;

 

User created.

 

SQL> GRANT CONNECT, CREATE TABLE TO anqing;

 

Grant succeeded.

 

--插入数据:

SQL> conn anqing/anqing;

Connected.

CREATE TABLE db_replay_test_tab 
(id           NUMBER,
 description  VARCHAR2(50),
 CONSTRAINT db_replay_test_tab_pk PRIMARY KEY (id)
);

 

Table created.

 

BEGIN
  FOR i IN 1 .. 500000 LOOP
    INSERT INTO db_replay_test_tab (id, description)
    VALUES (i, 'Description for' || i);
  END LOOP;
  COMMIT;
END;
/

 

PL/SQL procedure successfully completed.

 

 

2.1.5 停止 capture
SQL> conn / as sysdba

Connected.

BEGIN
DBMS_WORKLOAD_CAPTURE.finish_capture;
END;
/

 

PL/SQL procedure successfully completed.

 

2.1.6 检查capture 目录
 

[oracle@dave ~]$ cd /oracle/app/oracle/db_replay_capture

[oracle@dave db_replay_capture]$ ls

cap capfiles

[oracle@dave db_replay_capture]$ cd cap

[oracle@dave cap]$ ls

wcr_cr.html wcr_cr.text  wcr_fcapture.wmd  wcr_scapture.wmd

[oracle@dave cap]$ cd ..

[oracle@dave db_replay_capture]$ tree

.

|-- cap

|  |-- wcr_cr.html

|  |-- wcr_cr.text

|  |-- wcr_fcapture.wmd

|  `-- wcr_scapture.wmd

`-- capfiles

   `-- inst1

       |-- aa

       |   |-- wcr_7aq7rh000000c.rec

       |   |-- wcr_7aq8qh000000d.rec

       |   `-- wcr_7aqfhh000000r.rec

       |-- ab

       |-- ac

       |-- ad

       |-- ae

       |-- af

       |-- ag

       |-- ah

       |-- ai

       `-- aj

 

13 directories, 7 files

[oracle@dave db_replay_capture]$

 

当capture process 进程正在运行时会生成2个文件: wcr_scapture.wmd 和 wcr_cap_000xx.start。

当finish capture后,还会得到得到另外2个文件: wcr_cr.html 和 wcr_cr.text,wcr_cr.html 文件和 AWR report 类似。

 

 

2.1.7 获取capture ID
有两种方法:

(1)使用GET_CAPTURE_INFO  函数

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

 

DBMS_WORKLOAD_CAPTURE.GET_CAPTURE_INFO('DB_REPLAY_CAPTURE_DIR')

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

                                                             12)使用DBA_WORKLOAD_CAPTURES视图

SQL> COLUMN name FORMAT A30

SQL> SELECT id, name FROMdba_workload_captures;

 

       ID NAME

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

        1 test_capture_1

 

SQL> desc dba_workload_captures

 Name                                     Null?    Type

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

 ID                                        NOTNULL NUMBER

 NAME                                      NOT NULLVARCHAR2(100)

 DBID                                      NOT NULLNUMBER

 DBNAME                                    NOT NULLVARCHAR2(10)

 DBVERSION                                 NOT NULL VARCHAR2(30)

 PARALLEL                                          VARCHAR2(3)

 DIRECTORY                                 NOT NULLVARCHAR2(30)

 STATUS                                    NOT NULLVARCHAR2(40)

 START_TIME                                NOT NULL DATE

 END_TIME                                           DATE

 DURATION_SECS                                      NUMBER

 START_SCN                                 NOT NULLNUMBER

 END_SCN                                           NUMBER

 DEFAULT_ACTION                            NOT NULLVARCHAR2(30)

 FILTERS_USED                                       NUMBER

 CAPTURE_SIZE                                       NUMBER

 DBTIME                                            NUMBER

 DBTIME_TOTAL                                       NUMBER

 USER_CALLS                                         NUMBER

 USER_CALLS_TOTAL                                   NUMBER

 USER_CALLS_UNREPLAYABLE                            NUMBER

 TRANSACTIONS                                       NUMBER

 TRANSACTIONS_TOTAL                                 NUMBER

 CONNECTS                                          NUMBER

 CONNECTS_TOTAL                                     NUMBER

 ERRORS                                            NUMBER

 AWR_DBID                                          NUMBER

 AWR_BEGIN_SNAP                                     NUMBER

 AWR_END_SNAP                                       NUMBER

 AWR_EXPORTED                                      VARCHAR2(12)

 ERROR_CODE                                         NUMBER

 ERROR_MESSAGE                                     VARCHAR2(300)

 DIR_PATH                                  NOT NULLVARCHAR2(4000)

 DIR_PATH_SHARED                           NOT NULLVARCHAR2(10)

 LAST_PROCESSED_VERSION                             VARCHAR2(30)

 SQLSET_OWNER                                      VARCHAR2(30)

 SQLSET_NAME                                       VARCHAR2(30)

 

DBA_WORKLOAD_CAPTURES 视图包含了capture 进程的一些信息,我们可以通过查询该视图来获取capture 的信息。或者,我们也可以使用report 函数生成一个text 或者html 格式的报告来查看。

 

如下:

DECLARE
 l_report  CLOB;
BEGIN
 l_report := DBMS_WORKLOAD_CAPTURE.report(capture_id => 1,
                                          format     =>DBMS_WORKLOAD_CAPTURE.TYPE_HTML);
END;
/

 

并且使用这个capture ID,也可以导出该Capture ID 对应的AWR 快照。如:

BEGIN
 DBMS_WORKLOAD_CAPTURE.export_awr (capture_id => 1);
END;
/

 

该过程执行时,会生成2个文件:wcr_ca.dmp 和 wcr_ca.log。

 

查看capture 目录,会显示多一个dump和相关的log 文件:

[oracle@dave db_replay_capture]$ tree

.

|-- cap

|   |-- wcr_ca.dmp

|   |-- wcr_ca.log

|   |--wcr_cr.html

|  |-- wcr_cr.text

|  |-- wcr_fcapture.wmd

|  `-- wcr_scapture.wmd

`-- capfiles

   `-- inst1

       |-- aa

       |   |-- wcr_7aq7rh000000c.rec

       |   |-- wcr_7aq8qh000000d.rec

       |   `-- wcr_7aqfhh000000r.rec

       |-- ab

       |-- ac

       |-- ad

       |-- ae

       |-- af

       |-- ag

       |-- ah

       |-- ai

       `-- aj

 

13 directories, 9 files

 

 

2.2 处理工作量(WorkloadPreprocessing)--测试库
 

2.2.1 创建目录并copy capture 文件
在测试库上创建目录,并将生产库上产生的capture 文件copy 过来。

 

[oracle@dave ~]$ mkdir /oracle/app/oracle/db_replay_capture

[oracle@dave ~]$ scp -r 192.168.8.100:/oracle/app/oracle/db_replay_capture/* /oracle/app/oracle/db_replay_capture

oracle@192.168.1.10's password:

wcr_scapture.wmd                                                  100%  98     0.1KB/s   00:00   

wcr_cap_uc_graph.extb                                            100%   12KB  12.0KB/s  00:00   

wcr_fcapture.wmd                                                 100%  188     0.2KB/s  00:00   

wcr_cr.html                                                       100%   30KB 29.6KB/s   00:00   

wcr_ca.dmp                                                       100% 7288KB   7.1MB/s   00:01   

wcr_ca.log                                                       100%   15KB  15.2KB/s  00:00   

wcr_cr.text                                                      100%   11KB  10.6KB/s  00:00   

wcr_7aq8qh000000d.rec                                            100% 4020     3.9KB/s   00:00   

wcr_7aq7rh000000c.rec                                             100%1984     1.9KB/s   00:00   

wcr_7aqfhh000000r.rec                                            100% 1614     1.6KB/s   00:00   

[oracle@dave ~]$ cd/oracle/app/oracle/db_replay_capture/

[oracle@dave db_replay_capture]$ tree

.

|-- cap

|  |-- wcr_ca.dmp

|  |-- wcr_ca.log

|  |-- wcr_cr.html

|  |-- wcr_cr.text

|  |-- wcr_fcapture.wmd

|  `-- wcr_scapture.wmd

`-- capfiles

   `-- inst1

       |-- aa

       |   |-- wcr_7aq7rh000000c.rec

       |   |-- wcr_7aq8qh000000d.rec

       |   `-- wcr_7aqfhh000000r.rec

       |-- ab

       |-- ac

       |-- ad

        |-- ae

       |-- af

       |-- ag

       |-- ah

       |-- ai

       `-- aj

 

13 directories, 9 files

 

2.2.2 实例中创建directory
[oracle@dave ~]$ ora si

 

SQL*Plus: Release 11.2.0.3.0 Production onWed Oct 10 19:54:27 2012

 

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

 

 

Connected to:

Oracle Database 11g Enterprise EditionRelease 11.2.0.3.0 - 64bit Production

With the Partitioning, OLAP, Data Miningand Real Application Testing options

 

SQL> CREATE OR REPLACE DIRECTORY db_replay_capture_dir AS '/oracle/app/oracle/db_replay_capture/';

 

Directory created.

 

2.2.3 处理工作量
使用PROCESS_CAPTURE过程来准备capture logs。

BEGIN
 DBMS_WORKLOAD_REPLAY.process_capture('DB_REPLAY_CAPTURE_DIR');
END;
/

 

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

 

[oracle@dave db_replay_capture]$ tree

.

|-- cap

|  |-- wcr_ca.dmp

|  |-- wcr_ca.log

|  |-- wcr_cr.html

|  |-- wcr_cr.text

|  |-- wcr_fcapture.wmd

|  `-- wcr_scapture.wmd

|-- capfiles

|  `-- inst1

|      |-- aa

|      |   |-- wcr_7aq7rh000000c.rec

|      |   |-- wcr_7aq8qh000000d.rec

|      |   `-- wcr_7aqfhh000000r.rec

|      |-- ab

|      |-- ac

|      |-- ad

|      |-- ae

|      |-- af

|      |-- ag

|      |-- ah

|      |-- ai

|      `-- aj

|-- pp11.2.0.3.0

|   |-- wcr_calibrate.xml

|   |-- wcr_commits.extb

|   |-- wcr_conn_data.extb

|   |-- wcr_data.extb

|   |-- wcr_dep_graph.extb

|   |-- wcr_login.pp

|   |-- wcr_process.wmd

|   |-- wcr_references.extb

|   |-- wcr_scn_order.extb

|   `-- wcr_seq_data.extb

`-- rep35546834

 

15 directories, 19 files

 

2.3 重演(Replay)--测试库
 

2.3.1 使用wrc 工具效验
效验结果会显示完成replay需要replayclents和hosts的数量。

 

[oracle@dave /]$ wrc mode=calibratereplay dir=/oracle/app/oracle/db_replay_capture

 

Workload Replay Client: Release 11.2.0.3.0- Production on Wed Oct 10 20:12:32 2012

 

Copyright (c) 1982, 2011, Oracle and/or itsaffiliates.  All rights reserved.

 

 

Report for Workload in:/oracle/app/oracle/db_replay_capture

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

 

Recommendation:

Consider using at least 1clients divided among 1 CPU(s)

You will need at least 3 MB of memory perclient process.

If your machine(s) cannot match thatnumber, consider using more clients.

 

Workload Characteristics:

- max concurrency: 1 sessions

- total number of sessions: 3

 

Assumptions:

- 1 client process per 50 concurrentsessions

- 4 client process per CPU

- 256 KB of memory cache per concurrentsession

- think time scale = 100

- connect time scale = 100

- synchronization = TRUE

 

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

--使用Initializing replay 装载metadata到tables里:

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

 

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

 exec DBMS_WORKLOAD_REPLAY.prepare_replay (synchronization => TRUE);

 

--检查replay的状态:

SQL> set lin 160

SQL> col name for a20

SQL> col status for a20

SQL> select name,status from  dba_workload_replays;

 

NAME                 STATUS

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

test_capture_1       PREPARE

 

 

[oracle@dave /]$ wrc system/oracle mode=replay replaydir=/oracle/app/oracle/db_replay_capture

 

Workload Replay Client: Release 11.2.0.3.0- Production on Wed Oct 10 20:31:39 2012

 

Copyright (c) 1982, 2011, Oracle and/or itsaffiliates.  All rights reserved.

 

 

Wait for the replay to start (20:38:31)

 

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

SQL> exec DBMS_WORKLOAD_REPLAY.START_REPLAY ();

 

SQL> select name,status from  dba_workload_replays;

NAME                 STATUS

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

test_capture_1       IN PROGRESS

 

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

SQL> exec DBMS_WORKLOAD_REPLAY.CANCEL_REPLAY ();

 

--取消后在replay client 窗口会显示:

Errors in file :

ORA-15509: workload replay has beencancelled

 

 

--返回replay clint窗口,等dba_workload_replays中的状态变成compelte就完成replay。此时replayclient会显示操作开始和结束的时间:

[oracle@dave /]$ wrc system/oracle mode=replay replaydir=/oracle/app/oracle/db_replay_capture

 

Workload Replay Client: Release 11.2.0.3.0- Production on Wed Oct 10 20:38:31 2012

 

Copyright (c) 1982, 2011, Oracle and/or itsaffiliates.  All rights reserved.

 

 

Wait for the replay to start (20:38:31)

Replay started (20:38:46)

Replay finished(20:45:12)

 

 

 

--插曲:

我这里在第一次进行replay的时候,失败,replay client 显示:

Errors in file :

ORA-15568: login of user ANQING duringworkload replay failed with ORA-1435

 

[oracle@dave db_replay_capture]$ oerr ora1435

01435, 00000, "user does notexist"

// *Cause:

// *Action:

 

这里提示anqing的用户不存在,根据签名的说明,database replay 是支持DDL操作的。 后来我手工在测试库上创建了用户,然后重新进行了一次replay,才成功。

 

 

2.3.3 验证replay
SQL> conn anqing/anqing;

Connected.

SQL> select count(1) from db_replay_test_tab;

 

 COUNT(1)

----------

500000

 

这里数据是ok的。

 

2.3.4 查看replay 信息
可以使用DBA_WORKLOAD_REPLAYS视图来查看replay 进程的相关信息,并根据capture ID 生成报告。

 

SQL> conn /as sysdba

Connected.

SQL> COLUMNname FORMAT A30

SQL> SELECTid, name FROM dba_workload_replays;

 

        ID NAME

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

         1 test_capture_1

        12 test_capture_1

        21 test_capture_1

        33 test_capture_1

 

 

--生成报告:

DECLARE

 l_report  CLOB;

BEGIN

 l_report := DBMS_WORKLOAD_REPLAY.report(replay_id => 33,

                                         format     =>DBMS_WORKLOAD_REPLAY.TYPE_HTML);

END;

/

 

--capture 目录:

[oracle@dave db_replay_capture]$ tree

.

|-- cap

|  |-- wcr_ca.dmp

|  |-- wcr_ca.log

|  |-- wcr_cr.html

|  |-- wcr_cr.text

|  |-- wcr_fcapture.wmd

|  `-- wcr_scapture.wmd

|-- capfiles

|  `-- inst1

|      |-- aa

|      |   |-- wcr_7aq7rh000000c.rec

|      |   |-- wcr_7aq8qh000000d.rec

|      |   `-- wcr_7aqfhh000000r.rec

|      |-- ab

|      |-- ac

|      |-- ad

|      |-- ae

|      |-- af

|      |-- ag

|      |-- ah

|      |-- ai

|      `-- aj

|-- pp11.2.0.3.0

|  |-- wcr_calibrate.xml

|  |-- wcr_commits.extb

|  |-- wcr_conn_data.extb

|  |-- wcr_data.extb

|  |-- wcr_dep_graph.extb

|  |-- wcr_login.pp

|  |-- wcr_process.wmd

|  |-- wcr_references.extb

|  |-- wcr_scn_order.extb

|  `-- wcr_seq_data.extb

|-- rep35546834

|  |-- wcr_ra_35546834.dmp

|  |-- wcr_ra_35546834.log

|  |-- wcr_replay.wmd

|  |-- wcr_rep_uc_graph_35546834.extb

|  `-- wcr_rr_35546834.xml

|-- rep650437870

|  |-- wcr_ra_650437870.dmp

|  |-- wcr_ra_650437870.log

|  |-- wcr_replay.wmd

|  |-- wcr_rep_uc_graph_650437870.extb

|  `-- wcr_rr_650437870.xml

`-- rep968319046

   |-- wcr_ra_968319046.dmp

   |-- wcr_ra_968319046.log

   |-- wcr_replay.wmd

   |-- wcr_rep_uc_graph_968319046.extb

   `-- wcr_rr_968319046.xml

 

17 directories, 34 files

 

参考文章:https://blog.csdn.net/zhang123456456/article/details/70217000

参考文章:http://blog.itpub.net/53956/viewspace-1314843/

posted @ 2019-08-28 11:12  dayu.liu  阅读(692)  评论(0编辑  收藏  举报