溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

表空間檢測異常的問題診斷

發布時間:2020-08-09 09:45:52 來源:ITPUB博客 閱讀:192 作者:jeanron100 欄目:關系型數據庫

    不知道大家在工作中的表空間管理情況如何,大體會分為兩派。以前的公司我們更喜歡直接把空間都分配好,比如500G的容量規劃,那就提前準備500G,另外一類是我先給定200G,后續的空間就自動增長,反正容量還是500G。這個其實很大程度上就是個人習慣和公司流程規范的差別了。

   為什么這么說呢,因為我在一套環境上收到了一個奇怪的報警。

DBA:        IP: xxxx       Tablespace: PERFSTAT: 122.5%        [Critical!!]

    關鍵就在這個122.5%??雌饋砗懿徽?,如果這樣一個報警找不到問題的癥結,那么這個檢測表空間的腳本感覺還是有潛在的問題,或者說檢測的結果是會讓人質疑的。

   從我的了解,這個腳本用了很多年,之前還真沒碰到過問題?,F在的這套環境就偏偏拋出了錯誤,我們來挖掘一下。

    首先這個表空間檢測的腳本是使用我上面所說的第二種情況,即不斷的增大數據文件,給定一個最大值。其實這樣算出來不是實際的文件大小情況,和實際結果還是有出入的。

   如果要讓你檢測一下表孔家使用率該怎么做,很顯然我們可以根據數據文件的數據字典來得到一個當前值和文件最大值。

select tablespace_name,
               round(sum(bytes) / (1024 * 1024)) b,
               round(sum(decode(maxbytes, 0, bytes, maxbytes))/(1024 * 1024)) mb
          from dba_data_files
         group by tablespace_name;

另外還有一個視圖需要用,是dba_free_space,這個視圖的結果得到的是表空間的可用情況,這個視圖非常重要。內部會迭代調用一些數據字典來綜合得到一個表空間可用率的數據。

select tablespace_name, round(sum(bytes) / (1024 * 1024)) b
          from dba_free_space
         group by tablespace_name;

兩者結合起來,最大值減去可用值就是使用率了。我們看看dba_data_files的數值。

SQL> select file_name,bytes/1024/1024 size_MB ,maxbytes/1024/1024 max_MB from dba_data_files where  tablespace_name='PERFSTAT';
FILE_NAME                                             SIZE_MB     MAX_MB
-------------------------------------------------- ---------- ----
/U02/app/oracle/oradata/xxxx/perfstat01.dbf              3100       2000
/U02/app/oracle/oradata/xxxx/perfstat02.dbf             10240       2000

   看到這里感覺很奇怪。最大值maxsize竟然比當前值bytes還要低很多。

   看到這里感覺離bug不遠了。但是不管如何這個問題現在來看還不夠嚴重,我們先想辦法解決。

    一種思路就是修復一下,我們制定表空間最大值

SQL> alter tablespace perfstat autoextend on maxsize 14G;
alter tablespace perfstat autoextend on maxsize 14G
*
ERROR at line 1:
ORA-32773: operation not supported for smallfile tablespace PERFSTAT

沒想到這種模式不支持,oerr的幫助信息提示,我們可以使用alter database datafile的方式來改進。

  所以修復方式就是找到那個數據字典不一致的數據文件,重新做一下設置一下maxsize值。

SQL> alter database datafile '/U02/app/oracle/oradata/xxxx/perfstat02.dbf' autoextend on maxsize 12G;
Database altered.

這樣操作之后,再次查看表空間檢測腳本,就沒有問題了。

我在MOS上看了下,這個問題原來很常見。

Value in BYTES Column Greater than MAXBYTES Column in DBA_DATA_FILES (文檔 ID 197244.1)

文檔還寫出了樣例來模擬這個問題。

create tablespace tst
       datafile 'd:\oracle\tst01.dbf' size 5m autoextend on;
alter database datafile 'd:\oracle\tst01.dbf' autoextend on maxsize 10m;
alter database datafile 'd:\oracle\tst01.dbf' resize 20m;
select file_name, bytes, maxbytes, autoextensible from dba_data_files;
FILE_NAME                                     BYTES   MAXBYTES AUT
---------------------------------------- ---------- ---------- ---
D:\ORACLE\TST01.DBF                        20971520   10485760 YES

   看來問題的癥結就在于之前做了resize的操作導致。我的處理方式介于兩者之間,我喜歡創建一個初始大小的文件,然后resize到一個最大值??磥磉€是使用方式和習慣的不同在一些場景中會出現較大的偏差。








向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女