什么是oracle表空間

oracle表空間是數據庫的邏輯劃分,是Oracle數據庫恢復的最小單位,容納著許多數據庫實體,如表、視圖、索引、聚簇、回退段和臨時段等。一個Oracle數據庫能夠有一個或多個表空間,而一個表空間則對應著一個或多個物理的數據庫文件。

什么是oracle表空間

本教程操作環境:Windows7系統、Oracle 11g版、Dell G3電腦。

一、概念

Oracle表空間(tablespaces)是一個邏輯的概念,真正存放數據的是數據文件(data files)。一個Oracle數據庫能夠有一個或多個表空間,而一個表空間則對應著一個或多個物理的數據庫文件。

表空間是Oracle數據庫恢復的最小單位,容納著許多數據庫實體,如表、視圖、索引、聚簇、回退段和臨時段等。

1、Oracle表空間的特性:

(1)控制數據庫數據磁盤分配;

(2)限制用戶在表空間中可以使用的磁盤空間大小;

(3)表空間具有 online, offline, readonly, readwrite屬性。

2、表空間的分類:

  • 永久表空間:數據庫中要永久化存儲的一些對象,如:表、視圖、存儲過程

  • 臨時表空間:數據庫操作當中中間執行的過程,執行結束后,存放的內容會被自動釋放

  • UNDO表空間:用于保存事務所修改數據的舊值,可以進行數據的回滾

? ? ?Segment(段)是指占用數據文件空間的通稱,或數據庫對象使用的空間的集合;段可以有表段、索引段、回滾段、臨時段和高速緩存段等。

? ? ?Extent(區間/擴展),分配給對象(如表)的任何連續塊叫區間;區間也叫擴展,因為當它用完已經分配的區間后,再有新的記錄插入就必須在分配新的區間(即擴展一些塊);一旦區間分配給某個對象(表、索引及簇),則該區間就不能再分配給其它的對象。

什么是oracle表空間
結構圖

什么是oracle表空間
datafile、segment、extend關系圖

二、相關視圖

select?*?from?dba_data_files;???--describes?database?files??數據文件信息 select?*?from?dba_temp_files;???--describes?all?temporary?files?(tempfiles)?in?the?database?臨時數據文件信息 select?*?from?dba_free_space;???--describes?the?free?extents?in?all?tablespaces?in?the?database?數據庫中所有表空間中的空閑擴展區 select?*?from?dba_segments;?????--describes?the?storage?allocated?for?all?segments?in?the?database?數據庫中的所有段分配的存儲

什么是oracle表空間

什么是oracle表空間

什么是oracle表空間

三、相關操作

1、創建表空間

--語法: create?[temporary]?tablespace?tablespace_name?tempfile|datafile?‘xx.dbf’?size?xx; --創建臨時表空間時,加上temporary關鍵字;

2、擴大表空間,當某個表空間被用完以后,就不能再對數據庫表進行insert操作,此時我們需要擴大表空間,即可通過增加datafile文件來擴大表空間。

select?f.*?from?dba_data_files?f?where?f.tablespace_name='MLT';--查看表空間信息  alter?tablespace?MLT?--表空間名 ?????add?datafile?'/home/oracle/oradata/crm/mlt04.dbf'??--datafile文件路徑 ?????size?100M?--表空間大小 ?????autoextend?on?--自動擴展

什么是oracle表空間

3、修改表空間的狀態

alter?tablespace?tablespace_name?online|offline;--表空間是脫機時不可用,默認是聯機的

4、刪除表空間

drop?tablespace?tablespace_name[including?contents]; --including?contents?表示刪除表空間包括datafile數據文件,不加則不刪除相關數據文件; --刪除數據文件時,不能刪除表空間當中第一個數據文件,如果要刪除就需要刪除整個表空間。

5、表空間使用情況查看

--查詢表空間使用情況SELECT?Upper(F.TABLESPACE_NAME)?????????"表空間名", ???????D.TOT_GROOTTE_MB?????????????????"表空間大小(M)", ???????D.TOT_GROOTTE_MB?-?F.TOTAL_BYTES?"已使用空間(M)", ???????To_char(Round((?D.TOT_GROOTTE_MB?-?F.TOTAL_BYTES?)?/?D.TOT_GROOTTE_MB?*?100,?2),?'990.99') ???????||?'%'???????????????????????????"使用比", ???????F.TOTAL_BYTES????????????????????"空閑空間(M)", ???????F.MAX_BYTES??????????????????????"最大塊(M)"FROM???(SELECT?TABLESPACE_NAME, ???????????????Round(Sum(BYTES)?/?(?1024?*?1024?),?2)?TOTAL_BYTES, ???????????????Round(Max(BYTES)?/?(?1024?*?1024?),?2)?MAX_BYTES ????????FROM???SYS.DBA_FREE_SPACE ????????GROUP??BY?TABLESPACE_NAME)?F, ???????(SELECT?DD.TABLESPACE_NAME, ???????????????Round(Sum(DD.BYTES)?/?(?1024?*?1024?),?2)?TOT_GROOTTE_MB ????????FROM???SYS.DBA_DATA_FILES?DD ????????GROUP??BY?DD.TABLESPACE_NAME)?DWHERE??D.TABLESPACE_NAME?=?F.TABLESPACE_NAME--查詢表空間的空閑擴展區select?tablespace_name,?count(*)?AS?extends,round(sum(bytes)?/?1024?/?1024,?2)?AS?大小/MB,sum(blocks)?AS?blocks?from?dba_free_space?group?BY?tablespace_name;--查詢表空間的總容量select?tablespace_name,?sum(bytes)?/?1024?/?1024?as?MB?from?dba_data_files?group?by?tablespace_name;--查詢表空間使用率SELECT?total.tablespace_name, ???????Round(total.MB,?2)???????????AS???總量/MB, ???????Round(total.MB?-?free.MB,?2)?AS??已使用/MB, ???????Round((?1?-?free.MB?/?total.MB?)?*?100,?2)?||?'%'??????????????????AS??使用率FROM???(SELECT?tablespace_name, ???????????????Sum(bytes)?/?1024?/?1024?AS?MB ????????FROM???dba_free_space ????????GROUP??BY?tablespace_name)?free, ???????(SELECT?tablespace_name, ???????????????Sum(bytes)?/?1024?/?1024?AS?MB ????????FROM???dba_data_files ????????GROUP??BY?tablespace_name)?totalWHERE??free.tablespace_name?=?total.tablespace_name;

推薦教程:《Oracle教程

以上就是什么是

? 版權聲明
THE END
喜歡就支持一下吧
點贊15 分享