在ORACLE數據庫中,所有數據從邏輯結構上看都是存放在表空間當中,當然表空間下還有段、區、塊等邏輯結構。從物理結構上看是放在數據文件中。一個表空間可由多個數據文件組成。系統中默認創建的幾個表空間:SYSTEM,SYSAUX,USERS,UNDOTBS1,EXAMPLE,TEMP還有用戶自己建立的表空間,可以對其進行分成三類
永久表空間 存放永久性數據,如表,索引等。
臨時表空間 不能存放永久性對象,用於保存數據庫排序,分組時產生的臨時數據。
UNDO表空間 保存數據修改前的鏡象。
我們可以通過下面幾個系統視圖查看基本信息:
--包含數據庫中所有表空間的描述信息
SELECT * FROM DBA_TABLESPACES
--包含當前用戶的表空間的描敘信息
SELECT * FROM USER_TABLESPACES
--包含從控制文件中獲取的表空間名稱和編號信息
SELECT * FROM V$TABLESPACE;
查看數據文件
--包含數據文件以及所屬的表空間的描述信息
SELECT * FROM DBA_DATA_FILES
--包含臨時數據文件以及所屬的表空間的描述信息
SELECT * FROM DBA_TEMP_FILES
--包含從控制文件中獲取的數據文件的基本信息,包括它所屬的表空間名稱、編號等
SELECT * FROM V$DATAFILE
--包含所有臨時數據文件的基本信息
SELECT * FROM V$TEMPFILE
可以使用以下腳本查看數據庫表空間使用情況:
SQL1:
SELECT DBF.TABLESPACE_NAME,
DBF.TOTALSPACE "總量(M)",
DBF.TOTALBLOCKS AS 總塊數,
DBF.TOTALSPACE-DFS.FREESPACE "使用量(M)",
DBF.TOTALBLOCKS-DFS.FREEBLOCKS 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);
SQL2:
SELECT A.TABLESPACE_NAME,
A.BYTES/ 1024 / 1024 TOTAL,
B.BYTES/ 1024 / 1024 USED,
C.BYTES/ 1024 / 1024 FREE,
(B.BYTES * 100) / A.BYTES "% USED ",
(C.BYTES * 100) / A.BYTES "% FREE "
FROM SYS.SM$TS_AVAIL A, SYS.SM$TS_USED B, SYS.SM$TS_FREE C
WHERE A.TABLESPACE_NAME = B.TABLESPACE_NAME
AND A.TABLESPACE_NAME = C.TABLESPACE_NAME;
SQL3:
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.此表空間是大文件表空間
oracle引入了大文件表空間的概念,正常表空間的數據文件可以有很多個,每個大小最大為32G,而大文件表空間的數據文件只有一個,所以如果該表空間是大文件表空間的話,則無法增加數據文件,只能增加文件大小。
select bigfile from dba_tablespaces where tablespace_name='表空間名稱'-----------------返回 YES 則是大文件表空間,返回NO,就是普通的表空間(小文件的)。
一般來說大數據文件表空間都是自動擴展的,不需要手動增加大小,
select * from dba_data_files------------里面有個autoextensible 字段,表示是否自動擴展;maxblocks 表示每次自動擴展多大
如若不是,則需要增加數據文件大小來增加表空間
先查看表空間的名字及文件所在位置:
select tablespace_name, file_id, file_name,
round(bytes/(1024*1024),0) total_space
from dba_data_files
order by tablespace_name
增大所需表空間大小:
alter database datafile '表空間位置'resize 新的尺寸
例如:
alter database datafile '\oracle\oradata\test.dbf' resize 4000m
2.此表空間是普通文件表空間
此類型的表空間增加有2種方法,一種是為表空間增加數據文件,另一種方法是增加表空間原有數據文件尺寸。
兩種方法,一種是為表空間增加數據文件:
代碼如下:
alter tablespace users add datafile '/opt/oracle/oradata/esop/test02.dbf' size 200M;
另一種方法是增加表空間原有數據文件尺寸:
代碼如下:
alter database datafile '/opt/oracle/oradata/esop/test01.dbf' resize 200M;
一般情況下,表空間增長都設置為自動,可以用參數設置
增加表空間的方式增加:
alter tablespace 表空間名稱 add datafile 表空間存放路徑 size 表空間大小 autoextend on next 增長的大小 maxsize 空間最大值(如果不限制空間最大值就用unlimited)
修改表空間的方式增加:
alter database datafile 表空間文件路徑 AUTOEXTEND(自動擴展) ON NEXT 表空間滿后增加的大小
增加完后可以再用上述的腳本再進行查詢可以發現表空間大小的改變!