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 允許在同乙個資料庫中存在不同大小的資料塊,...