數據庫存儲結構:分為物理存儲結構和邏輯存儲結構。
物理存儲結構:操作系統層面如何組織和管理數據
邏輯存儲結構:Oracle數據庫內部數據組織和管理數據,數據庫管理系統層面如何組織和管理數據
存儲結構
在Oracle數據庫的存儲結構包括物理存儲結構和邏輯存儲結構。
物理存儲結構:主要用于描述Oracle數據庫外部數據的存儲,即在操作系統中如何組織和管理數據,與具體的操作系統有關;
邏輯存儲結構:主要描述Oracle數據庫內部數據的組織和管理方式,與操作系統沒有關系。 物理存儲結構是邏輯存儲結構在物理上的、可見的、可操作的、具體的體現形式。
Oracle的物理存儲結構 ? ? ?
物理存儲結構是指從物理角度分析數據庫的構成,即Oracle數據庫創建后所使用的操作系統文件。
Oracle邏輯存儲結構 ? ?
數據庫的邏輯結構是從邏輯的角度分析數據庫的構成,即創建數據庫后形成的邏輯概念之間的關系。
Oracle數據庫物理存儲結構 ? ? ? ? ?
Oracle 數據庫是一個相關操作系統文件的集合,Oracle 用它們來存儲相關的信息。物理存儲結構是指從物理角度分析Oracle數據庫創建后所使用的一系列操作系統文件。
物理存儲結構
各種文件的功能:
數據文件:用于存儲數據庫中的所有數據;
控制文件:用于記錄和描述數據庫的物理存儲結構信息;
重做日志文件:用于記錄外部程序(用戶)對數據庫的改變操作;
歸檔文件:用于保存已經寫滿的重做日志文件;
初始化參數文件:用于設置數據庫啟動時的參數初始值;
跟蹤文件:用于記錄用戶進程、數據庫后臺進程等的運行情況;
口令文件:用于保存具有SYSDBA,SYSOPER權限的用戶名和SYS用戶口令;
警告文件:用于記錄數據庫的重要活動以及發生的錯誤;
備份文件:用于存放數據庫備份所產生的文件。
Oracle物理結構主要包括以下三種文件類型:
數據文件 數據文件的擴展名為.DBF
控制文件 控制文件的擴展名為.CTL
重做日志文件 日志文件的擴展名為.LOG
數據文件
數據文件的內容
用于保存數據庫中所有數據的文件,擴展名為DBF。
Oracle數據庫中的每個數據文件都具有兩個文件號,用于唯一地確定一個數據文件。
絕對文件號:用于在整個數據庫范圍內唯一標識一個數據文件;
相對文件號:用于在表空間范圍內唯一標識一個數據文件。
數據文件與表空間的關系為(n:1)
數據文件的查看 ? ?
要了解oracle數據庫數據文件的信息,可以通過以下三種方式查詢。
操作系統路徑中
數據字典表 ? dba_data_files V$datafile
通過OEM查看
dba_data_files視圖字段說明
重做日志文件
重做日志文件的概念
在Oracle中,日志文件也叫做重做日志文件或重演日志文件(Redo Log Files)。
重做日志文件,保存了用戶對數據庫所作的更新操作(DDL、DML),包含的主要信息是記錄事務的開始和結束、事務中每項操作的對象和類型、更新操作前后的數據值等。
如果系統出現的故障,并且修改的數據沒有保存到數據文件中,那么就可以利用日志文件找到數據的修改,避免因為故障而丟失數據。
重做日志文件是由重做記錄構成的,每個重做記錄由一組修改相量組成。
修改向量記錄了對數據庫中某個數據塊所做的修改。
用戶對數據庫所做的修改記錄過程
1. 先記錄到重做日志緩沖區 當用戶進程發起數據修改請求(如插入、更新、刪除操作),服務器進程首先會把該操作的詳細信息(像修改的表名、行標識、舊值和新值等)記錄到重做日志緩沖區。這么做是為了確保在任何情況下(包括系統故障),對數據庫的修改操作都有跡可循,以保證數據的可恢復性和一致性。
2. 并行處理寫入日志文件與修改數據高速緩沖區 寫入重做日志文件:日志寫入進程(LGWR)會將重做日志緩沖區中的內容及時寫入重做日志文件。特別是在事務提交時,LGWR 會確保所有與該事務相關的重做日志記錄都被寫入磁盤上的重做日志文件,這是事務提交的一個關鍵步驟,因為只有當日志記錄安全存儲在磁盤上,事務才算真正提交。 修改數據高速緩沖區:在將操作信息記錄到重做日志緩沖區后,服務器進程會同時處理數據高速緩沖區。如果相關的數據塊已經在數據高速緩沖區中,服務器進程會直接在內存里對這些數據塊進行修改;若數據塊不在緩沖區,服務器進程會從數據文件中讀取相應的數據塊到緩沖區,然后進行修改。數據高速緩沖區的作用是減少磁盤 I/O 操作,提高數據訪問效率。
3. 日志先行原則(Write - Ahead Logging,WAL) 這里要強調的是日志先行原則,即事務提交前,必須保證重做日志記錄已寫入重做日志文件,但這并不意味著要等日志寫入文件后才開始修改數據高速緩沖區。日志先行主要是為了保證在數據庫出現故障時(如實例崩潰),可以依據重做日志文件中的記錄將未完成的事務重新執行,確保已提交事務的數據不會丟失。
所以,數據修改時,是先記錄到重做日志緩沖區,之后寫入重做日志文件和修改數據高速緩沖區的操作是并行進行的。
利用重做日志文件恢復數據庫是通過事務的重做(REDO)或回退(UNDO)實現的。
重做:指由于某些原因導致事務對數據庫的修改在寫入數據文件之前丟失了,此時就可以利用重做日志文件重做該事務對數據庫的修改操作。
回退:指如果用戶在事務提交之前要撤銷事務,Oracle將通過重做記錄中的回退信息撤銷事務對數據庫所做的修改。
為了保證LGWR進程的正常進行,通常采用重做日志文件組(GROUP),每個組中包含若干完全相同的重做日志文件成員(MEMBER),這些成員文件相互鏡像。 同時向當前文件組中每個成員文件寫信息。
重做日志文件的工作過程
每個數據庫至少需要兩個重做日志文件組,采用循環寫的方式進行工作。當一個重做日志文件組寫滿后,進程LGWR就會移到下一個日志文件組,稱為日志切換,同時信息會寫到控制文件中。
重做日志文件組工作流程
日志文件的查看
我們可以通過以下方式查看重做日志文件。
操作系統路徑中
數據字典表: V$logfile
通過OEM查看 是否歸檔模式使用: v$database
?重做日志文件組的狀態
CURRENT:當前Oracle數據庫正在使用的聯機重做日志文件組。
ACTIVE:如果處于這一狀態,表示雖然當前并未使用,不過該文件中內容尚未歸檔,或者文件中的數據沒有全部寫入數據文件,一旦需要實例恢復,必須借助該文件中保存的內容。 INACTIVE:表示對應的聯機重做日志文件中的內容已被妥善處理,該組聯機重做日志當前處于空閑狀態。
控制文件
控制文件的性質:
控制文件描述了整個數據庫的物理結構
控制文件是一個很小的二進制文件
數據控制文件一般在安裝Oracle系統時自動創建,并且其存放路徑由服務器參數文件SPFILEsid.ora的CONTROL_FILES參數值來確定。
在加載數據庫時,實例必須首先通過初始化參數文件找到數據庫的控制文件
在數據庫運行期間,控制文件始終在不斷更新,以便記錄數據文件和重做日志文件的變化
每個數據庫至少擁有一個控制文件,一個數據庫也可以同時擁有多個控制文件
分配在不同的物理硬盤中,以免數據庫或硬盤損壞時,能夠利用備份的控制文件啟動數據庫實例,可以提高數據庫的可靠性?
控制文件的內容:
數據庫名稱和標識;
數據庫創建的時間;
表空間名稱;
數據文件和重做日志文件的名稱和位置;
當前重做日志文件序列號;
數據庫檢查點的信息;
回退段的開始和結束;
重做日志的歸檔信息;
備份信息;
數據庫恢復所需要的同步信息。?
控制文件管理策略
Oracle建議最少有兩個控制文件,通過多路鏡像技術,將多個控制文件分散到不同的磁盤中。
在數據庫運行過程中,始終讀取CONTROL_FILES參數指定的第一個控制文件,并同時寫CONTROL_FILES參數指定的所有控制文件。如果其中一個控制文件不可用,則必須關閉數據庫并進行恢復。
每次對數據庫結構進行修改后(添加、修改、刪除數據文件、重做日志文件),應該及時備份控制文件。?
控制文件的查看
操作系統路徑中
數據字典表: ? V$controlfile
通過OEM查看?
?控制文件中的最大化參數包括:
MAXLOGFILES:最大重做日志文件組數量;
MAXLOGMEMBERS:重做日志文件組中最大成員數量;
MAXLOGHISTORY:最大歷史重做日志文件數量;
MAXDATAFILES:最大數據文件數量;
MAXINSTANCES:可同時訪問的數據庫最大實例個數。
初始化參數文件
創建服務器初始化參數文件
服務器初始化參數文件必須根據傳統的文本初始化參數文件創建,且創建必須在實例啟動之前完成。用戶必須具有SYSDBA或SYSOPER權限。
步驟:
創建一個文本初始化參數文件,文件中包含所有參數設置;
連接到Oracle數據庫;
利用文本初始化參數文件創建服務器端初始化參數文件。
語法:CREATE SPFILE [='path\filename'] FROM ? ? ? ? ? ? ? ? ?
PFILE='path\filename';?
注意:執行CREATE SPFILE命令時,不需要啟動數據庫實例!
查看初始化參數設置
參數文件的存儲
操作系統路徑中Oraclehome下dbs文件夾下。
SHOW PARAMETERS命令 ? ?
在SQL*Plus中查看當前數據庫實例正在使用的所有參數或某個參數的參數值。 V$PARAMETER或V$PARAMETER2 ? ?
通過這兩個動態性能視圖,可以查看當前數據庫實例正在使用的參數的設置情況。
V$SPPARAMETER ? ?
通過該動態性能視圖,可以查看包括服務器初始化參數文件中的所有初始化參數的設置情況。 利用企業管理器,查看數據庫參數設置
參數文件概述
參數文件的修改 注意:
最好不要直接更改里面的參數,需要更改使用alter system命令或OEM工具。 ? ? ?
例如,修改動態參數JOB_QUERY_PROCESSES,可以根據修改后立即生效、下一次啟動數據庫實例時生效,以及當前立即生效且下一次數據庫實例啟動也生效這3種情況進行SCOPE子句的設置。
SQL>ALTER SYSTEM SET JOB_QUERY_PROCESSES=50 SCOPE=MEMORY; SQL>ALTER SYSTEM SET JOB_QUERY_PROCESSES=50 SCOPE=SPFILE; SQL>ALTER SYSTEM SET JOB_QUERY_PROCESSES=50 SCOPE=BOTH;?
修改服務器參數文件中的參數
ALTER SYSTEM SET parameter_name=value
SCOPE=[SPFILE|MEMORY|BOTH];?
SCOPE?子句 | 說????明 |
SCOPE=SPFILE | 對參數的修改僅記錄在服務器初始化參數文件中,對動態參數和靜態參數都適用,修改后的參數在下一次數據庫啟動時生效 |
SCOPE=MEMORY | 對參數的修改僅記錄在內存中,只適合動態參數的修改,修改后立即生效。由于修改結果并不會保存到服務器初始化參數文件中,因此下一次啟動數據庫實例時仍然采用修改前的參數設置 |
SCOPE=BOTH | 對參數的修改同時保存到服務器初始化參數文件和內存中,只適合對動態參數的修改,更改后立即生效,并且下一次啟動數據庫實例時將使用修改后的參數設置。當執行ALTER?SYSTEM語句時,如果沒有指定SCOPE子句,那么Oracle默認將SCOPE設置為BOTH |
?修改服務器參數文件中的參數
注意:
動態參數是指在數據庫運行過程中可以進行修改并能立即生效的參數,
靜態參數是指修改后只能在數據庫實例下一次啟動時才能生效的參數。
如果當前數據庫實例使用的是服務器初始化參數文件,那么對靜態參數修改時,SCOPE子句只能設置為SPFILE。
如果當前數據庫實例使用的是文本初始化參數文件,那么SCOPE子句的設置只能為MEMORY。
導出服務器初始化參數文件
原因
創建服務器初始化參數文件的備份;
為了便于查找系統故障原因等,需要獲取當前數據庫實例所使用的所有初始化參數值;
為了修改服務器初始化參數文件中參數值,先將服務器初始化參數文件導出為文本初始化參數文件,然后對文本初始化參數文件中的參數進行修改,最后根據修改后的文本初始化參數文件創建新的服務器初始化參數文件。?
語法 CREATE PFILE[='path'] FROM SPFILE [='path']
歸檔日志文件?
ORACLE數據庫可以運行在兩種模式下: ? 歸檔日志模式(ARCHIVELOG模式) 重做日志寫滿被覆蓋前,啟動歸檔進程(ARCH), 將寫滿的重做日志先進行備份,寫入歸檔日志文件, 再對被備份的日志擦除開始寫新的在線日志文件。 ? 非歸檔日志模式(NOARCHIVELOG模式) ?重做日志寫滿了的時候,以前在線重做日志從頭擦除開始繼續寫。 Oracle默認系統設置為NOARCHIVELOG模式。 在實際的生產運行環境下,要使用ARCHIVELOG模式。?