1. 程式人生 > >Oracle之資料庫邏輯結構基礎講解

Oracle之資料庫邏輯結構基礎講解

資料庫邏輯結構為資料塊(Data Block)、資料擴充套件(Extent)、和段(Segment); 物理結構為資料檔案。

  Block是最精細的資料儲存粒度,一個數據塊相當於磁碟上一段連續的物理儲存空間,oracle每次訪問資料的單位是block。

  Extent是為儲存資料而分配的一組連續的block,只能在一個數據檔案中

  Segment則是由一個或多個Extent。一張表可以看做是一個段,一個索引可以做作是一個段。檢視段的分類select distinct        segment_type from user_segments 。可以跨資料檔案

   資料邏輯上儲存表空間(Tablespace)中,而物理上則儲存於屬於表空間的資料檔案(data file)中。




oracle資料庫在邏輯上是由多個表間組成的。
表空間中儲存的物件叫段,比如資料段,索引段,和回退段。
段由區組成,區是磁碟分配的最小單位。段的增大是通過增加區的個數來實現的。每個區的大小是資料塊大小的整數倍,區的大小可以不相同;
資料塊是資料庫中最小的I/O單位,同時也是記憶體資料緩衝區的單位,及資料檔案儲存空間單位。塊的大小由引數DB_BLOCK_SIZE設定,其值應設定為作業系統塊大小的整數倍。
表空間:
表空間是Oracle資料庫最大的邏輯結構,一個Oracle資料庫在邏輯上由多個表空間組成,一個表空間只隸屬於一個數據庫。Oracle中有一個稱為SYSTEM的表空間,這個表空間是在建立或安裝資料庫時自動建立的。主要用於儲存系統的資料字典,過程,函式,觸發器等;也可以儲存使用者的表,索引等。一個表空間可以有多資料檔案,但是一個數據檔案只能屬於一個表空間。
一個表空間就是一片磁碟區域,他由一個或者多個磁碟檔案組成,一個表空間可以容納許多表、索引或者簇等。每個表空間有一個預製的磁碟區域稱為初始區間(initial   extent)用完這個區間後再用下一個,直到用完表空間,這時候需要對錶空間進行擴充套件,增加資料檔案或者擴大已經存在的資料檔案

Oracle中的段可以分成4種類型:資料段、索引段、回滾段、臨時段。
資料段用來儲存使用者的資料,每個表都有一個對應的回滾段,其名稱和資料表的名字相同。索引段用來儲存系統、使用者的索引資訊。回滾段用來儲存使用者資料修改前的值,回退段與事務是一對多的關係,一個事務只能使用一個回退段,而一個回退段可存放一個或多個事務的回退資料。臨時段用於order by語句的排序以及一些彙總。
區:
區是磁碟空間分配的最小單位。磁碟按區劃分,每次至少分配一個區。區儲存於段中,它由連續的資料塊組成。區的分配過程中,每次至分配5個區。
如果所剩的空閒空間不夠5個區,就會出現錯誤:ORA-01653
可以通過字典dba_tablespaces
查詢表空間中區的資訊。
可以通過字典user_tables查詢段中區的資訊。
可以通過字典user_extents查詢區的分配狀況。

小結:

1.資料庫有一個或多個表空間組成。 2.表空間有一個或多個數據檔案組成。 3.段(TABLE、INDEX)有一個或多個區段組成。段在表空間中,但是可以包含這個表空間中多個數據檔案中的資料。 4.區段是磁碟上一組邏輯連續的塊。區段只在一個表空間中,而且總是在改表空間內的一個檔案中。 5.塊是資料庫中最小的分配單元,也是資料庫使用的最小I/O單元。

我們可以通過以下SQL語句分別查詢表空間、段、區中區的分配資訊
SQL>select  *  from dba_tablespaces;
SQL>select table_name, tablespace_name, min_extents, max_extents from user_tables; 
SQL>select  *  from user_extents;
資料塊
資料塊是資料中中最小的資料組織單位與管理單位,是資料檔案磁碟儲存空間單位,也是資料庫I/O 的最小單位,資料塊大小由DB_BLOCK_SIZE引數決定,不同的oracle版本DB_BLOCK_SIZE的預設值是不同的。