久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Oracle數據庫標準的SYSAUX表空間清理方法是什么

170次閱讀
沒有評論

共計 4451 個字符,預計需要花費 12 分鐘才能閱讀完成。

這篇文章將為大家詳細講解有關 Oracle 數據庫標準的 SYSAUX 表空間清理方法是什么,文章內容質量較高,因此丸趣 TV 小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

概述

SYSAUX 表空間被稱為系統輔助表空間,是 10g 版本開始推出的新功能,主要的目的是為 SYSTEM 表空間減負,Oracle 對 SYSTEM 表空間的維護有一套獨立的體系,對 SYSTEM 表空間操作會占用額外的 CPU 資源,而且效率低下。在 10g 版本,增加了 SYSAUX 輔助表空間,將 EM、AWR 等組件的表從 SYSTEM 表空間挪到了 SYSAUX 表空間中,這樣大大減少了 SYSTEM 表空間的消耗,也減少了 Oracle 對 SYSTEM 表空間維護的成本。

下面介紹下最近清理 sysaux 表空間的過程,僅供參考。

1. 查詢 SYSTEM 和 SYSAUX 表空間的使用率

SELECT * FROM (SELECT D.TABLESPACE_NAME, SPACE ||  M   SUM_SPACE(M) , BLOCKS  SUM_BLOCKS , SPACE - NVL(FREE_SPACE, 0) ||  M   USED_SPACE(M) , ROUND((1 - NVL(FREE_SPACE, 0) / SPACE) * 100, 2) ||  %   USED_RATE(%) , FREE_SPACE ||  M   FREE_SPACE(M)  FROM (SELECT TABLESPACE_NAME, ROUND(SUM(BYTES) / (1024 * 1024), 2) SPACE, SUM(BLOCKS) BLOCKS FROM DBA_DATA_FILES GROUP BY TABLESPACE_NAME) D, (SELECT TABLESPACE_NAME, ROUND(SUM(BYTES) / (1024 * 1024), 2) FREE_SPACE FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME) F WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+) UNION ALL SELECT D.TABLESPACE_NAME, SPACE ||  M   SUM_SPACE(M) , BLOCKS SUM_BLOCKS, USED_SPACE ||  M   USED_SPACE(M) , ROUND(NVL(USED_SPACE, 0) / SPACE * 100, 2) ||  %   USED_RATE(%) , NVL(FREE_SPACE, 0) ||  M   FREE_SPACE(M)  FROM (SELECT TABLESPACE_NAME, ROUND(SUM(BYTES) / (1024 * 1024), 2) SPACE, SUM(BLOCKS) BLOCKS FROM DBA_TEMP_FILES GROUP BY TABLESPACE_NAME) D, (SELECT TABLESPACE_NAME, ROUND(SUM(BYTES_USED) / (1024 * 1024), 2) USED_SPACE, ROUND(SUM(BYTES_FREE) / (1024 * 1024), 2) FREE_SPACE FROM V$TEMP_SPACE_HEADER GROUP BY TABLESPACE_NAME) F WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+) ORDER BY 1) WHERE TABLESPACE_NAME IN (SYSAUX ,  SYSTEM

可見,SYSAUX 表空間已經使用了 43GB 左右,SYSTEM 表空間已經使用了 3GB 左右。

2. 查看下使用 SYSTEM 和 SYSAUX 表空間的比較大的表

select * from (select segment_name,PARTITION_NAME, sum(bytes) / 1024 / 1024 total_mb, tablespace_name from dba_segments where tablespace_name in (SYSTEM ,  SYSAUX) group by segment_name, tablespace_name order by 3 desc) where rownum  = 20;

可見,大表大部分都是 AUD$ 和 WRH$ 開頭的 AWR 基表,AUD$ 使用 SYSTEM 表空間,AWR 的基表使用 SYSAUX 表空間

3. 查看 SYSAUX 表空間的具體使用情況

這里可以通過 v$sysaux_occupants 視圖查詢到

SELECT occupant_name  Item , space_usage_kbytes / 1048576  Space Used (GB) , schema_name  Schema , move_procedure  Move Procedure  FROM v$sysaux_occupants ORDER BY space_usage_kbytes desc;

可見 SM/AWR 組件就使用了 40GB 的 SYSAUX 表空間,也就是說審計和 AWR 占用了大量的 SYSTEM 和 SYSAUX 表空間,而這些數據是可以定期清理的,都沒有必要保留太長的時間。

通過查看 v$sysaux_occupants 視圖,可以確定占用 SYSAUX 表空間過多的大部分都是 AWR 的基表,這樣只要刪除部分 AWR 數據理論上就可以回收一部分 SYSAUX 表空間,通常 AWR 的數據都會設置保留期限,10g 版本默認保留 7 天,11g 版本默認保留 8 天,可以通過 dba_hist_wr_control 視圖來查看 (注:并不是所有 DBA 開頭的表都是數據字典,也有很多是視圖,dba_hist_wr_control 就是視圖)

問題來了,AWR 的數據既然只保留七八天,為什么還會占用這么多的 SYSAUX 表空間呢? 這個問題其實有以下兩個原因,首先,AWR 刪除過期的數據是通過 DELETE 操作完成的,這樣就會產生大量的碎片,特別是 SYSAUX 表空間存在自動擴展的數據文件,而且這個數據文件沒有擴展到最大,還有擴展的空間情況下會很明顯,其次就是 ASH 的數據有些情況下是不受 AWR 的保留策略影響的。

4. 使用 dbms_workload_repository.drop_snapshot_range 刪除歷史數據 (不推薦)

--ASH 的數據從第一個快照開始一直都在保留,導致 WRH$_ACTIVE_SESSION_HISTORY 表很大,使用 DBMS_WORKLOAD_REPOSITORY 包  -- 清理過期或者不需要的 AWR 數據,可以回收這部分空間  select count(*) from WRH$_ACTIVE_SESSION_HISTORY; select min(snap_id),max(snap_id) from wrh$_active_session_history; exec DBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE (low_snap_id = 1,high_snap_id =  25100); select count(*) from WRH$_ACTIVE_SESSION_HISTORY;

清理了 AWR 數據之后,可以發現 SYSAUX 表空間的空間并沒有被回收,使用率還和之前一樣,這是因為清理 AWR 操作是通過 DELETE 操作實現的,表的水位線并沒有下降導致的。

5. 手工生成 truncate,需要在 SYS 下執行

select distinct  truncate table   || segment_name ||  , s.bytes/1024/1024 MB from dba_segments s where s.segment_name like  WRH$%  and segment_type in (TABLE PARTITION ,  TABLE) and s.bytes/1024/1024  100 order by s.bytes/1024/1024 desc;

實際執行 sql: 通過上面語句可以看到基本上都是以 WRH$_開頭的段,這些類型的段基本上都是與 AWR 相關的, 以下均以 sys 用戶執行

truncate table WRH$_SQL_BIND_METADATA;  mdash;- 保存 AWR 收集 SQL 綁定信息表  truncate table WRH$_ACTIVE_SESSION_HISTORY;  mdash; mdash; 保存 AWR 收集歷史會話信息表  select segment_name,partition_name,bytes/1024/1024/1024 gb from dba_segments where segment_name in(WRH$_LATCH , WRH$_SQLSTAT  alter table WRH$_LATCH truncate partition WRH$_LATCH_1013373590_0; alter table WRH$_SQLSTAT truncate partition WRH$_SQLSTA_1013373590_0; truncate table WRI$_ADV_SQLT_PLANS;  mdash; 保存 AWR 收集 SQL 建議計劃信息表  alter table WRH$_SYSSTAT shrink space; alter index WRH$_SYSSTAT_PK shrink space; alter table WRH$_LATCH shrink space; alter table WRH$_SEG_STAT shrink space; alter table WRH$_SQLSTAT shrink space; alter table WRH$_PARAMETER shrink space;  mdash;- 保存 AWR 收集參數信息表  alter index WRH$_PARAMETER_PK shrink space; truncate table WRH$_EVENT_HISTOGRAM; truncate table WRH$_SQL_PLAN;  mdash;- 保存 AWR 收集的 SQL 執行計劃表  truncate table WRH$_SQLTEXT;  ndash; mdash; 保存 AWR 收集的 SQL 文本表 

6. 驗證

達到需求,完。

關于 Oracle 數據庫標準的 SYSAUX 表空間清理方法是什么就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-17發表,共計4451字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 连南| 洪洞县| 汽车| 远安县| 双牌县| 滦平县| 江孜县| 顺平县| 江源县| 鄂伦春自治旗| 闽侯县| 迭部县| 太仓市| 天全县| 荃湾区| 平谷区| 格尔木市| 新泰市| 改则县| 澳门| 德庆县| 花莲市| 宿松县| 遵义市| 铜川市| 金塔县| 巴塘县| 泰来县| 县级市| 定日县| 沭阳县| 宜君县| 临猗县| 洮南市| 鸡东县| 贵南县| 子长县| 宜良县| 靖安县| 塘沽区| 锦州市|