1. 程式人生 > >關於oracle資料庫段segment的總結

關於oracle資料庫段segment的總結

 段(segment)是一種在資料庫中消耗物理儲存空間的任何實體(一個段可能存在於多個數據檔案中,因為物理的資料檔案
 是組成邏輯表空間的基本物理儲存單位)

今天碰到一個高水位問題:

一個分割槽表,刪除某個分割槽中的一些資料後,表空間並沒有回收。

原因:

如果一個表不進行分割槽,那麼一個表就是在一個segment中。如果一個表進行多個分割槽,那麼每一個分割槽就在一個segment。如果delete掉其中一些資料,那麼空間是不會回收的

除非trunc掉這個分割槽。

解決辦法:

用匯出匯入分割槽交換的辦法,回收資料庫表空間。

--建立臨時表匯出某天資料

createtable temp_msgbody 

asselect*from im_msginfo_body partition(P_MSGINFO_BODY_20141213)

--清空匯出的分割槽

altertable im_msginfo_body truncatepartition P_MSGINFO_BODY_20141213

--分割槽交換,將資料倒回

ALTERTABLE im_msginfo_body EXCHANGEPARTITION P_MSGINFO_BODY_20141213WITHTABLE temp_msgbody withvalidation;

segment(段)概念:

段(segment)是一種在資料庫中消耗物理儲存空間的任何實體(一個段可能存在於多個數據檔案中,因為物理的資料檔案
 是組成邏輯表空間的基本物理儲存單位)

 更多的通用段是

 表(table),用來儲存行列結構的資料
 索引(Index),用來加快訪問速遞
 回滾(Rollback),在使用者事務期間和執行事務恢復期間用來維護讀一致性的特殊的段,回滾段會被宰第8章節管理一致和
  併發繼續說明
 分割槽(partition),為實現效能目標把表分成更小的更加容易管理的片。 


EXTENTS 是有由儲存空間連續的塊組成,但是每一個擴充套件只能駐留在單個數據檔案中

Database blocks 是orcacle中更小的塊,他作業系統塊組成。

OS塊


段是由擴充套件組成的,一到二億個擴充套件,由於每個擴充套件只能屬於單個數據檔案,所以段可以分佈在不同的資料檔案中,
擴充套件是由資料庫塊組成的,
每個擴充套件,資料庫塊是有作業系統塊組成。

表空間是為方便管理物理的分組模式物件(schema objects),表空間是物理結構(資料檔案和和擴充套件)和邏輯結構(表和索引)的橋樑,

訪問段可以用sql語言,c語言,cobol,java等語言。

一張只能佔用一個段的空間,當這個表的資料增加,段可以為表重新分配新的區,這樣空間就可以擴充套件了;
還有,一個段只屬於一個表空間,一個表空間可以有多個段;表空間和段是邏輯儲存結構上的一對多的關係;
表空間和資料檔案也是一對多的關係,段和資料檔案不是沒有直接關係;
但一個段可以屬於多個數據檔案;

所以當段空間不足時,也就是相當於表空間不足;只要你擴充套件表空間大小或新增資料檔案就可以了;