oracle 11G新特性之数据库重放replay 命令

编程入门 行业动态 更新时间:2024-10-24 20:14:40

oracle 11G<a href=https://www.elefans.com/category/jswz/34/1767830.html style=新特性之数据库重放replay 命令"/>

oracle 11G新特性之数据库重放replay 命令

为什么使用数据库重演

大型业务关键应用程序不但复杂,而且负载模式和使用模式也相当多。与此同时,这些业务系统要在响应时间、吞吐量、运行时间和可用性方面提供特定服务级别的保证。对系统的任何更改(如升级数据库或修改配置)通常都需要进行全面的测试和验证,然后才能在生产系统中实施这些更改。在移到生产系统之前为了保证安全,数据库管理员(DBA) 需要让测试系统承受与生产环境中的工作量很近似的工作量。DBA 使用一种有效的方式分析系统级更改对整体SQL 性能的影响也很有益处,因为这样便可以在生产之前对更改执行任何必要的优化。

为什么使用数据库重放:

(1)  系统更改(如硬件和软件升级)是不可避免的。

(2)  客户需要在实施更改前确定更改的全面影响。

(3)  大量的测试和验证可能会花费很多的时间和资金。

(4)  测试除了成本昂贵之外,成功率还很低:

a)  许多问题未被检测到。

b)  更改可能会对系统的可用性和性能产生负面影响。

(5)  成功率低的原因:

a)  无法使用实际的生产工作量进行正确的测试,有许多问题未被检测到。

(6)  数据库重放功能使您可以执行与实际情况相符合的测试。

理论上,数据库重放的工作顺序如下图所示。

启动一个记录数据库活动的捕获流程。

  • 该流程将活动写入名为“capture files”的特殊文件,该文件位于 /capture directory/ 目录中。
  • 稍后,停止捕获流程,将这些捕获文件移至 /replay directory/ 目录中的测试系统。
  • 启动一个重放流程和若干重放客户端,以重放这些捕获文件。
  • 这些捕获文件将在测试数据库上应用。

 

下面实际 操作一下:

 

1.捕获操作

1.1建立捕获目录:

[root@qht131 ~]# su - oracle
[oracle@qht131 ~]$ mkdir -p /u01/app/oracle/db_replay_capture/SQL> create or replace directory db_replay_capture_dir as '/u01/app/oracle/db_replay_capture';

1.2建立测试表以及Insert语句的代码:

SQL> create user l5m identified by l5m quota unlimited on users;User created.SQL> grant connect,create table,create sequnce to l5m;Grant succeeded.SQL> conn l5m
Enter password:
Connected.
SQL> create table trans (trans_id        number,cust_name       varchar2(20),trans_dt        date,trans_amt       number(8,2),store_id        number(2)
)
/Table created.SQL> create sequence trans_id_seq start with 1 maxvalue 99999999999999 minvalue 1 nocycle cache 20;Sequence created.

insert的代码存放在一个sql里面,待开启捕获后运行些代码

[oracle@qht131 ~]$ cat add_trans.sql
declarel_stmt varchar2(2000);
beginfor ctr in 1..1000 loopl_stmt := 'insert into l5m.trans values ('||trans_id_seq.nextval||','||''''||dbms_random.string('U',20)||''','||'sysdate - '||round(dbms_random.value(1,365))||','||round(dbms_random.value(1,999999),2)||','||round(dbms_random.value(1,99))||')';dbms_output.put_line(l_stmt);execute immediate l_stmt;commit;end loop;
end;

1.3 测试环境只用一台机器来模拟重放,所以需要先建立一个还原点:

建立还原点之前需要先确认是开启了归档模式:

SQL> archive log list;  --确认已开启归档
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     79
Next log sequence to archive   81
Current log sequence           81SQL> select flashback_on from v$database; --确定开启flashbak数据库FLASHBACK_ON
------------------
YESSQL> create restore point gold;Restore point created.

1.4创建filter

示例如下:

SQL> execdbms_workload_capture.ADD_FILTER( fname IN VARCHAR2, fattribute  IN VARCHAR2,fvalueIN VARCHAR2);

name=Name of the filter.

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

fvalue= value for the corresponding attribute.

如:

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

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

 

2.开始捕获

2.1 开启捕获

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

SQL> BEGIN2  DBMS_WORKLOAD_CAPTURE.start_capture (name     => 'test_capture_1',3  dir      =>'DB_REPLAY_CAPTURE_DIR',4  duration => NULL);5  END;6  /PL/SQL procedure successfully completed.

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

2.2 对数据库做一些操作

SQL> conn l5m/l5m
Connected.SQL> @/home/oracle/add_trans.sql;PL/SQL procedure successfully completed.SQL> select count(*) from l5m.trans;COUNT(*)
----------1000

3.结束捕获

SQL> conn / as sysdba
Connected.
SQL> BEGIN2  DBMS_WORKLOAD_CAPTURE.finish_capture;3  END;4  /PL/SQL procedure successfully completed.

4.查看捕获的目录:

[oracle@qht131 ~]$ cd /u01/app/oracle/db_replay_capture/
[oracle@qht131 db_replay_capture]$ ls
cap  capfiles
[oracle@qht131 db_replay_capture]$ cd cap
[oracle@qht131 cap]$ ls
wcr_cr.html  wcr_cr.text  wcr_fcapture.wmd  wcr_scapture.wmd
[oracle@qht131 cap]$ cd ..
[oracle@qht131 db_replay_capture]$ tree
.
|-- cap
|   |-- wcr_cr.html
|   |-- wcr_cr.text
|   |-- wcr_fcapture.wmd
|   `-- wcr_scapture.wmd
`-- capfiles`-- inst1|-- aa|   |-- wcr_4v1ufh0000001.rec|   |-- wcr_4v1ugh0000002.rec|   |-- wcr_4v1ujh0000003.rec|   |-- wcr_4v1ujh0000004.rec|   |-- wcr_4v1ukh0000005.rec|   |-- wcr_4v1uph0000007.rec|   |-- wcr_4v1v0h0000008.rec|   |-- wcr_4v1v2h0000009.rec|   |-- wcr_4v1vgh000000c.rec|   |-- wcr_4v1xuh000000g.rec|   |-- wcr_4v1xuh000000h.rec|   |-- wcr_4v20ah000000m.rec|   |-- wcr_4v219h000000q.rec|   |-- wcr_4v21ah000000r.rec|   `-- wcr_4v21uh000000s.rec|-- ab|-- ac|-- ad|-- ae|-- af|-- ag|-- ah|-- ai`-- aj13 directories, 19 files

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

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

获取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')
---------------------------------------------------------------11
--读取dba_workload_captures视图读取:
SQL> SELECT id, name FROM dba_workload_captures;ID NAME
---------- ------------------------------11 test_capture_1

5.预处理workload

5.1 由于是测试环境,捕获和重放是同一台机器(正式环境下需要将捕获的文件复制到目标机器上),现在将数据库恢复到开始捕获前的状态。

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.Total System Global Area  313159680 bytes
Fixed Size                  2227944 bytes
Variable Size             201326872 bytes
Database Buffers          104857600 bytes
Redo Buffers                4747264 bytes
Database mounted.SQL> flashback database to restore point gold;Flashback complete.SQL> alter database open resetlogs;Database altered.

5.2 开始预处理,由于是同一台机器 测试的,数据库的目录也不需要重新建立,否则还需要建立目录(CREATE OR REPLACE DIRECTORY db_replay_capture_dir AS '/u01/app/oracle/db_replay_capture/';)

SQL> BEGIN2  DBMS_WORKLOAD_REPLAY.process_capture('DB_REPLAY_CAPTURE_DIR');3  END;4  /PL/SQL procedure successfully completed.
[oracle@qht131 db_replay_capture]$ tree
.
|-- cap
|   |-- wcr_cr.html
|   |-- wcr_cr.text
|   |-- wcr_fcapture.wmd
|   `-- wcr_scapture.wmd
|-- capfiles
|   `-- inst1
|       |-- aa
|       |   |-- wcr_4v1ufh0000001.rec
|       |   |-- wcr_4v1ugh0000002.rec
|       |   |-- wcr_4v1ujh0000003.rec
|       |   |-- wcr_4v1ujh0000004.rec
|       |   |-- wcr_4v1ukh0000005.rec
|       |   |-- wcr_4v1uph0000007.rec
|       |   |-- wcr_4v1v0h0000008.rec
|       |   |-- wcr_4v1v2h0000009.rec
|       |   |-- wcr_4v1vgh000000c.rec
|       |   |-- wcr_4v1xuh000000g.rec
|       |   |-- wcr_4v1xuh000000h.rec
|       |   |-- wcr_4v20ah000000m.rec
|       |   |-- wcr_4v219h000000q.rec
|       |   |-- wcr_4v21ah000000r.rec
|       |   `-- wcr_4v21uh000000s.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

预处理之后,目录方的中生成了重演的数据,pp11.2.0.3.0的目录。

6.重放数据库

6.1.用wrc工具进行校验,效验结果会显示完成replay需要replay clients和hosts的数量。

[oracle@qht131 db_replay_capture]$ wrc mode=calibrate replaydir=/u01/app/oracle/db_replay_captureWorkload Replay Client: Release 11.2.0.3.0 - Production on Wed Jul 18 08:59:42 2018Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.Report for Workload in: /u01/app/oracle/db_replay_capture
-----------------------Recommendation:
Consider using at least 1 clients divided among 1 CPU(s)
You will need at least 26 MB of memory per client process.
If your machine(s) cannot match that number, consider using more clients.Workload Characteristics:
- max concurrency: 7 sessions
- total number of sessions: 12Assumptions:
- 1 client process per 50 concurrent sessions
- 4 client process per CPU
- 256 KB of memory cache per concurrent session
- think time scale = 100
- connect time scale = 100
- synchronization = TRUE

6.2 开始replay

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

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

SQL> EXEC DBMS_WORKLOAD_REPLAY.initialize_replay (replay_name => 'test_capture_1',  replay_dir  => 'DB_REPLAY_CAPTURE_DIR');PL/SQL procedure successfully completed.

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

SQL> exec DBMS_WORKLOAD_REPLAY.prepare_replay (synchronization => TRUE);PL/SQL procedure successfully completed.

--检查replay的状态:

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@qht131 db_replay_capture]$ wrc system/sys mode=replay replaydir=/u01/app/oracle/db_replay_captureWorkload Replay Client: Release 11.2.0.3.0 - Production on Wed Jul 18 09:34:22 2018Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.Wait for the replay to start (09:34:22)
Replay started (09:35:01)

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

SQL> exec DBMS_WORKLOAD_REPLAY.START_REPLAY ();PL/SQL procedure successfully completed.SQL> select name,status from  dba_workload_replays;NAME
--------------------------------------------------------------------------------
STATUS
----------------------------------------
test_capture_1
IN PROGRESS

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

SQL>  select name,status from  dba_workload_replays;NAME
--------------------------------------------------------------------------------
STATUS
----------------------------------------
test_capture_1
COMPLETED
[oracle@qht131 db_replay_capture]$ wrc system/sys mode=replay replaydir=/u01/app/oracle/db_replay_captureWorkload Replay Client: Release 11.2.0.3.0 - Production on Wed Jul 18 09:34:22 2018Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.Wait for the replay to start (09:34:22)
Replay started (09:35:01)
Replay finished (09:40:32)

7.验证replay结果以及查看报告

7.1查看数据

SQL> conn l5m/l5m
Connected.
SQL> select count(*) from trans;COUNT(*)
----------1000

数据没有问题,都重做了一遍。

7.2生成报告

SQL> conn /as sysdba
Connected.
SQL> COLUMN name FORMAT A30
SQL> SELECT id, name FROM dba_workload_replays;ID NAME
---------- ------------------------------1 test_capture_1SQL> DECLARE2  l_report  CLOB;3  BEGIN4  l_report := DBMS_WORKLOAD_REPLAY.report(replay_id =>1,5     format     =>DBMS_WORKLOAD_REPLAY.TYPE_HTML);6  END;7  /PL/SQL procedure successfully completed.

 7.3查看报告

[oracle@qht131 db_replay_capture]$ tree
.
|-- cap
|   |-- wcr_cr.html
|   |-- wcr_cr.text
|   |-- wcr_fcapture.wmd
|   `-- wcr_scapture.wmd
|-- capfiles
|   `-- inst1
|       |-- aa
|       |   |-- wcr_4v1ufh0000001.rec
|       |   |-- wcr_4v1ugh0000002.rec
|       |   |-- wcr_4v1ujh0000003.rec
|       |   |-- wcr_4v1ujh0000004.rec
|       |   |-- wcr_4v1ukh0000005.rec
|       |   |-- wcr_4v1uph0000007.rec
|       |   |-- wcr_4v1v0h0000008.rec
|       |   |-- wcr_4v1v2h0000009.rec
|       |   |-- wcr_4v1vgh000000c.rec
|       |   |-- wcr_4v1xuh000000g.rec
|       |   |-- wcr_4v1xuh000000h.rec
|       |   |-- wcr_4v20ah000000m.rec
|       |   |-- wcr_4v219h000000q.rec
|       |   |-- wcr_4v21ah000000r.rec
|       |   `-- wcr_4v21uh000000s.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
`-- rep12207780|-- wcr_ra_12207780.dmp|-- wcr_ra_12207780.log|-- wcr_replay.wmd|-- wcr_rep_uc_graph_12207780.extb`-- wcr_rr_12207780.xml15 directories, 34 files

目录下面多了rep开头的子目录,xml文件就是生成的报告。

参考:

.html

更多推荐

oracle 11G新特性之数据库重放replay 命令

本文发布于:2024-02-05 11:31:51,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1745329.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:新特性   重放   命令   数据库   oracle

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!