Oracle邏輯結構

2021-04-26 13:01:44 字數 4135 閱讀 1712

oracle的邏輯結構包括表空間(tablespace),段(segment),資料塊(data block)以及模式物件(schema)。

一、表空間

1.什麼是表空間?

查詢表空間的檔案資訊:select * from dba_data_files。查詢表空間的空閒空間資訊:select * from dba_free_space。若表空間的剩餘空間不夠,可以重新設定資料檔案的大小:alter database datafile 'filenamespec' resize 500m。查詢資料庫中的表空間資訊:select * from dba_tablespace。

2.表空間的特性

a.限制使用者可以使用的磁碟空間大小

sql>alter user user1 quota 100m on tablespace1

d.優化i/o效能,應將表空間中的各資料檔案放在不同的磁碟以平衡i/o。

3.臨時表空間

臨時表空間用於為使用者排序的order by語句使用。建立資料庫時可以指定資料庫的預設臨時表空間。在建立使用者的時候可以指定使用者的預設臨時表空間。

sql>create user fey identified by 12345 temporary tablespace temp;

在oracle8i中,如果建立使用者時未指出使用者的臨時表空間,系統使用system表空間作為該使用者的臨時表空間。而在oracle10g中,如果建立使用者時未指出使用者的臨時表空間,系統使用temp表空間作為該使用者的臨時表空間。

4.基本表空間介紹

a. 系統表空間

主要存放資料字典和內部系統表基表

檢視資料資料字典的sql

select * from dict

檢視內部系統表的sql

select * from v$fixed_view_definition

dba對系統的系統表中的資料字典必須有乙個很深刻的了解,他們必須準備一些基礎的sql語句,通過這些sql可以立即了解系統的狀況和資料庫的狀態,這些基本的sql包括

系統的剩餘空間

系統的sga

狀態系統的等待

使用者的許可權

當前的使用者鎖

緩衝區的使用狀況等

在成為dba 的道路上我們不建議你過分的依賴於oem/quest 等優秀的資料庫管理工具,因為他們不利於你對資料資料字典的理解,sql語句可以完成幾乎全部的資料庫管理工作。

大量的讀少量的寫是該錶空間的乙個顯著的特點。

b. 臨時表空間.

臨時表空間顧名思義是用來存放臨時資料的,例如排序操作的臨時空間,他的空間會在下次系統啟動的時候全部被釋放。

c. 回滾段表空間

i. 回滾段在系統中的作用

當資料庫進行更新插入刪除等操作的時候,新的資料被更新到原來的資料檔案,而舊的資料(before image)就被放到回滾段中,如果資料需要回滾,那麼可以從回滾段將資料再複製到資料檔案中。來完成資料的回滾。在系統恢復的時候, 回滾段可以用來回滾沒有被commit 的資料,解決系統的一至性。

回滾段在什麼情況下都是大量的寫,一般是少量讀,因此建議把回滾段單獨出來放在乙個單獨的裝置(如單獨的磁碟或raid),以減少磁碟的io爭用。

ii. 回滾段的工作方式

·乙個回滾表空間可以被劃分成多個回滾段.

·乙個回滾段可以儲存多個會話的資料.

·回滾段是乙個圓形的資料模型

假設回滾段由4 個區間組成,他們的使用順序就是區間1à區間2à區間3à區間4à區間1。也就是說,區間是可以迴圈使用的,當區間4到區間1的時候,區間1裡面的會話還沒有結束, 區間4用完後就不能再用區間1,這時系統必須分配區間5,來繼續為其他會話服務服務。

我們分析乙個update 語句的完成

①. 使用者提交乙個update 語句

②. server process 檢查記憶體緩衝.

如果沒有該資料塊的緩衝,則從磁碟讀入

i. 如果沒有記憶體的有效空間,dbwr被啟動將未寫入磁碟的髒緩衝寫入磁碟

ii. 如果有有效空間,則讀入

③. 在緩衝內更新資料

i. 申請乙個回滾段入口,將舊資料寫如回滾段

ii. 加鎖並更新資料

iii. 並在同時將修改記錄在redo log buffer中

④. 使用者提交乙個commit 語句

i. scn增加

ii. 將redo log buffer 寫入redo log file

iii. 返回使用者commit 完成

二、段

段是物件在資料庫中占用的空間,雖然段和資料庫物件是一一對應的,但段是從資料庫儲存的角度來看的。乙個段只能屬於乙個表空間,當然乙個表空間可以有多個段。

表空間和資料檔案是物理儲存上的一對多的關係,表空間和段是邏輯儲存上的一對多的關係,段不直接和資料檔案發生關係。乙個段可以屬於多個資料檔案,關於段可以指定擴充套件到哪個資料檔案上面。

資料庫的段可以分為四類:資料段、索引段、回退段、臨時段。

1.資料段

資料段是用於儲存資料的段,他儲存在資料表空間中。每乙個表都有乙個資料段(聚簇除外),表的資料儲存在資料段中,預設情況下段名與表名相同。以下語句查詢段的資訊:

sql>select segmentname,tablespace,name,bytes,blocks from user_extents;

2.索引段

索引段用於儲存索引,以下語句查詢索引資訊:

sql>select * from all_indexs

sql>select * from user_indexs

3.回退段

回退段用於儲存使用者資料修改之前的值,因而可以在特定條件下回退資料。回退段與事務是一對多的關係,乙個事務只能使用乙個回退段,而乙個回退段可存放乙個或多個事務的回退資料。

在oracle8i及之前的版本中,管理回退段是項很複雜的工作,管理員需要根據每個事務的大小和事務數量來確定、計算回退段的數量及儲存引數,在oracle9i之後,oracle增加了undo表空間,由系統自動管理它。從此不再需要考慮對回退段的管理。引數undo_management決定資料庫使用的是回退段還是undo表空間,其值為auto表示使用undo表空間自動管理,manual表示手動管理回退段。

4.臨時段

臨時段用於order by語句的排序以及一些彙總。

三、區

表空間是資料庫中最大的邏輯單位,每乙個表空間由乙個或多個資料檔案組成,乙個資料檔案只能與乙個表空間相聯絡。每乙個資料庫都有乙個system表空間,該錶空間是在資料庫建立或資料庫安裝時自動建立的,用於儲存系統的資料字典表,程式系統單元,過程函式,包和觸發器等,也可用於儲存使用者資料表,索引物件。

關於extent的翻譯有多種解釋,有的譯作擴充套件,有的譯作盤區,我這裡通常譯為區間。在乙個段中可以存在多個區間,區間是為資料一次性預留的乙個較大的儲存空間,直到那個區間被用滿,資料庫會繼續申請乙個新的預留儲存空間,即新的區間,一直到段的最大區間數(max extent)或沒有可用的磁碟空間可以申請。

在oracle8i以上版本,理論上乙個段可以無窮個區間,但是多個區間對oracle卻是有效能影響的,oracle建議把資料分布在盡量少的區間上,以減少oracle的管理與磁頭的移動。

四、資料塊

資料塊是資料中中最小的資料組織單位與管理單位,是資料檔案磁碟儲存空間單位,也是資料庫i/o 的最小單位,資料塊大小由db_block_size引數決定,不同的oracle版本db_block_size的預設值是不同的。

9i以前的版本只能設定一種塊大小,在9i及10g中,可以設定多種塊大小,不同表空間可以指定不同的塊大小。

五、模式物件

模式物件是一種應用,包括:表、檢視、聚簇、索引序列生成器、同義詞、雜湊、程式單元、資料庫鏈等。模式物件以後在oracle schema專欄中詳細說明。

ORACLE邏輯結構

img 1 表空間 tablespace 表空間是資料庫中的基本邏輯結構,一系列資料檔案的集合。乙個表空間可以包含多個資料檔案,但是乙個資料檔案只能屬於乙個表空間。2 段 segment 段是物件在資料庫中占用的空間,雖然段和資料庫物件是一一對應的,但段是從資料庫儲存的角度來看的。乙個段只能屬於乙個...

oracle邏輯結構

對於我們在資料庫裡新建資料庫 database 在資料庫中建立多個表空間 tablespace 在每個表空間內建表。例如我們可以分配多個使用者,在user1使用者下建立table1,table2,user2下建立table3,table4,user1 user2就等於不同的表空間,table1 ta...

Oracle邏輯儲存結構

一 資料塊 data blocks 資料塊是oracle 資料庫邏輯儲存結構中的最小單位,也是執行資料庫輸入輸出的最小儲存單位。通常 oracle 資料塊是作業系統塊的整數倍。資料塊的標準大小被寫入到初始化引數 db block size 中,oracle 允許在同乙個資料庫中存在不同大小的資料塊,...