yurui05 2025-08-17 21:45 采纳率: 0%
浏览 7

Oracle 19c 如何将awr相关组件转移到其它表空间

Oracle 19c 如何将awr相关组件转移到其它表空间?

如题,最近想将awr报告相关的东西都转移到其它自建的表空间中。而不占用sysaux表空间。请问如何实现

  • 写回答

6条回答 默认 最新

  • 檀越@新空间 2025-08-17 21:46
    关注

    晚上好🌙🌙🌙
    本答案参考通义千问

    在 Oracle 19c 中,AWR(Automatic Workload Repository) 是存储数据库性能数据的重要组件,默认情况下它们存储在 SYSAUX 表空间中。如果你希望将 AWR 相关的组件转移到自定义的表空间中,以减少对 SYSAUX 的占用,可以通过以下步骤实现。


    目标:

    将 AWR 相关的表和索引从 SYSAUX 表空间迁移到新的自定义表空间(例如 NEW_TBS)。


    🔧 操作步骤

    1. 确认当前 AWR 所在的表空间

    首先需要确认哪些对象位于 SYSAUX 表空间中,尤其是 AWR 相关的对象。

    SELECT tablespace_name, segment_type, owner, segment_name
    FROM dba_segments
    WHERE tablespace_name = 'SYSAUX'
    AND segment_name LIKE 'WR%';
    

    这将列出所有以 WR 开头的段,这些通常是 AWR 相关的表或索引。


    2. 创建新的表空间(如果尚未创建)

    确保你已经创建了目标表空间(如 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;
    

    替换为你的实际路径和参数。


    3. 迁移 AWR 表到新表空间

    a. 获取 AWR 相关的表名

    可以使用以下 SQL 查询出 AWR 相关的表:

    SELECT table_name
    FROM dba_tables
    WHERE owner = 'SYS'
    AND table_name LIKE 'WR%';
    

    常见的 AWR 表包括:

    • WRH$SQLSTAT
    • WRH$SYSTEM_EVENT
    • WRH$SESSION_STAT
    • WRH$SQL_PLAN
    • WRR$SQL_PLAN
    • WRH$SQLTEXT
    • WRH$PARAMETER

    b. 移动表到新表空间

    使用 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

    c. 重建索引

    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 索引。


    4. 验证迁移结果

    检查表和索引是否已成功移动到新表空间:

    SELECT tablespace_name, segment_type, owner, segment_name
    FROM dba_segments
    WHERE segment_name LIKE 'WR%'
    AND tablespace_name = 'NEW_TBS';
    

    5. 清理旧数据(可选)

    如果不再需要保留旧表空间中的 AWR 数据,可以考虑删除旧数据:

    -- 删除旧表数据(谨慎操作)
    DELETE FROM SYS.WRH$_SQLSTAT;
    -- 或者直接截断表
    TRUNCATE TABLE SYS.WRH$_SQLSTAT;
    

    不建议直接删除,因为 AWR 报告可能依赖历史数据。


    ⚠️ 注意事项

    • 不要移动系统核心对象,例如 WR$WRR$ 等,否则可能导致 AWR 功能异常。
    • 确保新表空间有足够的空间,避免因空间不足导致错误。
    • 建议在维护窗口执行此操作,以免影响生产环境性能。
    • 备份重要数据,防止意外丢失。

    🛠️ 总结:迁移 AWR 到新表空间的步骤

    1. 确认 AWR 表和索引所在的表空间
    2. 创建新的表空间(如 NEW_TBS
    3. 将 AWR 表移动到新表空间
    4. 将 AWR 索引也移动到新表空间
    5. 验证迁移结果
    6. 可选:清理旧表空间数据

    💡 提示

    如果你不想手动迁移,也可以考虑使用 Oracle 提供的工具如 DBMS_AWRAWR Report 来辅助管理 AWR 数据,但这些工具本身不会改变表空间。


    如有更多关于 AWR 的配置问题,欢迎继续提问!

    评论

报告相同问题?

问题事件

  • 创建了问题 8月17日