oracle 資料庫裡檢視錶空間使用狀況;

itpub120發表於2007-06-19
oracle表空間的事情狀況要經常檢視,一般空閒比例過低的時候就應該考慮增大表看空間了。檢視方法如下SQL:[@more@]

方法一:

select dbf.tablespace_name,
dbf.totalspace "總量(M)",
dbf.totalblocks as 總塊數,
dfs.freespace "剩餘總量(M)",
dfs.freeblocks "剩餘塊數",
(dfs.freespace / dbf.totalspace) * 100 "空閒比例"
from (select t.tablespace_name,
sum(t.bytes) / 1024 / 1024 totalspace,
sum(t.blocks) totalblocks
from dba_data_files t
group by t.tablespace_name) dbf,
(select tt.tablespace_name,
sum(tt.bytes) / 1024 / 1024 freespace,
sum(tt.blocks) freeblocks
from dba_free_space tt
group by tt.tablespace_name) dfs
where trim(dbf.tablespace_name) = trim(dfs.tablespace_name)

方法二:

SELECT Total.name "Tablespace Name",
Free_space, (total_space-Free_space) Used_space, total_space
FROM
(select tablespace_name, sum(bytes/1024/1024) Free_Space
from sys.dba_free_space
group by tablespace_name
) Free,
(select b.name, sum(bytes/1024/1024) TOTAL_SPACE
from sys.v_$datafile a, sys.v_$tablespace B
where a.ts# = b.ts#
group by b.name
) Total
WHERE Free.Tablespace_name = Total.name

當發現有的表空間不夠的錯誤時,處理如下:
1:找出該表空間對應的資料檔案及路徑

select * from dba_data_files t
where t.tablespace_name = 'ARD'

2:增大資料檔案

alter database datafile '全路徑的資料檔名稱' resize ***M

3:增加資料檔案

alter tablespace 表空間名稱

add datafile '全路徑的資料檔名稱' size ***M

註解:表空間儘量讓free百分比保持在10%以上,如果低於10%就增加datafile或者resizedatafile,一般資料檔案不要超過2G
如果表空間剩餘足夠,還是提示ORA-01653的錯誤,可以檢視資料檔案是否自動擴充套件,如下sql:
SELECT T.TABLESPACE_NAME,
       D.FILE_NAME,
       D.AUTOEXTENSIBLE,
       D.BYTES,
       D.MAXBYTES,
       D.STATUS
  FROM DBA_TABLESPACES T, DBA_DATA_FILES D
 WHERE T.TABLESPACE_NAME = D.TABLESPACE_NAME
 ORDER BY TABLESPACE_NAME, FILE_NAME;
然後將資料檔案改成自動擴充套件:如下sql
ALTER DATABASE
    DATAFILE '/u01/app/oracle/oradata/bieeprd/BI_DATA04' AUTOEXTEND
ON NEXT 50M MAXSIZE UNLIMITED 

4:檢查tablespace的free空間能不能滿足最大的next_extent,不能則擴充套件tablespace

select s.owner,s.segment_name,s.segment_type,s.tablespace_name, s.next_extent
from dba_segments s
where s.next_extent > (select MAX(f.bytes)
from dba_free_space f
where f.tablespace_name = s.tablespace_name)
order by s.tablespace_name

5:臨時表空間不夠得處理辦法

查詢臨時表空間資訊,如下兩個檢視裡面可以:

select * from dba_temp_files;

select * from v$tempfile

空間不夠可以透過如下三種方法增大空間:

方法一、增大臨時檔案大小:
SQL> alter database tempfile ‘/u01/app/oracle/oradata/orcl/temp01.dbf’ resize 100m;

方法二、將臨時資料檔案設為自動擴充套件:
SQL> alter database tempfile ‘/u01/app/oracle/oradata/orcl/temp01.dbf’ autoextend on next 5m maxsize unlimited;
方法三、向臨時表空間中新增資料檔案:
SQL> alter tablespace temp add tempfile ‘/u01/app/oracle/oradata/orcl/temp02.dbf’ size 100m;

一般不用方法2,不要將臨時表空間無限擴充套件;


6:建立臨時表空間

建立臨時表空間:
SQL> create temporary tablespace temp1 tempfile '/u01/app/oracle/oradata/orcl/temp11.dbf' size 10M;
7:更改系統的臨時表空間

更改系統的預設臨時表空間:
SQL> alter database default temporary tablespace temp1;

8:更改某一使用者的臨時表空間:
SQL> alter user scott temporary tablespace temp;

有些表空間它雖然空閒百分比是90,但它只有不到9m的空閒空間,而CUG_INCIDNT_ATTR_VALS_B的nextextent是33554432
,33m,這種情況不是看百分比的,而是要比較free空間大小跟nextextent,也可以將表或者索引的next extent縮小,這個要看具體 決定了

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8109090/viewspace-919368/,如需轉載,請註明出處,否則將追究法律責任。

相關文章