Oracle Database Replay 详解

Oracle Database Replay 详解

适用版本:Oracle Database 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07


1. 概述

Database Replay 捕获生产负载在测试环境重放[1]:

详细见:Oracle SQL Performance Analyzer 详解


2. 流程

2.1 概述

1. 捕获(Capture):生产
2. 预处理(Preprocess):测试
3. 重放(Replay):测试
4. 分析(Analyze):报告

2.2 优势

- 真实负载
- 系统级
- 升级评估
- 变更测试

3. 捕获

3.1 配置

-- 创建目录
CREATE DIRECTORY capture_dir AS '/u01/capture';

-- 启动捕获
BEGIN
  DBMS_WORKLOAD_CAPTURE.START_CAPTURE(
    name => 'prod_capture',
    dir => 'CAPTURE_DIR',
    duration => 3600  -- 秒
  );
END;
/

-- 停止
EXEC DBMS_WORKLOAD_CAPTURE.FINISH_CAPTURE;

3.2 过滤

BEGIN
  DBMS_WORKLOAD_CAPTURE.ADD_FILTER(
    fname => 'exclude_scott',
    fattribute => 'USER',
    fvalue => 'SCOTT'
  );
END;
/

4. 预处理

4.1 测试环境

# 传输文件
scp /u01/capture/* test_server:/u01/replay/

4.2 预处理

CREATE DIRECTORY replay_dir AS '/u01/replay';

BEGIN
  DBMS_WORKLOAD_REPLAY.PROCESS_CAPTURE(
    capture_dir => 'REPLAY_DIR'
  );
END;
/

4.3 初始化

BEGIN
  DBMS_WORKLOAD_REPLAY.INITIALIZE_REPLAY(
    replay_name => 'replay1',
    replay_dir => 'REPLAY_DIR'
  );
END;
/

5. 重放

5.1 准备

-- 模式映射
BEGIN
  DBMS_WORKLOAD_REPLAY.SET_REPLAY_MAPPING(
    capture_schema => 'SCOTT',
    replay_schema => 'TEST'
  );
END;
/

-- 连接映射
BEGIN
  DBMS_WORKLOAD_REPLAY.SET_CONNECTION_MAPPING(
    capture_conn => 'prod_conn',
    replay_conn => 'test_conn'
  );
END;
/

5.2 客户端

# 启动重放客户端
wrc mode=replay replaydir=/u01/replay server=test_server

5.3 启动

BEGIN
  DBMS_WORKLOAD_REPLAY.START_REPLAY;
END;
/

5.4 停止

EXEC DBMS_WORKLOAD_REPLAY.CANCEL_REPLAY;

6. 分析

6.1 报告

-- 文本
SELECT DBMS_WORKLOAD_REPLAY.REPORT(replay_id => 1, format => 'TEXT') 
FROM dual;

-- HTML
SELECT DBMS_WORKLOAD_REPLAY.REPORT(replay_id => 1, format => 'HTML') 
FROM dual;

6.2 内容

- 重放统计
- 性能对比
- 错误
- 分歧

7. 分歧

7.1 类型

- 数据分歧
- 错误分歧
- 性能分歧

7.2 检查

SELECT * FROM dba_workload_divergence;

8. 应用场景

8.1 升级

- 生产负载
- 升级测试
- 性能验证

8.2 配置变更

- 参数
- 硬件
- 评估

8.3 应用变更

- 应用升级
- SQL 变更
- 验证

8.4 容量规划

- 峰值负载
- 扩容评估
- 性能基线

9. 限制

9.1 不支持

- 部分非数据库操作
- OS 文件操作
- 外部过程

9.2 注意

- 测试环境数据一致
- 时间窗口
- 资源

10. 与 SPA 对比

10.1 区别

SPADatabase Replay
范围SQL 级系统级
负载STS全负载
评估SQL 性能系统性能

10.2 配合

- Database Replay:系统级
- SPA:SQL 级
- 综合评估

11. 监控

11.1 捕获

SELECT id, name, status, start_time, end_time
FROM dba_workload_captures;

11.2 重放

SELECT id, name, status, start_time, end_time
FROM dba_workload_replays;

11.3 进度

SELECT * FROM v$workload_replay_thread;

12. 常见问题

12.1 分歧多

- 数据不一致
- 同步数据
- 重试

12.2 性能差

- 资源不足
- 优化
- 监控

12.3 捕获失败

- 空间
- 权限
- 检查

13. 最佳实践

  1. 代表性负载:峰值
  2. 测试环境一致:数据
  3. 预处理:必需
  4. 客户端:充足
  5. 映射:正确
  6. 监控:分歧
  7. 报告:详细
  8. 文档:记录
  9. 演练:升级前
  10. 复盘:总结

14. 参考资料

[1] Oracle Database Testing Guide 19c, “Database Replay” https://docs.oracle.com/en/database/oracle/oracle-database/19/ratup/