表空間相關操作大全
表空間是Oracle將相關邏輯結構分組在一起的數據庫存儲單元。數據庫數據文件存儲在表空間中。表空間(tablespaces)實際上是一個邏輯的概念,在物理上是並不存在的。DBA在日常管理中,表空間的管理尤爲重要,關乎數據安全。本篇博客整理了一些表空間的相關操作。
系統重要表空間介紹
1.1 SYSTEM,系統表空間,存放關於表空間名稱、控制文件、數據文件等管理信息,存放着方案對象(如表,索引,同義詞,序列)的定義信息,存放着所有pl/sql 程序(如過程,函數,包,觸發器)的源代碼,是oracle數據庫中最重要的表空間。它屬於SYS和SYSTEM方案,僅被SYS和SYSTEM或其他具有足夠權限的用戶使用。即使是SYS 和SYSTEM用戶也不能刪除或重命名該空間。
自動管理,如發現空間佔據70%以上,可考慮添加數據文件
1.2 SYSAUX,系統輔助表空間,用於減少system表空間的負荷,提高系統的工作效率
1.3 TEMP ,臨時表空間,存放臨時表和臨時數據,用於排序。每個數據庫都應該有一個(或創建一個)臨時表空間,以便在創建用戶時將其分配給用戶,否則就會將TEMP表空間作爲臨時表空間。
1.4 UNDOTBS,重做表空間,存放數據庫的有關重做的相關信息和數據,日誌切換頻繁時需添加數據文件
1.5 REDO,Oracle通過Redo來保證數據庫的事務可以被重演,從而使得在故障之後,數據可以被恢復。Redo對於Oracle數據庫來說至關重要。在數據庫中,Redo的功能主要通過3個組件來實現:Redo Log Buffer、LGWR後臺進程和Redo Log File(在歸檔模式下,Redo Log File最終會經由ARCn進程寫出爲歸檔日誌文件)。
1.6 USERS,用戶表空間,存放永久性的用戶對象的數據和私有信息,因此也被稱爲數據表空間。每個數據庫都應該有一個(或創建一個)用戶表空間,以便在創建用戶時將其分配給用戶,否則將會使用SYSTEM表空間來保存數據。
1.創建表空間操作
--標準格式
CREATE TABLESPACE lmtbsb
LOGGING DATAFILE
'/u02/oracle/data/lmtbsb01.dbf'
SIZE 32M AUTOEXTEND ON
NEXT 32M MAXSIZE 2048M
EXTENT MANAGEMENT LOCAL;
--創建非標準128K擴展區的表空間
CREATE TABLESPACE lmtbsb
LOGGING DATAFILE
'/u02/oracle/data/lmtbsb01.dbf'
SIZE 50M
EXTENT MANAGEMENT LOCAL
UNIFORM SIZE 128K;
--SET LONG 10000
SELECT DBMS_METADATA.GET_DDL('TABLESPACE',TABLESPACE_NAME)
FROM DBA_TABLESPACES
WHERE TABLESPACE_NAME='USERS';
2. 表空間查詢操作
2.1 查詢表空間使用情況
--包含自動擴展和非自動擴展表空間使用情況,比例等,DBA常用查詢
--set linesize 4000
--set pagesize 2000
select a.tablespace_name,a.autoextensible,
round(a.bytes_alloc / 1024 / 1024/1024) alloc_GB,
round((a.bytes_alloc - nvl(b.bytes_free, 0)) / 1024 / 1024/1024) used_GB,
round((a.bytes_alloc - nvl(b.bytes_free, 0)) * 100 /
a.maxbytes) used_of_max,
round((a.maxbytes - a.bytes_alloc + nvl(b.bytes_free, 0)) /
1048576/1024) free_of_max_GB,
round(a.maxbytes / 1048576/1024) max_GB,
round(((a.maxbytes - a.bytes_alloc + nvl(b.bytes_free, 0))/a.maxbytes*100),2) ratio
from (select f.tablespace_name,f.autoextensible,
sum(f.bytes) bytes_alloc,
sum(decode(f.autoextensible,
'YES',
f.maxbytes,
'NO',
f.bytes)) maxbytes
from dba_data_files f
group by tablespace_name,autoextensible) a,
(select f.tablespace_name, sum(f.bytes) bytes_free
from dba_free_space f
group by tablespace_name) b, dba_tablespaces
where a.tablespace_name = b.tablespace_name and a.tablespace_name=dba_tablespaces.tablespace_name;
2.2 查詢數據文件
-- 查詢某個表空間的數據文件
SELECT * FROM DBA_DATA_FILES WHERE TABLESPACE_NAME = 'USER';
-- 查詢臨時表空間數據文件
SELECT * FROM DBA_TEMP_FILES D;
2.3 查詢表空間下用戶信息
-- 查詢表空間下面所有的用戶
SELECT DISTINCT S.OWNER
FROM DBA_SEGMENTS S
WHERE S.TABLESPACE_NAME ='TABLESPACENAME';
--查看用戶默認表空間、臨時表空間:
SELECT USERNAME,TEMPORARY_TABLESPACE,
DEFAULT_TABLESPACE
FROM DBA_USERS;
2.4 查詢表空間下所有對象
--刪除表空間前查詢表空間下所有對象
SELECT TABLESPACE_NAME AS TABLESPACE_NAME ,
SEGMENT_NAME AS SEGMENT_NAME ,
SUM(BYTES)/1024/1024 AS SEGMENT_SIZE
FROM DBA_SEGMENTS
WHERE TABLESPACE_NAME='TABLESPACENAME'
GROUP BY TABLESPACE_NAME,SEGMENT_NAME
ORDER BY 3
--ORDER BY 3 按照第三列(SEGMENT_SIZE)排序
2.5 查詢表空間的日誌模式
--使用OGG軟件數據同步時需要開啓logging
SELECT TABLESPACE_NAME,LOGGING
FROM DBA_TABLESPACES
WHERE TABLESPACE_NAME='TABLESPACENAME';
3. 表空間擴展操作
-- 直接修改原有數據文件大小,修改成32G,單個數據文件最大隻能32G
ALTER DATABASE DATAFILE '/ORADATA/XXX.DBF' RESIZE 32G;
-- 給表空間增加數據文件
ALTER TABLESPACE DATA_ODS
ADD DATAFILE '/oradata/xxx.dbf'
SIZE 1G AUTOEXTEND ON
NEXT 8M MAXSIZE 30G;
4. 表空間刪除操作
--刪除users表空間,包含目錄
DROP TABLESPACE users INCLUDING CONTENTS;
--刪除users表空間,包含目錄和數據文件
DROP TABLESPACE users INCLUDING CONTENTS AND DATAFILES;
5. 表空間給用戶授權和配額
表空間存儲限制是用戶在某一個表空間中可以使用的存儲空間總數。 在創建或修改用戶時,可以由參數QUOTA指出。
若用戶在向表空間存儲數據時,超出了此限額,則會產生錯誤。 錯誤信息:ORA-01536:SPACE QUOTA EXCEEDED FOR TABLESPACE TABLESPACENAME…’。 可以通過查詢字典DBA_TS_QUOTAS查看錶空間限額信息。
--查看所有用戶表空間的配額情況
SELECT * FROM DBA_TS_QUOTAS;
--查看當前用戶表空間的配額情況
SELECT * FROM USER_TS_QUOTAS;
--更改用戶的表空間限額:
--全局:
GRANT UNLIMITED TABLESPACE TO ABC;
--針對某個表空間:
ALTER USER ABC QUOTA UNLIMITED ON TEST;
--回收:
REVOKE UNLIMITEDTABLESPACE FROM ABC;
ALTER USER ABCQUOTA 0 ON TEST;
如果沒得到你想要的答案,請移步至官方文檔《Managing Tablespaces》。