Skip to main content

Automatic Workload Repository (AWR) Report

Oracle AWR report showing database performance statistics

Introduction

AWR (Automatic Workload Repository) is an Oracle performance monitoring feature that collects, processes, and stores database performance statistics. These statistics are used for problem diagnosis and self-tuning of the database. The collected data can be viewed through database views or generated as HTML or text reports, helping DBAs analyze the current performance state of the database in detail.

Background Processes for AWR

  • MMON: collects AWR statistics.
  • MMNL: writes ASH and AWR data to disk.

Data Collected by AWR

AWR captures a wide range of performance-related metrics, including:

  • Object statistics: access and usage statistics of database segments.
  • Time model statistics: data from the V$SYS_TIME_MODEL and V$SESS_TIME_MODEL views.
  • System and session statistics: selected statistics from the V$SYSSTAT and V$SESSTAT views.
  • Active Session History (ASH) statistics.
  • High-load SQL statements contributing significantly to database workload.

Prerequisites

  • Database Edition should be Enterprise.
  • Must have an Oracle Diagnostics Pack license.
  • CONTROL_MANAGEMENT_PACK_ACCESS parameter should be set to DIAGNOSTIC+TUNING.

Reports Provided by AWR

SQL Script Description
awrrpt.sql Basic AWR Report
awrsqrpt.sql Standard SQL Statement Report
awrddrpt.sql Period Difference Report on Current Instance
awrrpti.sql Workload Repository Report by Instance (RAC)
awrgrpt.sql AWR Global Report (RAC)
awrgdrpt.sql AWR Global Difference Report (RAC)
awrinfo.sql Script to Output General AWR Information

Activities in This Guide

Jump to any section directly:

Report Generation

Step 1: Generate the Different Types of AWR Reports

Several scripts under $ORACLE_HOME/rdbms/admin generate different flavors of AWR report. This walks through the basic report, a period comparison report, a SQL-specific report, and the general AWR info script.


Location of AWR scripts:
[oracle@orcl ~]$ cd $ORACLE_HOME/rdbms/admin [oracle@orcl admin]$ [oracle@orcl admin]$ ls -lrth awr* -rw-r--r--. 1 oracle oinstall 744 Jan 25 2017 awrrptinoop.sql -rw-r--r--. 1 oracle oinstall 1.7K Jan 25 2017 awrrptidc.sql -rw-r--r--. 1 oracle oinstall 7.5K May 29 2017 awrupd12.sql -rw-r--r--. 1 oracle oinstall 3.1K May 29 2017 awrsqrpt.sql -rw-r--r--. 1 oracle oinstall 10K May 29 2017 awrrpti.sql -rw-r--r--. 1 oracle oinstall 15K May 29 2017 awrinput.sql -rw-r--r--. 1 oracle oinstall 1.5K May 29 2017 awrgrpt.sql -rw-r--r--. 1 oracle oinstall 8.5K May 29 2017 awrgrpti.sql -rw-r--r--. 1 oracle oinstall 13K May 29 2017 awrginp.sql -rw-r--r--. 1 oracle oinstall 3.6K May 29 2017 awrgdrpt.sql -rw-r--r--. 1 oracle oinstall 9.2K May 29 2017 awrgdrpi.sql -rw-r--r--. 1 oracle oinstall 3.8K May 29 2017 awrddrpt.sql -rw-r--r--. 1 oracle oinstall 1.5K May 29 2017 awrblmig.sql -rw-r--r--. 1 oracle oinstall 2.9K Jul 29 2017 awrinpnm.sql -rw-r--r--. 1 oracle oinstall 26K Jul 29 2017 awrgdinp.sql -rw-r--r--. 1 oracle oinstall 2.5K Jan 4 2018 awrmacro.sql -rw-r--r--. 1 oracle oinstall 8.2K Aug 9 2018 awrrpt.sql -rw-r--r--. 1 oracle oinstall 12K Aug 16 2018 awrsqrpi.sql -rw-r--r--. 1 oracle oinstall 10K Aug 21 2018 awrddrpi.sql -rw-r--r--. 1 oracle oinstall 14K Jul 14 2024 awrextr.sql -rw-r--r--. 1 oracle oinstall 6.6K Jul 14 2024 awrload.sql -rw-r--r--. 1 oracle oinstall 11K Jul 14 2024 awrload_18.sql -rw-r--r--. 1 oracle oinstall 12K Jul 14 2024 awrextr_pre20.sql -rw-r--r--. 1 oracle oinstall 31K Jul 14 2024 awrddinp.sql -rw-r--r--. 1 oracle oinstall 56K Apr 15 2025 awrinfo.sql [oracle@orcl admin]$ Basic AWR Report:
SQL> @?/rdbms/admin/awrrpt.sql Specify the Report Type ~~~~~~~~~~~~~~~~~~~~~~~ AWR reports can be generated in the following formats. Please enter the name of the format at the prompt. Default value is 'html'. 'html' HTML format (default) 'text' Text format 'active-html' Includes Performance Hub active report Enter value for report_type: old 1: select 'Type Specified: ',lower(nvl('&&report_type','html')) report_type from dual new 1: select 'Type Specified: ',lower(nvl('','html')) report_type from dual Type Specified: html old 1: select '&&report_type' report_type_def from dual new 1: select 'html' report_type_def from dual old 1: select '&&view_loc' view_loc_def from dual new 1: select 'AWR_PDB' view_loc_def from dual Current Instance ~~~~~~~~~~~~~~~~ DB Id DB Name Inst Num Instance Container Name -------------- -------------- -------------- -------------- -------------- 1718803653 ORCL 1 orcldc CDB$ROOT Instances in this Workload Repository schema ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DB Id Inst Num DB Name Instance Host ------------ ---------- --------- ---------- ------ * 1718803653 1 ORCL orcldc orcl.oraeasy Using 1718803653 for database Id Using 1 for instance number Specify the number of days of snapshots to choose from ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Entering the number of days (n) will result in the most recent (n) days of snapshots being listed. Pressing <return> without specifying a number lists all completed snapshots. Enter value for num_days: 9 Listing the last 9 days of Completed Snapshots Instance DB Name Snap Id Snap Started Snap Level ------------ ------------ ---------- ------------------ ---------- orcldc ORCL 179 07 Dec 2025 11:44 1 180 07 Dec 2025 12:30 1 181 07 Dec 2025 13:30 1 182 07 Dec 2025 14:30 1 183 07 Dec 2025 15:30 1 184 07 Dec 2025 16:30 1 185 07 Dec 2025 17:30 1 186 09 Dec 2025 20:09 1 187 09 Dec 2025 21:30 1 188 13 Dec 2025 18:23 1 Specify the Begin and End Snapshot Ids ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Enter value for begin_snap: 181 Begin Snapshot Id specified: 181 Enter value for end_snap: 182 End Snapshot Id specified: 182 Specify the Report Name ~~~~~~~~~~~~~~~~~~~~~~~ The default report file name is awrrpt_1_181_182.html. To use this name, press <return> to continue, otherwise enter an alternative. Enter value for report_name: awrrpt_test Using the report name awrrpt_test ...... ...... End of Report </body></html> Report written to awrrpt_test.html SQL> AWR Comparasion report:
SQL> @?/rdbms/admin/awrddrpt.sql Specify the Report Type ~~~~~~~~~~~~~~~~~~~~~~~ Would you like an HTML report, or a plain text report? Enter 'html' for an HTML report, or 'text' for plain text Defaults to 'html' Enter value for report_type: Type Specified: html Current Instance ~~~~~~~~~~~~~~~~ DB Id DB Id DB Name Inst Num Inst Num Instance ----------- ----------- ------------ -------- -------- ------------ 1718803653 1718803653 ORCL 1 1 orcldc Instances in this Workload Repository schema ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DB Id Inst Num DB Name Instance Host ------------ ---------- --------- ---------- ------ * 1718803653 1 ORCL orcldc orcl.oraeasy Database Id and Instance Number for the First Pair of Snapshots ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Using 1718803653 for Database Id for the first pair of snapshots Using 1 for Instance Number for the first pair of snapshots Specify the number of days of snapshots to choose from ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Entering the number of days (n) will result in the most recent (n) days of snapshots being listed. Pressing <return> without specifying a number lists all completed snapshots. Enter value for num_days: 7 Listing the last 7 days of Completed Snapshots Instance DB Name Snap Id Snap Started Snap Level ------------ ------------ ---------- ------------------ ---------- orcldc ORCL 179 07 Dec 2025 11:44 1 180 07 Dec 2025 12:30 1 181 07 Dec 2025 13:30 1 182 07 Dec 2025 14:30 1 183 07 Dec 2025 15:30 1 184 07 Dec 2025 16:30 1 185 07 Dec 2025 17:30 1 186 09 Dec 2025 20:09 1 187 09 Dec 2025 21:30 1 188 13 Dec 2025 18:23 1 Specify the First Pair of Begin and End Snapshot Ids ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Enter value for begin_snap: 180 First Begin Snapshot Id specified: 180 Enter value for end_snap: 181 First End Snapshot Id specified: 181 Instances in this Workload Repository schema ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DB Id Inst Num DB Name Instance Host ------------ ---------- --------- ---------- ------ * 1718803653 1 ORCL orcldc orcl.oraeasy Database Id and Instance Number for the Second Pair of Snapshots ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Using 1718803653 for Database Id for the second pair of snapshots Using 1 for Instance Number for the second pair of snapshots Specify the number of days of snapshots to choose from ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Entering the number of days (n) will result in the most recent (n) days of snapshots being listed. Pressing <return> without specifying a number lists all completed snapshots. Enter value for num_days2: 6 Listing the last 6 days of Completed Snapshots 186 09 Dec 2025 20:09 1 187 09 Dec 2025 21:30 1 188 13 Dec 2025 18:23 1 Specify the Second Pair of Begin and End Snapshot Ids ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Enter value for begin_snap2: 186 Second Begin Snapshot Id specified: 186 Enter value for end_snap2: 187 Second End Snapshot Id specified: 187 Specify the Report Name ~~~~~~~~~~~~~~~~~~~~~~~ The default report file name is awrdiff_1_180_1_186.html To use this name, press <return> to continue, otherwise enter an alternative. Enter value for report_name: Using the report name awrdiff_1_180_1_186.html ...... ...... </body></html> Report written to awrdiff_1_180_1_186.html SQL> AWR for specfic SQL ID:
SQL> @?/rdbms/admin/awrsqrpt.sql Specify the Report Type ~~~~~~~~~~~~~~~~~~~~~~~ Would you like an HTML report, or a plain text report? Enter 'html' for an HTML report, or 'text' for plain text Defaults to 'html' Enter value for report_type: Type Specified: html Current Instance ~~~~~~~~~~~~~~~~ DB Id DB Name Inst Num Instance ----------- ------------ -------- ------------ 1718803653 ORCL 1 orcldc Instances in this Workload Repository schema ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DB Id Inst Num DB Name Instance Host ------------ ---------- --------- ---------- ------ * 1718803653 1 ORCL orcldc orcl.oraeasy Using 1718803653 for database Id Using 1 for instance number Specify the number of days of snapshots to choose from ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Entering the number of days (n) will result in the most recent (n) days of snapshots being listed. Pressing <return> without specifying a number lists all completed snapshots. Enter value for num_days: 7 Listing the last 7 days of Completed Snapshots Instance DB Name Snap Id Snap Started Snap Level ------------ ------------ ---------- ------------------ ---------- orcldc ORCL 179 07 Dec 2025 11:44 1 180 07 Dec 2025 12:30 1 181 07 Dec 2025 13:30 1 182 07 Dec 2025 14:30 1 183 07 Dec 2025 15:30 1 184 07 Dec 2025 16:30 1 185 07 Dec 2025 17:30 1 186 09 Dec 2025 20:09 1 187 09 Dec 2025 21:30 1 188 13 Dec 2025 18:23 1 189 13 Dec 2025 19:30 1 Specify the Begin and End Snapshot Ids ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Enter value for begin_snap: 182 Begin Snapshot Id specified: 182 Enter value for end_snap: 183 End Snapshot Id specified: 183 Specify the SQL Id ~~~~~~~~~~~~~~~~~~ Enter value for sql_id: 22356bkgsdcnh SQL ID specified: 22356bkgsdcnh ...... ...... </body></html> Report written to sqlawrreport.html SQL> Use below script for AWR info:
SQL> @?/rdbms/admin/awrinfo.sql This script will report general AWR information ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Specify the Report File Name ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The default report file name is awrinfo.txt. To use this name, press <return> to continue, otherwise enter an alternative. Enter value for report_name: Using the report name awrinfo.txt No errors. No errors. ~~~~~~~~~~~~~~~ AWR INFO Report ~~~~~~~~~~~~~~~ ...... ...... Report generation time: +00 00:00:18.8 End of Report Report written to awrinfo.txt SQL> Report excerpt:
************************************* (2) Size estimates for AWR snapshots ************************************* | | Estimates based on 15 mins snapshot INTERVAL: | AWR size/day 736.2 MB (7,852 K/snap * 96 snaps/day) | AWR size/wk 5,153.1 MB (size_per_day * 7) per instance | | Estimates based on 13 snaps in past 24 hours: | AWR size/day 697.8 MB (7,852 K/snap and 13 snaps in past 3.4 hours) | AWR size/wk 4,884.7 MB (size_per_day * 7) per instance | ********************************** (3) Space usage by AWR components (per database) ********************************** COMPONENT MB % AWR KB_PER_SNAP MB_PER_DAY MB_PER_WEEK TABLE% : INDEX% --------- --------- ------ ------------ ---------- ----------- ---------------- FIXED 52.3 52.5 4,121 366.2 2,563.3 44% : 56% EVENTS 9.5 9.5 748 66.5 465.5 45% : 55% SQLPLAN 7.0 7.0 551 49.0 343.0 71% : 29% SPACE 4.8 4.8 374 33.3 232.8 47% : 53% SQL 3.2 3.2 251 22.3 156.2 51% : 49% ASH 0.9 0.9 74 6.6 45.9 60% : 40% SQLTEXT 0.9 0.9 69 6.1 42.9 86% : 14% SQLBIND 0.9 0.9 69 6.1 42.9 50% : 50% RAC 0.6 0.6 44 3.9 27.6 44% : 56% **********************************

The awrinfo.sql excerpt at the end is worth a second look on its own — it estimates AWR's actual disk footprint per day and per week, broken down by component, which is exactly the data you need before deciding on a retention policy in the next section.

Modify AWR Retention & Interval

Step 2: Change the Snapshot Interval and Retention

Check the current interval and retention first, then adjust both using dbms_workload_repository.modify_snapshot_settings. Note that this must be run separately in each container — the CDB root and each PDB maintain independent settings.


Check the current interval & retention:
SQL> select con_id, dbid, snap_interval, retention from cdb_hist_wr_control order by con_id; CON_ID DBID SNAP_INTERVAL RETENTION ---------- ---------- -------------------- -------------------- 0 1718803653 +00000 01:00:00.0 +00008 00:00:00.0 3 1593504508 +00000 01:00:00.0 +00008 00:00:00.0 Now change the interval to 15 mins and retention for 15 days (21600 mins):
SQL> show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 ORCLPDB READ WRITE NO SQL> SQL> begin dbms_workload_repository.modify_snapshot_settings( interval => 15, retention => 21600 ); end; / PL/SQL procedure successfully completed. SQL> select con_id, dbid, snap_interval, retention from cdb_hist_wr_control order by con_id; CON_ID DBID SNAP_INTERVAL RETENTION ---------- ---------- -------------------- -------------------- 0 1718803653 +00000 00:15:00.0 +00015 00:00:00.0 3 1593504508 +00000 01:00:00.0 +00008 00:00:00.0 SQL> alter session set container=ORCLPDB; Session altered. SQL> begin dbms_workload_repository.modify_snapshot_settings( interval => 15, retention => 21600 ); end; / PL/SQL procedure successfully completed. SQL> select con_id, dbid, snap_interval, retention from cdb_hist_wr_control order by con_id; CON_ID DBID SNAP_INTERVAL RETENTION ---------- ---------- -------------------- -------------------- 3 1593504508 +00000 00:15:00.0 +00015 00:00:00.0 Now verify the interval & retention:
SQL> conn /as sysdba Connected. SQL> select con_id, dbid, snap_interval, retention from cdb_hist_wr_control order by con_id; CON_ID DBID SNAP_INTERVAL RETENTION ---------- ---------- -------------------- -------------------- 0 1718803653 +00000 00:15:00.0 +00015 00:00:00.0 3 1593504508 +00000 00:15:00.0 +00015 00:00:00.0

For the AWR interval, the minimum value is 10 minutes. Retention is also tied to the baseline called MOVING_WINDOW, so retention must always be greater than the MOVING_WINDOW value — the next step walks through what happens when it isn't.

Step 3: Configure the AWR Baseline (Moving Window)

These errors are worth showing deliberately, since they illustrate the two hard constraints Oracle enforces: the interval floor of 10 minutes, and retention always needing to exceed the current moving-window baseline size.


Error while setting interval less than 10 mins:
SQL> begin dbms_workload_repository.modify_snapshot_settings( interval => 5, retention => 21600 ); end; / begin * ERROR at line 1: ORA-13511: invalid INTERVAL 5, must be in the range (10, 52560000) ORA-06512: at "SYS.DBMS_WORKLOAD_REPOSITORY", line 213 ORA-06512: at "SYS.DBMS_WORKLOAD_REPOSITORY", line 265 ORA-06512: at line 2 Check the current MOVING_WINDOW value & try to set retention below that:
SQL> col BASELINE_NAME for a30 SQL> select baseline_name, baseline_type, moving_window_size from dba_hist_baseline where baseline_type = 'MOVING_WINDOW'; BASELINE_NAME BASELINE_TYPE MOVING_WINDOW_SIZE ------------------------------ ------------- ------------------ SYSTEM_MOVING_WINDOW MOVING_WINDOW 8 SQL> begin dbms_workload_repository.modify_snapshot_settings( interval => 10, retention => 5760 -- 4 days ); end; / begin * ERROR at line 1: ORA-13541: system moving window baseline size (691200) greater than retention (345600) ORA-06512: at "SYS.DBMS_WORKLOAD_REPOSITORY", line 213 ORA-06512: at "SYS.DBMS_WORKLOAD_REPOSITORY", line 265 ORA-06512: at line 2 Change the MOVING_WINDOW value to 3 & then try to set retention:
SQL> begin dbms_workload_repository.modify_baseline_window_size( window_size => 3 ); end; / PL/SQL procedure successfully completed. SQL> select baseline_name, baseline_type, moving_window_size from dba_hist_baseline where baseline_type = 'MOVING_WINDOW'; BASELINE_NAME BASELINE_TYPE MOVING_WINDOW_SIZE ------------------------------ ------------- ------------------ SYSTEM_MOVING_WINDOW MOVING_WINDOW 3 SQL> SQL> begin dbms_workload_repository.modify_snapshot_settings( interval => 10, retention => 5760 -- 4 days ); end; / PL/SQL procedure successfully completed. SQL> SQL> select con_id, dbid, snap_interval, retention from cdb_hist_wr_control order by con_id; CON_ID DBID SNAP_INTERVAL RETENTION ---------- ---------- -------------------- -------------------- 0 1718803653 +00000 00:10:00.0 +00004 00:00:00.0 3 1593504508 +00000 00:15:00.0 +00015 00:00:00.0 SQL> Now to increase MOVING_WINDOW value, we first need to increase retention:
SQL> begin dbms_workload_repository.modify_baseline_window_size( window_size => 8 ); end; / begin * ERROR at line 1: ORA-13541: system moving window baseline size (691200) greater than retention (345600) ORA-06512: at "SYS.DBMS_WORKLOAD_REPOSITORY", line 1036 ORA-06512: at line 2 SQL> begin dbms_workload_repository.modify_snapshot_settings( interval => 15, retention => 21600 ); end; / PL/SQL procedure successfully completed. SQL> begin dbms_workload_repository.modify_baseline_window_size( window_size => 8 ); end; / PL/SQL procedure successfully completed. SQL> select baseline_name, baseline_type, moving_window_size from dba_hist_baseline where baseline_type = 'MOVING_WINDOW'; BASELINE_NAME BASELINE_TYPE MOVING_WINDOW_SIZE ------------------------------ ------------- ------------------ SYSTEM_MOVING_WINDOW MOVING_WINDOW 8 SQL> SQL> select con_id, dbid, snap_interval, retention from cdb_hist_wr_control order by con_id; CON_ID DBID SNAP_INTERVAL RETENTION ---------- ---------- -------------------- -------------------- 0 1718803653 +00000 00:15:00.0 +00015 00:00:00.0 3 1593504508 +00000 00:15:00.0 +00015 00:00:00.0 SQL>

The sequence here matters: raising MOVING_WINDOW_SIZE back to 8 failed until retention was raised first, because Oracle won't let the baseline window exceed the data it's actually retaining.

Generate a Manual AWR Snapshot

Step 4: Generate a Manual AWR Snapshot

Snapshots normally fire on the configured interval, but dbms_workload_repository.create_snapshot lets you force one immediately, useful right before or after a change you want captured in its own snapshot window.


Check the current time and genearted AWR snaps:
SQL> select current_timestamp from dual; CURRENT_TIMESTAMP --------------------------------------- 13-DEC-25 09.06.05.566286 PM +05:30 SQL> col BEGIN_INTERVAL_TIME for a30 SQL> col END_INTERVAL_TIME for a30 SQL> select snap_id, begin_interval_time, end_interval_time from dba_hist_snapshot order by snap_id desc; SNAP_ID BEGIN_INTERVAL_TIME END_INTERVAL_TIME ---------- ------------------------------ ------------------------------ 193 13-DEC-25 08.50.41.053 PM 13-DEC-25 09.00.42.594 PM 192 13-DEC-25 08.42.37.081 PM 13-DEC-25 08.50.41.053 PM 191 13-DEC-25 08.28.35.786 PM 13-DEC-25 08.42.37.081 PM 190 13-DEC-25 07.30.15.521 PM 13-DEC-25 08.28.35.786 PM 189 13-DEC-25 06.23.04.246 PM 13-DEC-25 07.30.15.521 PM 188 13-DEC-25 06.12.35.000 PM 13-DEC-25 06.23.04.246 PM 187 09-DEC-25 08.09.44.062 PM 09-DEC-25 09.30.41.431 PM 186 09-DEC-25 07.59.30.000 PM 09-DEC-25 08.09.44.062 PM 185 07-DEC-25 04.30.39.843 PM 07-DEC-25 05.30.49.750 PM 184 07-DEC-25 03.30.30.767 PM 07-DEC-25 04.30.39.843 PM 183 07-DEC-25 02.30.24.354 PM 07-DEC-25 03.30.30.767 PM 182 07-DEC-25 01.30.19.229 PM 07-DEC-25 02.30.24.354 PM 181 07-DEC-25 12.30.08.525 PM 07-DEC-25 01.30.19.229 PM 180 07-DEC-25 11.44.46.012 AM 07-DEC-25 12.30.08.525 PM 179 07-DEC-25 11.33.55.000 AM 07-DEC-25 11.44.46.012 AM 15 rows selected. SQL> Create a manual snap:
SQL> exec dbms_workload_repository.create_snapshot; PL/SQL procedure successfully completed. Check the created snap:
SQL> select snap_id, begin_interval_time, end_interval_time from dba_hist_snapshot order by snap_id desc; SNAP_ID BEGIN_INTERVAL_TIME END_INTERVAL_TIME ---------- ------------------------------ ------------------------------ 194 13-DEC-25 09.00.42.594 PM 13-DEC-25 09.07.55.166 PM 193 13-DEC-25 08.50.41.053 PM 13-DEC-25 09.00.42.594 PM 192 13-DEC-25 08.42.37.081 PM 13-DEC-25 08.50.41.053 PM 191 13-DEC-25 08.28.35.786 PM 13-DEC-25 08.42.37.081 PM 190 13-DEC-25 07.30.15.521 PM 13-DEC-25 08.28.35.786 PM 189 13-DEC-25 06.23.04.246 PM 13-DEC-25 07.30.15.521 PM 188 13-DEC-25 06.12.35.000 PM 13-DEC-25 06.23.04.246 PM 187 09-DEC-25 08.09.44.062 PM 09-DEC-25 09.30.41.431 PM 186 09-DEC-25 07.59.30.000 PM 09-DEC-25 08.09.44.062 PM 185 07-DEC-25 04.30.39.843 PM 07-DEC-25 05.30.49.750 PM 184 07-DEC-25 03.30.30.767 PM 07-DEC-25 04.30.39.843 PM 183 07-DEC-25 02.30.24.354 PM 07-DEC-25 03.30.30.767 PM 182 07-DEC-25 01.30.19.229 PM 07-DEC-25 02.30.24.354 PM 181 07-DEC-25 12.30.08.525 PM 07-DEC-25 01.30.19.229 PM 180 07-DEC-25 11.44.46.012 AM 07-DEC-25 12.30.08.525 PM 179 07-DEC-25 11.33.55.000 AM 07-DEC-25 11.44.46.012 AM 16 rows selected. SQL>

The row count moving from 15 to 16, with new snapshot 194 appearing at the top, confirms the manual snapshot was captured successfully.

Modify Tablespace for AWR

Step 5: Move AWR Data to a New Tablespace

AWR data lives in SYSAUX by default. Moving it to a dedicated tablespace keeps AWR's growth from crowding other SYSAUX-resident components, and makes AWR's actual disk usage easier to monitor on its own. This has to be done separately for the CDB and each PDB.


Checck current tablespace for AWR:
SQL> select dbid,CON_ID,TABLESPACE_NAME from dba_hist_wr_control; DBID CON_ID TABLESPACE_NAME ---------- ---------- ---------------------------------------------- 1718803653 0 SYSAUX SQL> show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 ORCLPDB READ WRITE NO SQL> alter session set container=ORCLPDB; Session altered. SQL> select dbid,CON_ID,TABLESPACE_NAME from dba_hist_wr_control; DBID CON_ID TABLESPACE_NAME ---------- ---------- ---------------------------------------------- 1718803653 0 SYSAUX 1593504508 3 SYSAUX Create a new tablespace for AWR in CDB:
SQL> show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 ORCLPDB READ WRITE NO SQL> SQL> create tablespace AWR datafile '/u01/app/oracle/oradata/ORCL/awr01.dbf' size 500m autoextend on; Tablespace created. SQL> Set new tablespace for AWR in CDB:
SQL> begin dbms_workload_repository.modify_snapshot_settings( tablespace_name=> 'AWR'); end; / PL/SQL procedure successfully completed. SQL> select dbid,CON_ID,TABLESPACE_NAME from dba_hist_wr_control; DBID CON_ID TABLESPACE_NAME ---------- ---------- ----------------------- 1718803653 0 AWR Create tablespace for PDB:
SQL> show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 3 ORCLPDB READ WRITE NO SQL> SQL> create tablespace AWRPDB datafile '/u01/app/oracle/oradata/ORCL/orclpdb/awrpdb01.dbf' size 500m autoextend on; Tablespace created. Set new tablespace for AWR in PDB:
SQL> begin dbms_workload_repository.modify_snapshot_settings( tablespace_name=> 'AWRPDB'); end; / PL/SQL procedure successfully completed. SQL> select dbid,CON_ID,TABLESPACE_NAME from dba_hist_wr_control; DBID CON_ID TABLESPACE_NAME ---------- ---------- ----------------- 1718803653 0 AWR 1593504508 3 AWRPDB SQL>

The final query confirms both containers now report their dedicated tablespaces — AWR for the CDB root, AWRPDB for the PDB — in place of the shared SYSAUX.

Purge Old Snapshots

Step 6: Purge a Range of AWR Snapshots

AWR snapshots normally purge automatically based on the configured retention, but dbms_workload_repository.drop_snapshot_range lets you manually purge a specific range, useful for reclaiming space immediately rather than waiting for the retention window to catch up.


Check current utilization of AWR snaps:
SQL> select tablespace_name,round(sum(bytes)/1024/1024,2) awr_used_mb from dba_segments where owner = 'SYS' and segment_name like 'WR%' group by tablespace_name; TABLESPACE_NAME AWR_USED_MB ------------------------------ ----------- SYSTEM 3.31 SYSAUX 128.56 AWR 2.69 SQL> select count(*) from dba_hist_snapshot; COUNT(*) ---------- 34 SQL> select min(snap_id), max(snap_id) from dba_hist_snapshot; MIN(SNAP_ID) MAX(SNAP_ID) ------------ ------------ 179 213 SQL> Drop set of AWR snaps:
SQL> begin dbms_workload_repository.drop_snapshot_range( low_snap_id => 179, high_snap_id => 200 ); end; / PL/SQL procedure successfully completed. SQL> select tablespace_name,round(sum(bytes)/1024/1024,2) awr_used_mb from dba_segments where owner = 'SYS' and segment_name like 'WR%' group by tablespace_name; TABLESPACE_NAME AWR_USED_MB ------------------------------ ----------- SYSTEM 3.31 SYSAUX 116.63 AWR 2.69 SQL> SQL> select min(snap_id), max(snap_id) from dba_hist_snapshot; MIN(SNAP_ID) MAX(SNAP_ID) ------------ ------------ 201 213

The SYSAUX figure dropping from 128.56 MB to 116.63 MB, along with the minimum snap ID moving from 179 to 201, confirms the purge freed space by removing exactly the requested range of old snapshots.



Thank you for reading!

I hope this content has been helpful to you. Your feedback and suggestions are always welcome. Feel free to leave a comment or reach out with any queries.

Abhishek Shrivastava

Oracle DBA with hands-on experience managing production Data Guard, RAC, GoldenGate, and APEX environments. I write practical, tested installation and troubleshooting guides based on real deployment work.

📧 Email: oraeasyy@gmail.com
🌐 Website: www.oraeasy.com

Follow Us

Comments

↑