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

2023-11-28 07:50

本文主要是介绍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文件就是生成的报告。

参考:

https://blog.csdn.net/tianlesoftware/article/details/8218666

http://www.oracle.com/technetwork/cn/articles/sql/11g-replay-089222-zhs.html

这篇关于oracle 11G新特性之数据库重放replay 命令的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/429337

相关文章

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

30常用 Maven 命令

Maven 是一个强大的项目管理和构建工具,它广泛用于 Java 项目的依赖管理、构建流程和插件集成。Maven 的命令行工具提供了大量的命令来帮助开发人员管理项目的生命周期、依赖和插件。以下是 常用 Maven 命令的使用场景及其详细解释。 1. mvn clean 使用场景:清理项目的生成目录,通常用于删除项目中自动生成的文件(如 target/ 目录)。共性规律:清理操作

深入理解数据库的 4NF:多值依赖与消除数据异常

在数据库设计中, "范式" 是一个常常被提到的重要概念。许多初学者在学习数据库设计时,经常听到第一范式(1NF)、第二范式(2NF)、第三范式(3NF)以及 BCNF(Boyce-Codd范式)。这些范式都旨在通过消除数据冗余和异常来优化数据库结构。然而,当我们谈到 4NF(第四范式)时,事情变得更加复杂。本文将带你深入了解 多值依赖 和 4NF,帮助你在数据库设计中消除更高级别的异常。 什么是

DM8数据库安装后配置

1 前言 在上篇文章中,我们已经成功将库装好。在安装完成后,为了能够更好地满足应用需求和保障系统的安全稳定运行,通常需要进行一些基本的配置。下面是一些常见的配置项: 数据库服务注册:默认包含14个功能模块,将这些模块注册成服务后,可以更好的启动和管理这些功能;基本的实例参数配置:契合应用场景和发挥系统的最大性能;备份:有备无患;… 2 注册实例服务 注册了实例服务后,可以使用系统服务管理,

速了解MySQL 数据库不同存储引擎

快速了解MySQL 数据库不同存储引擎 MySQL 提供了多种存储引擎,每种存储引擎都有其特定的特性和适用场景。了解这些存储引擎的特性,有助于在设计数据库时做出合理的选择。以下是 MySQL 中几种常用存储引擎的详细介绍。 1. InnoDB 特点: 事务支持:InnoDB 是一个支持 ACID(原子性、一致性、隔离性、持久性)事务的存储引擎。行级锁:使用行级锁来提高并发性,减少锁竞争

Oracle type (自定义类型的使用)

oracle - type   type定义: oracle中自定义数据类型 oracle中有基本的数据类型,如number,varchar2,date,numeric,float....但有时候我们需要特殊的格式, 如将name定义为(firstname,lastname)的形式,我们想把这个作为一个表的一列看待,这时候就要我们自己定义一个数据类型 格式 :create or repla

利用命令模式构建高效的手游后端架构

在现代手游开发中,后端架构的设计对于支持高并发、快速迭代和复杂游戏逻辑至关重要。命令模式作为一种行为设计模式,可以有效地解耦请求的发起者与接收者,提升系统的可维护性和扩展性。本文将深入探讨如何利用命令模式构建一个强大且灵活的手游后端架构。 1. 命令模式的概念与优势 命令模式通过将请求封装为对象,使得请求的发起者和接收者之间的耦合度降低。这种模式的主要优势包括: 解耦请求发起者与处理者

linux 判断某个命令是否安装

linux 判断某个命令是否安装 if ! [ -x "$(command -v git)" ]; thenecho 'Error: git is not installed.' >&2exit 1fi