Oracle 19c 如何将awr相关组件转移到其它表空间?
如题,最近想将awr报告相关的东西都转移到其它自建的表空间中。而不占用sysaux表空间。请问如何实现
Oracle 19c 如何将awr相关组件转移到其它表空间?
如题,最近想将awr报告相关的东西都转移到其它自建的表空间中。而不占用sysaux表空间。请问如何实现
晚上好🌙🌙🌙
本答案参考通义千问
在 Oracle 19c 中,AWR(Automatic Workload Repository) 是存储数据库性能数据的重要组件,默认情况下它们存储在 SYSAUX 表空间中。如果你希望将 AWR 相关的组件转移到自定义的表空间中,以减少对 SYSAUX 的占用,可以通过以下步骤实现。
将 AWR 相关的表和索引从 SYSAUX 表空间迁移到新的自定义表空间(例如 NEW_TBS)。
首先需要确认哪些对象位于 SYSAUX 表空间中,尤其是 AWR 相关的对象。
SELECT tablespace_name, segment_type, owner, segment_name
FROM dba_segments
WHERE tablespace_name = 'SYSAUX'
AND segment_name LIKE 'WR%';
这将列出所有以 WR 开头的段,这些通常是 AWR 相关的表或索引。
确保你已经创建了目标表空间(如 NEW_TBS):
CREATE TABLESPACE NEW_TBS
DATAFILE '/u01/oradata/your_db/NEW_TBS.dbf'
SIZE 5G
AUTOEXTEND ON NEXT 1G MAXSIZE UNLIMITED
LOGGING
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO;
替换为你的实际路径和参数。
可以使用以下 SQL 查询出 AWR 相关的表:
SELECT table_name
FROM dba_tables
WHERE owner = 'SYS'
AND table_name LIKE 'WR%';
常见的 AWR 表包括:
WRH$SQLSTATWRH$SYSTEM_EVENTWRH$SESSION_STATWRH$SQL_PLANWRR$SQL_PLANWRH$SQLTEXTWRH$PARAMETER使用 ALTER TABLE MOVE 命令将表移动到新表空间:
ALTER TABLE SYS.WRH$_SQLSTAT MOVE TABLESPACE NEW_TBS;
ALTER TABLE SYS.WRH$_SYSTEM_EVENT MOVE TABLESPACE NEW_TBS;
ALTER TABLE SYS.WRH$_SESSION_STAT MOVE TABLESPACE NEW_TBS;
ALTER TABLE SYS.WRH$_SQL_PLAN MOVE TABLESPACE NEW_TBS;
ALTER TABLE SYS.WRH$_SQLTEXT MOVE TABLESPACE NEW_TBS;
ALTER TABLE SYS.WRH$_PARAMETER MOVE TABLESPACE NEW_TBS;
注意:部分表可能有分区,需要使用
ALTER TABLE MOVE PARTITION。
AWR 表通常带有多个索引,也需要移动到新表空间:
ALTER INDEX SYS.I_WRH$_SQLSTAT_1 REBUILD TABLESPACE NEW_TBS;
ALTER INDEX SYS.I_WRH$_SYSTEM_EVENT_1 REBUILD TABLESPACE NEW_TBS;
ALTER INDEX SYS.I_WRH$_SESSION_STAT_1 REBUILD TABLESPACE NEW_TBS;
ALTER INDEX SYS.I_WRH$_SQL_PLAN_1 REBUILD TABLESPACE NEW_TBS;
ALTER INDEX SYS.I_WRH$_SQLTEXT_1 REBUILD TABLESPACE NEW_TBS;
ALTER INDEX SYS.I_WRH$_PARAMETER_1 REBUILD TABLESPACE NEW_TBS;
可以通过
dba_indexes查看所有 AWR 索引。
检查表和索引是否已成功移动到新表空间:
SELECT tablespace_name, segment_type, owner, segment_name
FROM dba_segments
WHERE segment_name LIKE 'WR%'
AND tablespace_name = 'NEW_TBS';
如果不再需要保留旧表空间中的 AWR 数据,可以考虑删除旧数据:
-- 删除旧表数据(谨慎操作)
DELETE FROM SYS.WRH$_SQLSTAT;
-- 或者直接截断表
TRUNCATE TABLE SYS.WRH$_SQLSTAT;
不建议直接删除,因为 AWR 报告可能依赖历史数据。
WR$、WRR$ 等,否则可能导致 AWR 功能异常。NEW_TBS)如果你不想手动迁移,也可以考虑使用 Oracle 提供的工具如 DBMS_AWR 或 AWR Report 来辅助管理 AWR 数据,但这些工具本身不会改变表空间。
如有更多关于 AWR 的配置问题,欢迎继续提问!