Oracle 19c RAC重建AWR步骤详解

Oracle 19c RAC重建AWR步骤详解

  • 一、概述
    • [1.1 什么是AWR?](#1.1 什么是AWR?)
    • [1.2 为什么要重建AWR?](#1.2 为什么要重建AWR?)
    • [1.3 RAC环境特殊性](#1.3 RAC环境特殊性)
  • 二、环境检查
    • [2.1 检查当前AWR配置](#2.1 检查当前AWR配置)
    • [2.2 检查RAC集群状态](#2.2 检查RAC集群状态)
  • 三、重建步骤详解
    • [3.1 停止自动收集](#3.1 停止自动收集)
    • [3.2 删除现有AWR对象](#3.2 删除现有AWR对象)
    • [3.3 重新创建AWR对象](#3.3 重新创建AWR对象)
    • [3.4 编译失效对象](#3.4 编译失效对象)
    • [3.5 配置AWR策略](#3.5 配置AWR策略)
    • [3.6 RAC数据库重启](#3.6 RAC数据库重启)
    • [3.7 创建初始快照](#3.7 创建初始快照)

一、概述

1.1 什么是AWR?

  AWR(Automatic Workload Repository)是Oracle数据库的核心性能诊断组件,用于自动收集、处理和维护数据库性能统计信息。它每小时自动生成一次快照,为数据库性能分析和故障诊断提供关键数据支持。

1.2 为什么要重建AWR?

  • 数据损坏:AWR表空间数据损坏或对象失效。
  • 性能问题:AWR相关查询性能下降。
  • 存储清理:清理过期的历史性能数据。
  • 配置重置:恢复默认的AWR收集策略。
  • 故障恢复:解决AWR相关的错误和异常。

1.3 RAC环境特殊性

  在Oracle RAC(Real Application Clusters)环境中,AWR数据存储在共享的SYSAUX表空间中,所有集群节点共享同一套AWR数据结构。重建操作会影响整个集群的性能数据收集。

二、环境检查

2.1 检查当前AWR配置

sql 复制代码
-- 查看当前AWR快照设置
SELECT * FROM dba_hist_wr_control;

      DBID SNAP_INTERVAL
---------- ---------------------------------------------------------------------------
RETENTION                                                                   TOPNSQL        CON_ID
--------------------------------------------------------------------------- ---------- ----------
  SRC_DBID
----------
SRC_DBNAME
----------------------------------------------------------------------------------------------------
TABLESPACE_NAME
----------------------------------------------------------------------------------------------------
MOST_RECENT_SNAP_ID MOST_RECENT_SNAP_TIME
------------------- ---------------------------------------------------------------------------
MOST_RECENT_PURGE_TIME                                                      MOST_RECENT_SPLIT_ID
--------------------------------------------------------------------------- --------------------
MOST_RECENT_SPLIT_ STATUS_FLAG REGIS REGISTRATION_TYPE                                AUTO_PUR
------------------ ----------- ----- ------------------------------------------------ --------
2172982360 +00000 01:00:00.0
+00008 00:00:00.0                                                           DEFAULT             0
2172982360
lemon
SYSAUX
                  5 29-DEC-25 01.00.15.511 PM
29-DEC-25 12.24.37.548 PM                                                                      3
29-DEC-25                    0 OK    LOCAL                                            ENABLED


-- 查看详细的快照配置
col SNAP_INTERVAL for a20
col RETENTION for a30
SELECT DBID, SNAP_INTERVAL, SNAPINT_NUM, RETENTION FROM wrm$_wr_control;

      DBID SNAP_INTERVAL        SNAPINT_NUM RETENTION
---------- -------------------- ----------- ------------------------------
2172982360 +00000 01:00:00.0           3600 +00008 00:00:00.0

-- 检查已有快照数量
SELECT COUNT(*) AS snapshot_count FROM dba_hist_snapshot;

SNAPSHOT_COUNT
--------------
            10

-- 查看快照时间范围
SELECT MIN(begin_interval_time) AS earliest,
       MAX(end_interval_time) AS latest
FROM dba_hist_snapshot;

EARLIEST                       LATEST
------------------------------ ------------------------------
25-DEC-25 01.52.43.000 PM      29-DEC-25 01.00.13.419 PM

--
select SNAP_ID,BEGIN_INTERVAL_TIME,END_INTERVAL_TIME from dba_hist_snapshot order by 1 desc

   SNAP_ID BEGIN_INTERVAL_TIME            END_INTERVAL_TIME
---------- ------------------------------ ------------------------------
         5 29-DEC-25 12.07.12.354 PM      29-DEC-25 01.00.13.419 PM
         5 29-DEC-25 12.07.12.151 PM      29-DEC-25 01.00.13.366 PM
         4 29-DEC-25 11.57.09.000 AM      29-DEC-25 12.07.12.354 PM
         4 29-DEC-25 11.56.15.000 AM      29-DEC-25 12.07.12.151 PM
         3 29-DEC-25 10.44.58.000 AM      29-DEC-25 10.55.25.386 AM
         3 29-DEC-25 10.48.01.000 AM      29-DEC-25 10.55.25.742 AM
         2 26-DEC-25 11.26.18.000 AM      26-DEC-25 11.36.19.246 AM
         2 26-DEC-25 11.27.10.000 AM      26-DEC-25 11.36.19.266 AM
         1 25-DEC-25 01.52.43.000 PM      25-DEC-25 01.53.12.514 PM
         1 25-DEC-25 01.52.43.000 PM      25-DEC-25 01.53.05.305 PM

10 rows selected.

2.2 检查RAC集群状态

sql 复制代码
# 检查集群状态
crsctl stat res -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.LISTENER.lsnr
               ONLINE  ONLINE       lemon01                  STABLE
               ONLINE  ONLINE       lemon02                  STABLE
ora.chad
               ONLINE  ONLINE       lemon01                  STABLE
               ONLINE  ONLINE       lemon02                  STABLE
ora.net1.network
               ONLINE  ONLINE       lemon01                  STABLE
               ONLINE  ONLINE       lemon02                  STABLE
ora.ons
               ONLINE  ONLINE       lemon01                  STABLE
               ONLINE  ONLINE       lemon02                  STABLE
ora.proxy_advm
               OFFLINE OFFLINE      lemon01                  STABLE
               OFFLINE OFFLINE      lemon02                  STABLE
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.ASMNET1LSNR_ASM.lsnr(ora.asmgroup)
      1        ONLINE  ONLINE       lemon01                  STABLE
      2        ONLINE  ONLINE       lemon02                  STABLE
ora.DATA.dg(ora.asmgroup)
      1        ONLINE  ONLINE       lemon01                  STABLE
      2        ONLINE  ONLINE       lemon02                  STABLE
ora.FRA.dg(ora.asmgroup)
      1        ONLINE  ONLINE       lemon01                  STABLE
      2        ONLINE  ONLINE       lemon02                  STABLE
ora.LISTENER_SCAN1.lsnr
      1        ONLINE  ONLINE       lemon02                  STABLE
ora.OCR.dg(ora.asmgroup)
      1        ONLINE  ONLINE       lemon01                  STABLE
      2        ONLINE  ONLINE       lemon02                  STABLE
ora.asm(ora.asmgroup)
      1        ONLINE  ONLINE       lemon01                  Started,STABLE
      2        ONLINE  ONLINE       lemon02                  Started,STABLE
ora.asmnet1.asmnetwork(ora.asmgroup)
      1        ONLINE  ONLINE       lemon01                  STABLE
      2        ONLINE  ONLINE       lemon02                  STABLE
ora.cvu
      1        OFFLINE OFFLINE                               STABLE
ora.lemon.db
      1        ONLINE  ONLINE       lemon01                  Open,HOME=/u01/app/o
                                                             racle/product/19.3.0
                                                             /db,STABLE
      2        ONLINE  ONLINE       lemon02                  Open,HOME=/u01/app/o
                                                             racle/product/19.3.0
                                                             /db,STABLE
ora.lemon01.vip
      1        ONLINE  ONLINE       lemon01                  STABLE
ora.lemon02.vip
      1        ONLINE  ONLINE       lemon02                  STABLE
ora.qosmserver
      1        OFFLINE OFFLINE                               STABLE
ora.scan1.vip
      1        ONLINE  ONLINE       lemon02                  STABLE
--------------------------------------------------------------------------------

三、重建步骤详解

3.1 停止自动收集

sql 复制代码
-- 停止AWR自动快照收集
EXEC DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(interval=>0);

-- 验证设置
SELECT SNAP_INTERVAL FROM dba_hist_wr_control;

SNAP_INTERVAL
---------------------------------------------------------------------------
+40150 00:00:00.0

说明:

  • 将采集间隔设为0,禁用自动快照。
  • 防止MMON进程在重建过程中写入新数据。
  • RAC环境中,此操作对所有节点立即生效。

3.2 删除现有AWR对象

sql 复制代码
-- 运行删除脚本
@?/rdbms/admin/catnoawr.sql

脚本功能:

  • 删除所有WRH$_开头的表(历史数据)。
  • 删除所有WRF$_开头的表(工作负载数据)。
  • 删除所有WRR$_开头的表(报告数据)。
  • 删除相关的索引、序列、视图。
  • 清理AWR相关的元数据。

注意事项:

  • 执行时间取决于AWR数据量大小。
  • 操作不可逆,确保有完整备份。
  • 在RAC的一个节点执行即可。
  • 监控UNDO表空间使用情况。

3.3 重新创建AWR对象

sql 复制代码
-- 运行创建脚本
@?/rdbms/admin/catawrtb.sql

脚本功能:

  • 创建新的AWR表结构
  • 建立必要的分区(按时间范围分区)
  • 创建所有必需的索引
  • 初始化序列和约束
  • 设置初始存储参数

3.4 编译失效对象

sql 复制代码
-- 第一次编译
@?/rdbms/admin/utlrp.sql

-- 等待编译完成后验证编译结果
@?/rdbms/admin/execsvrm.sql

-- 如果有报错信息对象,再次编译无效对象
@?/rdbms/admin/utlrp.sql

关键点:

  • utlrp.sql可能需运行多次
  • execsvrm.sql必须无错误输出
  • 在RAC环境,编译结果对所有节点生效
  • 监控编译过程中的资源使用

3.5 配置AWR策略

sql 复制代码
-- 设置新的采集策略(示例:每30分钟一次,保留8天)
exec DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(interval=>30, retention=>8*24*60);

-- 验证配置
SELECT * FROM dba_hist_wr_control;


      DBID SNAP_INTERVAL
---------- ---------------------------------------------------------------------------
RETENTION                                                                   TOPNSQL        CON_ID
--------------------------------------------------------------------------- ---------- ----------
  SRC_DBID
----------
SRC_DBNAME
----------------------------------------------------------------------------------------------------
TABLESPACE_NAME
----------------------------------------------------------------------------------------------------
MOST_RECENT_SNAP_ID MOST_RECENT_SNAP_TIME
------------------- ---------------------------------------------------------------------------
MOST_RECENT_PURGE_TIME                                                      MOST_RECENT_SPLIT_ID
--------------------------------------------------------------------------- --------------------
MOST_RECENT_SPLIT_ STATUS_FLAG REGIS REGISTRATION_TYPE                                AUTO_PUR
------------------ ----------- ----- ------------------------------------------------ --------
2172982360 +00000 00:30:00.0
+00008 00:00:00.0                                                           DEFAULT             0
2172982360
lemon
SYSAUX
                  0 15-JAN-26 05.23.04.249 PM
15-JAN-26 05.23.04.249 PM                                                                      0
15-JAN-26                    0 OK    LOCAL                                            ENABLED

参数说明:

参数 建议值 说明
interval 60 每60分钟采集一次(1小时)
retention 43200 保留30天数据(30×24×60)
topnsql DEFAULT 保留的SQL数量,默认根据SYSAUX空间自动调整

3.6 RAC数据库重启

sql 复制代码
# 按实例逐个重启
srvctl stop instance -d lemon -i lemon1
srvctl start instance -d lemon -i lemon1

srvctl stop instance -d lemon -i lemon2
srvctl start instance -d lemon -i lemon2

3.7 创建初始快照

sql 复制代码
-- 手动创建第一个快照
EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();

-- 验证快照创建
SELECT snap_id, 
       begin_interval_time, 
       end_interval_time,
       instance_number
FROM dba_hist_snapshot 
ORDER BY snap_id DESC 
FETCH FIRST 5 ROWS ONLY;
   SNAP_ID BEGIN_INTERVAL_TIME            END_INTERVAL_TIME              INSTANCE_NUMBER
---------- ------------------------------ ------------------------------ ---------------
         1 15-JAN-26 05.26.28.000 PM      15-JAN-26 05.28.30.525 PM                    1
         1 15-JAN-26 05.28.17.000 PM      15-JAN-26 05.28.32.901 PM                    2
相关推荐
二宝哥32 分钟前
CentOS 7.9 离线安装 Nginx 并配置openssl1.1.1
linux·nginx·centos
TDengine (老段)42 分钟前
TDengine taosAdapter — 多协议网关详解
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
Nturmoils42 分钟前
SQL Server 迁移到 KingbaseES:一次复杂 BI 查询的性能实测
数据库
程序员老陆1 小时前
说一说FFmpeg6在Linux平台的编译
linux·运维·服务器·ffmpeg
玫幽倩1 小时前
2026黄河流域公安院校-电子物证单项赛(程序逆向分析+服务器取证)
运维·服务器·python·电子取证·逆向·程序分析·服务器取证
蒲公英eric1 小时前
从布尔盲注到参数化查询:DVWA SQL 盲注模块完整漏洞分析教程
sql·web安全·ai·dvwa·ai安全·sql 盲注
IT摆渡者2 小时前
VM EXSI7.0存储硬盘故障处理
大数据·linux·github
今天AI了吗2 小时前
MCP 协议打通 AI 与国产数据库,SQL 调优全流程一站式闭环
数据库·人工智能·sql
赵民勇2 小时前
systemd-cgtop命令详解
linux·运维
灯澜忆梦2 小时前
【MySQL11】进阶篇 | 索引_#3使用规则
数据库·sql·mysql·性能优化