oracle數據庫優化基礎
2024-08-29 13:39:15
供稿:網友
實例(instance)與數據庫(database)
數據庫是物理概念:它包括存儲在磁盤中的文件。實例是邏輯概念:它包括服務器中的內存結構與進程
一個實例能夠而且只能與一個數據庫連接
實例是暫時存在的實體,而數據庫只要正確維護則永久存在
用戶一般不會直接訪問Oracle數據庫的信息,而是通過Oracle實例來訪問信息
假如實例掛起,雖然數據庫仍然存在,用戶卻無法對它進行訪問。此時數據庫是靜態的:其數據不會改變。當實例重新服務時,數據庫中的數據則隨時做好預備,即可以對它進行訪問
表空間(tablespace)
表空間是一個邏輯結構,它和操作系統一樣,是不可見的
表空間由數據文件這樣的物理結構組成;每個表空間包括一個或多個數據文件,但每個數據文件只能屬于一個表空間。
創建一個表時,必須說明是在哪個表空間內創建的。這樣,Oracle才能在組成該表空間的數據文件中為它找到空間。
表空間是Oracle數據庫信息物理存儲的一個邏輯視圖。
Oracle數據庫中的物理文件
一個Oracle數據庫實際上是由以下三種基本類型的物理文件組成:
控制文件 數據文件 日志文件
控制文件
控制文件包含組成該數據庫的其他文件(例如,數據文件和日志文件)的列表,它還包括數據庫內容和狀態的要害信息
控制文件參數
控制文件的大小主要受下述的初始化參數所影響,這些初始化參數是初始文件的組成部分,并在創建數據庫時得到設置
MAXLOGFILES
表示數據庫日志組的最大數目
MAXLOGMEMBERS
每個日志文件組的最大成員數目
MAXLOGHISTORY
表示控制文件所包含的歷史日志文件的數目。這個歷史文件可以用于簡化自動恢復,它通過識別一個歸檔日志文件中事務的范圍來使用有關的日志文件。
MAXDATAFILES
表示控制文件能夠跟蹤的數據文件數目。在創建數據庫時,該參數決定了對應于數據文件的控制文件中設置的空間總量。假如增加的數據文件數目比MAXDATAFILES參數所指定的要大,控制文件則會自動擴展。
MAXINSTANCES
表示控制文件能夠跟蹤的實例總量和數目
[color=Blue]多重控制文件[/b]
一個數據庫至少應該有兩個控制文件。建立一個控制文件的多個復本是一個好辦法,通過對初始化文件中實例的CONTROL_FILES參數指定多個控制文件的位置,可以實現控制文件的多個復本:
CONTROL_FILES=(/u00/oradata/PRod/prodctl1.ctl,
/u01/oradata/prod/prodctl2.ctl,
/u02/oradata/prod/prodctl3.ctl)
這個參數會告訴實例在哪里能夠找到控制文件。Oracle對控制文件的改變同時進行。
數據文件
數據文件包括存儲在數據庫中的實際數據,其中包括:存儲數據的表和索引;維護這些數據結構信息的的數據字典,以及用于實現數據一致機制的回滾段
一個數據文件由Oralce數據庫數據塊(block)組成,而Oracle數據庫數據塊又是由磁盤中操作系統數據塊組成。一個Oracle數據塊的大小可從2KB到32KB。假如在Oracle中支持巨大內存(Very Large Memory,VLM),一個Oracle數據塊能達到64KB。
每個表空間的數據塊大小要一致,但在整個數據庫中數據塊的大小可以不同。
根據需要,數據從數據文件中以數據庫的數據塊為單位讀到內存中,數據塊也可以從內存中被寫入磁盤的數據文件中,從而確保數據庫真實地記錄了用戶所做的改變。
Oracle數據庫與操作系統聯系最緊密的是數據文件。在I/O子系統中布置數據庫,能放置在任何位置的最小部分就是數據文件。
數據文件結構
數據文件的第一個數據塊稱為數據文件首部(datafile header),它包含了維護整個數據庫完整性的要害信息。其中最重要的信息之一就是檢查點結構(checkpoint strUCture)。
這是一個邏輯時間戳,表示改變寫入數據文件的最后時刻。這個時間戳對恢復數據庫來說是非常要害的,Oracle恢復過程就是用數據文件首部中的這個時間戳來確定:到底應該用哪個日志文件將數據文件及時地恢復到當前點
數據范圍與段
從物理角度看,一個數據文件作為操作系統數據塊加以存儲。從邏輯角度看,數據文件有三個中間結構層:數據塊(block)、數據范圍(extent)和段(segment)。數據范圍是指一個Oracle數據文件中相鄰的數據塊集合。段表示在Oralce數據庫中占據空間的對象,例如由一個或多個數據范圍組成的表或索引。
當Oracle修改數據時,它要修改的是同一數據塊中的數據。假如該數據塊沒有足夠的空間存放新信息,那么Oracle把它寫到另一個新的數據塊中,兩個數據塊可能在不同的數據范圍內。
Oracle默認數據塊大小為2KB
日志文件
日志文件用于存儲由事務處理或Oracle內部行為而引起的數據庫變化。在一般的操作中,Oracle會將改變的數據塊存儲到內存中;這樣當實例發生故障時,有些改變的數據塊可能還沒來的及寫到數據文件中。此時,利用日志文件中記錄的信息可以恢復丟失的改變。
可以對表或整個表空間設定NOLOGGING屬性。這樣,基于表或表空間中所有表的操作都將抑制生成日志信息
多重日志文件
每個Oracle實例用一個日志線程(thread)來記錄數據庫的變化。日志線程由若干日志組構成,日志組又由一個或多個日志成員構成。
從邏輯上講可以將一個日志組理解成一個獨立的日志文件。但是,Oracle答應指定日志的多個復本來保護日志文件的完整性。
在控制文件丟失的情況下,還有重建控制文件靜態部分的方法,但是對丟失的日志文件就沒有重新生成的方法,因此必須保證日志文件有多個復本。
Oracle同步執行對所有日志成員的寫操作。在確認了磁盤上所有的日志文件復本都正確地修改后,寫日志操作才算已經執行。
Oracle如何使用日志
當服務器將所有能用的日志文件都使用過一次,它將再次轉向第一個并重新使用。Oracle用日志文件序列號來跟蹤不同的日志文件。這個序列號記錄正在使用的日志文件中
操作系統用日志文件名來識別物理文件,而Oracle用日志文件序列號來確定日志文件填寫和循環使用的順序。因為Oracle會自動重復使用日志文件,因此并不需要用日志文件名來確定它在日志文件序列的位置。
歸檔日志
Oralce兩種日志文件類型:
聯機日志文件
這是Oracle用來循環記錄數據庫改變的操作系統文件
歸檔日志文件
這是指為避免聯機日志文件重寫時丟失重復數據而對聯機日志文件所做的備份
Oracle有兩種歸檔日志模式,Oracle數據庫可以采用其中任何一種模式:
NOARCHIVELOG
不對日志文件進行歸檔。這種模式可以大大減少數據庫備份的開銷,但可能回導致數據的不可恢復
ARCHIVELOG
在這種模式下,當Oracle轉向一個新的日志文件時,將以前的日志文件進行歸檔。為了防止出現歷史“缺口”的情況,一個給定的日志文件在它成功歸檔之前是不能重新使用的。歸檔的日志文件,加上聯機日志文件,為數據庫的所有改變提供了完整的歷史信息。
在Oracle利用日志文件和歸檔日志文件來恢復數據庫時,內部序列號可以起一個向導的作用。
ARCHIVELOG模式和自動歸檔
Oracle自動歸檔分成兩步。首先,用SQL命令來轉向歸檔日志模式
ALTER DATABASE ARCHIVELOG
假如數據庫在ARCHIVELOG模式下,在Oracle寫日志時,它會標識出用于歸檔的日志。
但是標記為用于歸檔的日志并不意味著它們會自動歸檔。必須在初始化文件中設置如下參數:
LOG_ARCHIVE_START=TURE
這樣就啟動了歸檔進程,由Oracle調用該進程,將完整的日志文件拷貝到歸檔日志的目標位置。
歸檔日志的目標位置以及歸檔日志文件名的形式需使用另兩個參數來指定,即LOG_ARCHIVE_DEST和LOG_ARCHIVE_FORMAT。以下是一個設置的例子:
LOG_ARCHIVE_DEST = C: /ORANT/DATABASE/ARCHIVE
該語句指定了Oracle存放歸檔日志的目錄。
LOG_ARCHIVE_FORMAT = "ORCL%S.ARC"
這個語句指定了Oracle對歸檔日志文件的命名形式。此例中,文件名必須以ORCL開始,以.ARC結束。Oracle自動用左邊補零的日志文件序列號來替代通配符%S。命名形式中可選的通配符還有:
%S 以序列號替代,但左邊不補零
%T 用補零的日志線程號來替代
%t 用不補零的日志線程號來替代
每個Oracle實例開始運行時,都要首先讀初始化文件,在此之后對參數的改變不會影響此實例的運行。只有在再次啟動實例時,改變的參數才會起作用。
盡管打開了自動歸檔模式也不會使數據庫處于ARCHIVELOG模式。同樣,僅僅將數據庫設置為ARCHIVELOG模式是不會自動啟動歸檔進程的。
LOG_ARCHIVE_START參數默認設置為FALSE。有時由于ARCHIVELOG模式和LOG_ARCHIVE_START設置不一致,會導致一個Oracle實例無 right">(出處:清風軟件下載學院)