1.2、邏輯結構:描述數據庫從邏輯上如何存儲數據庫中的數據。它是從數據庫的角度來分析數據的邏輯存儲。常見的邏輯結構包括:表空間、數據段、擴展區間、塊構成。需要明白的是:
*1、數據庫邏輯上是由壹個或多個表空間組成的,常見的表空間包括:系統表空間、系統輔助表空間、UNDO表空間、臨時表空間、用戶表空間
*2、表空間與數據文件是物理上的壹對多的關系,既壹個表空間對應壹個或多個數據文件,但是壹個數據文件只能屬於壹個表空間
*3、表空間將數據庫的物理結構與邏輯結構相連接
2、物理結構
2.1、控制文件 (Control files):主要記錄數據庫的物理結構及其他的壹些控制信息,如數據庫的名稱、數據文件、日誌文件的名稱及位置。通常oracle會保留多個控制文件副本,並分別放在不同的物理位置,壹旦其中的某個控制文件損壞,則可以通可其它的副本進行啟動。
參數文件init.ora記錄了控制文件的位置
控制文件包括如下主要信息
6?1數據庫的名字,檢查點信息,數據庫創建的時間戳 6?1所有的數據文件,聯機日誌文件,歸檔日誌文件信息 6?1備份信息等有了這些信息,Oracle就知道那些文件是數據文件,現在的重做日誌文件是哪些,這些都是系統啟動和運行的基本條件,所以他是Oracle運行的根本。如果沒有控制文件系統是不可能啟動的。控制文件是非常重要的,壹般采用多個鏡相復制來保護控制文件,或采用RAID來保護控制文件。控制文件的丟失,將使數據庫的恢復變的很復雜。
控制文件信息可以從v$controlfile中查詢獲得
SQL> select * from v$controlfile;
STATUS NAME
------- --------------------------------------------------------------------------------
C:\ORACLE\ORADATA\ORCL\CONTROL01.CTL
C:\ORACLE\ORADATA\ORCL\CONTROL02.CTL
C:\ORACLE\ORADATA\ORCL\CONTROL03.CTL2.2、數據文件(Data files),註意可以與後面講到的表空間進行對比,數據文件的詳細信息記載在控制文件中。註意:SYSTEM表空間是不允許脫機的。在進行數據庫恢復時,很多時候需要先將故障數據文件脫機。
可以通過如下方式查看數據文件:
SQL> select name,status,enabled from v$datafile;
NAME STATUS ENABLED
-------------------------------------------------------------------------------- ------- ----------C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\SYSTEM01.DBF ONLINE READ WRITE
C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\UNDOTBS01.DBF ONLINE READ WRITE
C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\SYSAUX01.DBF ONLINE READ WRITE
C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\USERS01.DBF ONLINE READ WRITE
C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\EXAMPLE01.DBF ONLINE READ WRITE
C:\ORACLE\ORADATA\ORCL\TEMP01.DBF ONLINE READ WRITE
2.3、重做日誌文件(Redo files)用戶對數據庫進行的任何操作都會記錄在重做日誌文件。在了解重做日誌之前必須了解重做日誌的兩個概念,重做日誌組和重做日誌組成員(Member),壹個數據庫中至少要有兩個日誌組文件,壹組寫完後再寫另壹組,即輪流寫。每個日誌組中至少有壹個日誌成員,壹個日誌組中的多個日誌成員是鏡相關系,有利於日誌文件的保護,因為日誌文件的損壞,特別是當前聯機日誌的損壞,對數據庫的影響是巨大的。
聯機日誌組的交換過程叫做切換,需要特別註意的是,日誌切換在壹個優化效果不好的數據庫中會引起臨時的“掛起”。掛起大致有兩種情況:
6?1在歸檔情況下,需要歸檔的日誌來不及歸檔,而聯機日誌又需要被重新利用 6?1檢查點事件還沒有完成(日誌切換引起檢查點),而聯機日誌需要被重新利用解決這種問題的常用手段是:
i.增加日誌組
ii.增大日誌文件成員大小
通過v$log可以查看日誌組,v$logfile可以查看具體的成員文件。SQL> select group#,thread#,bytes,archived,members,archived,status from v$log; GROUP# THREAD# BYTES ARC MEMBERS ARC STATUS
---------- ---------- ---------- --- ---------- --- ----------------
1 1 10485760 NO 1 NO CURRENT
2 1 10485760 NO 1 NO INACTIVE
3 1 10485760 NO 1 NO INACTIVE2.4、歸檔日誌文件(Archived files)Oracle可以運行在兩種模式之中,歸檔模式和不歸檔模式。如果不用歸檔模式,當然,妳就不會有歸檔日誌,但是,妳的系統將不會是壹個實用系統,Oracle不能保證數據能夠被正確恢復,因為妳可能會丟失數據。但是在歸檔模式中,為了保存用戶的所有修改,在重做日誌文件切換後和被覆蓋之間系統將他們另外保存成壹組連續的文件系列,該文件系列就是歸檔日誌文件。
有人或許會說,歸檔日誌文件占領我大量的硬盤空間,其實,具體想壹想,妳是願意浪費壹點磁盤空間來保護妳的數據,還是願意丟失妳的數據呢?顯而義見,我們需要保證我們的數據的安全性。其實,歸檔並不是壹直占領妳的磁盤空間,妳可以把她備份到磁帶上,或則刪除上壹次完整備份前的所有日誌文件。2.5、初始化參數文件(Parameter file)initSID.ora或init.ora文件,因為版本的不壹樣,其位置也可能會不壹樣。在8i或10g中,通常位於$ORACLE_HOME/admin/<SID>/Pfile下
初始化文件記載了許多數據庫的啟動參數,如內存,控制文件,進程數等,在數據庫啟動的時候加載(Nomount時加載),初始化文件記錄了很多重要參數,對數據庫的性能影響很大,如果不是很了解,不要輕易亂改寫,否則會引起數據庫性能下降。2.6、其他文件i . 密碼文件。用於Oracle 的具有sysdba權限用戶的認證。文件壹般位於
$ORACLE_HOME/database/PWD<sid>.ora。
ii. 日誌文件?6?1報警日誌文件(alert.log或alrt<SID>.ora)
記錄數據庫啟動,關閉和壹些重要的出錯信息。數據庫管理員應該經常檢查這個文件,並對出現的問題作出即使的反應。妳可以通過以下SQL 找到他的路徑
select value from v$PARAMETER where name ='background_dump_dest';
VALUE
--------------------------------------------------------------------------------
C:\oracle\admin\orcl\bdump
6?1後臺或用戶跟蹤文件系統進程或用戶進程出錯前寫入的信息,壹般不可能讀懂,可以通過ORACLE的TKPROF工具轉化為可以讀懂的格式。對於系統進程產生的跟蹤文件與報警日誌文件的路徑壹樣,用戶跟蹤文件的路徑,妳可以通過以下SQL找到他的路徑
select value from v$PARAMETER where name ='user_dump_dest';
SQL> select value from v$PARAMETER where name ='user_dump_dest';VALUE
--------------------------------------------------------------------------------
C:\oracle\admin\orcl\udump3、邏輯結構
3.1、表空間(tablespace)
表空間是數據庫中的基本邏輯結構,壹系列數據文件的集合。壹個表空間可以包含多個數據文件,但是壹個數據文件只能屬於壹個表空間。3.2、 段(Segment)
段是對象在數據庫中占用的空間,雖然段和數據庫對象是壹壹對應的,但段是從數據庫存儲的角度來看的。壹個段只能屬於壹個表空間,當然壹個表空間可以有多個段。
表空間和數據文件是物理存儲上的壹對多的關系,表空間和段是邏輯存儲上的壹對多的關系,段不直接和數據文件發生關系。壹個段可以屬於多個數據文件,關於段可以指定擴展到哪個數據文件上面。
段基本可以分為以下四種
6?1數據段(Data Segment) 6?1索引段(Index Segment) 6?1回滾段(Rollback Segment) 6?1臨時段(Temporary Segment)3.3、區間(Extent)在壹個段中可以存在多個區間,區間是為數據壹次性預留的壹個較大的存儲空間,直到那個區間被用滿,數據庫會繼續申請壹個新的預留存儲空間,即新的區間,壹直到段的最大區間數(Max Extent)或沒有可用的磁盤空間可以申請。
在ORACLE8i以上版本,理論上壹個段可以無窮個區間,但是多個區間對ORACLE卻是有性能影響的,ORACLE建議把數據分布在盡量少的區間上,以減少ORACLE的管理與磁頭的移動,但是在某些特殊情況下,需要把壹個段分布在多個數據文件或多個設備上,適當的加多區間數也是有很大好處的。3.4、Oracle數據塊(Block)
ORACLE最基本的存儲單位,他是OS數據塊的整數倍。ORACLE的操作都是以塊為基本單位,壹個區間可以包含多個塊(如果區間大小不是塊大小的整數倍,ORACLE實際也擴展到塊的整數倍)。3.5、基本表空間介紹
3.5.1、系統輔助表空間(sysaux)
SYSAUX表空間在Oracle Database 10g中引入,作為SYSTEM表空間的輔助表空間.
以前壹些使用獨立表空間或系統表空間的數據庫組件現在在SYSAUX表空間中創建.
通過分離這些組件和功能,SYSTEM表空間的負荷得以減輕.反復創建壹些相關對象及組件引起SYSTEM表空間的碎片問題得以避免。
3.5.2、系統表空間(System)
該表空間包含的數據文件稱為系統數據文件。
該存放系統表和數據字典,壹般不放用戶的數據,但是用戶腳本,如過程,函數,包等卻是保存在數據字典中的。
名詞解釋:數據字典
數據字典是壹些系統表或視圖,他存放系統的信息,他包括數據庫版本,數據文件信息,表與索引等段信息,系統的運行狀態等各種和系統有關的信息和用戶腳本信息。數據庫管理員可以通過對數據字典的查詢,就可以了解到Oracle的運行狀態。
查看數據數據字典的SQL
select * from dict;
查看內部系統表的SQL
select * from v$fixed_view_definition;
大量的讀少量的寫是該表空間的壹個顯著的特點。再次提醒:該表空間不能脫機
3.5.3、 臨時表空間(Temporary)
該表空間包含的數據文件稱為臨時數據文件
主要存放用戶的排序等臨時數據,因為沒有辦法在壹個永久表空間上開辟臨時段,所以就必須有壹個臨時表空間,主要用於不能在內存上進行的排序操作。我們必須為用戶指定壹個臨時表空間。
臨時段占有的空間會在下次系統啟動的時候全部被釋放。
3.5.4、回滾段表空間(Rollback)
如果數據庫進行對數據的修改,那麽就必須使用回滾段,回滾段是用來臨時存放修改前的數據(UNDO)。回滾段通常都放在壹個單獨的表空間上(回滾表空間),避免表空間碎片化,這個表空間包含的數據文件就是回滾數據文件。在Oracle9i中,提供了單獨的表空間用於保存回滾段,不再需要手工幹預。
*1回滾段在系統中的作用
當數據庫進行更新插入刪除等操作的時候,新的數據被更新到原來的數據文件,而舊的數據(Before Image)就被放到回滾段中,如果數據需要回滾,那麽可以從回滾段將數據再復制到數據文件中。來完成數據的回滾。在系統恢復的時候, 回滾段可以用來回滾沒有被commit 的數據,解決系統的壹直性讀。
回滾段在什麽情況下都是大量的寫,壹般是少量讀,因此建議把回滾段單獨出來放在壹個單獨的設備(如單獨的磁盤或RAID),以減少磁盤的IO爭用。
*2、回滾段的工作方式
6?1壹個回滾表空間可以被劃分成多個回滾段. 6?1壹個回滾段可以保存多個會話的數據. 6?1回滾段是壹個圓形的數據模型3.5.5、用戶表空間(User)
其包含的數據文件稱為用戶數據文件
壹般是由用戶建立,來存取用戶數據的表空間,壹般有兩類常見的用戶型數據,數據和索引,壹般來說,如果條件許可的話,可以考慮放在不同的磁盤上。
3.5.6 例子表空間(example):例子表空間,可以不管。,它是數據庫在操作系統中的存儲位置。常見的物理結構包括:控制文件、數據文件、重作日誌文件、歸檔日誌文件、初始化參數文件、還有其它文件(密碼文件、報警日誌文件和後臺及用戶跟蹤文件)。