表空間相關操作大全

表空間相關操作大全

表空間是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》。

發佈了2 篇原創文章 · 獲贊 1 · 訪問量 224
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章