進程啟動順序 Oracle Grid Infrastructure由OS初始化守護程式啟動 操作系統初始化守護進程(init)->Grid Infrastructure包裝腳本(init.ohasd)->Grid Infrastructure守護程式和進程(ohasd.bin,oraagent.bi ...
進程啟動順序 Oracle Grid Infrastructure由OS初始化守護程式啟動 操作系統初始化守護進程(init)->Grid Infrastructure包裝腳本(init.ohasd)->Grid Infrastructure守護程式和進程(ohasd.bin,oraagent.bin,orarootagent.bin,diskmon.bin,cssdagent,ocssd.bin)->ASM實例、監聽程式、DB實例、用戶定義的應用程式 資料庫存儲體繫結構 構成Oracle資料庫的文件類別 控制文件:資料庫物理結構信息和備份相關的元數據。 數據文件:資料庫用戶或應用程式數據,以及元數據和數據字典。 聯機重做日誌文件:用於進行資料庫的實例恢復。 參數文件:用於定義實例啟動時的配置。 口令文件:允許用戶使用sysdba、sysoper和sysasm角色遠程連接到實例並管理。 備份文件:用於進行資料庫恢復。 歸檔重做日誌文件:包含實例發生的數據更改(重做)的實時歷史記錄。使用這些文件和資料庫備份,可以恢復丟失的數據文件。 跟蹤文件:每個伺服器和後臺進程都可以寫入一個關聯的跟蹤文件。當進程檢測到內部錯誤時,會將有關該錯誤的信息轉儲到相應的跟蹤文件中。 預警日誌文件:改文件包含特殊的跟蹤條目。資料庫的預警日誌是一個按時間順序記錄消息和錯誤的日誌。 邏輯和物理資料庫結構 邏輯結構(用於展示oracle在操作系統中的物理文件組成情況):資料庫->表空間->段->區->Oracle數據塊 物理結構(用於描述oracle內部組織和管理數據的方式):數據文件->存儲系統(SAN,NFS,NAS,ASM,Exadata,RAW,文件系統) 數據塊(Data Blocks):是Oracle邏輯存儲結構中最小的邏輯單位,也是執行資料庫輸入輸出的最小存儲單位。 Oracle數據塊是操作系統塊的整數倍,Oracle數據塊有一定的標準大小(DB_BLOCK_SIZE);另外Oracle支持在同一個資料庫中使用多種大小的塊,與標準塊大小不同的就是非標準塊; Oracle數據塊結構:塊頭、表目錄、行目錄、空餘空間和行數據 塊頭:存放數據塊的基本信息,如塊的物理地址、塊所屬的段的類型。 表目錄:存放表的相關信息。 行目錄:如果塊中有行數據存在,則這些行的信息將被記錄在行目錄中,這些信息包括行的地址。 空餘空間:空餘空間是一個塊中未使用的區域,這片區域用於新行的插入和已經存在的行的更新。 行數據:用於存放表數據和索引數據的地方,這部分空間已被數據行所占用。 通常將塊頭、表目錄、行目錄這3個部分組合起來稱為頭部信息,頭部信息區不存放數據,它存放整個塊的引導信息,起到引導系統讀取數據的作用。所以頭部信息若遭到破壞,則Oracle系統無法讀取這部分數據。空餘空間和行數據共同構成塊的存儲區,用於存放真正的數據。 數據區(Extent):也稱做數據擴展區是由一組連續的Oracle數據塊所構成的Oracle存儲結構,一個或多個數據塊組成一個數據區,一個或多個數據區組成一個段(Segment),當段(Segment)空間不足時Oracle系統會自動為該段分配一個新的數據區。數據區是Oracle存儲分配的最小單位。 使用數據區的目的:用來保存特定的數據類型的數據。 數據區是表中數據增長的基本單位,在Oracle資料庫中,分配存儲空間就是以數據區為單位的。一個Oracle對象包含至少一個數據區。設置一個表或索引的存儲參數包含設置它的數據區大小。 段(Segment):由一個或多個數據區組成,它不是存儲空間的分配單位,而是一個獨立的邏輯存儲結構,用於存儲表、索引或簇等占用空間的數據對象,Oracle也把這種占用空間的數據對象統一稱為段。 段是為特定的數據對象(如表、索引、回滾等)分配的一系列數據區。段內的數據區可以不連續,並且可以跨越多個文件。 使用段的目的:用來保存特定對象。 數據段:數據段中保存的是表中的數據記錄,在創建數據表時,Oracle系統將為表創建數據段。當表中的數據量增大時,數據段的大小自然也隨著變化,數據段的增大過程是通過向其添加數據區來實現的。當創建一個表時,系統自動創建一個以該表的名字命名的數據段。 索引段:索引段中包含了用於提高系統性能的索引。一旦建立索引,系統自動創建一個以該索引的名字命名的索引段。 回滾段:也稱撤銷段,它保存了回滾條目,Oracle將修改前的舊值保存在回滾條目中。 臨時段:當執行創建索引、查詢等操作時,Oracle可能會使用一些臨時存儲空間,用於暫時性地保存解析過的查詢語句以及在排序過程中產生的臨時數據。 執行“Create Index”、“Select Order By”、“Select Distinct”、“Select Group By”等幾種類型的sql語句時,Oracle系統就會在臨時表空間中為這些語句的操作分配一個臨時段。在資料庫管理過程中,若經常需要執行上面這類sql語句,最好調整sort_area_size初始化參數來增大排序區,從而使排序操作儘量在記憶體中完成,以獲取更好的效率,但同時這對資料庫伺服器的記憶體空間提出了更大的要求。 表空間和數據文件 資料庫被劃分為多個“表空間”,表空間是可用於將相關邏輯結構組合在一起的邏輯存儲單元。每個資料庫都在邏輯上分為兩個或多個表空間:SYSTEM和SYSAUX表空間。在每個表空間均顯式創建一個或多個數據文件,以在物理上存儲表空間中所有邏輯結構的數據。 註意:可以創建大文件表空間,這種表空間只有一個。該文件的大小可達體繫結構允許的最大大小。最大大小是表空間的塊大小乘以2^36,如果塊大小為32KB,則最大大小為128TB。 SYSTEM和SYSAUX表空間 SYSTEM和SYSAUX表空間是在創建資料庫時創建的必需存在的表空間。這些表空間必需聯機。 SYSTEM表空間用於核心功能(例如數據字典) 輔助的SYSAUX表空間用於附加的資料庫組件(如Oracle Enterprise Manager Repository) 不建議使用SYSTEM和SYSAUX表空間來存儲應用程式的數據。 註意:SYSAUX表空間可以離線以執行表空間恢復,而SYSTEM表空間則不能。這兩個表空間都不能設定為只讀。 自動存儲管理(ASM) 自動存儲管理(Automatic Storage Management)為Oracle DB文件提供文件系統與捲管理縱向集成。 -可移植的高性能集群文件系統 -管理Oracle DB文件 -通過ASM集群文件系統(ACFS)管理應用程式文件 -將數據分佈到各個磁碟中以平衡負載 -建立數據鏡像以防範故障 -提高可靠性和性能,不需逐個文件地進行人工交互 ASM存儲組件 ASM文件->ASM區(AU大小的1倍,4倍,16倍)->ASM分配單元(1,2,4,8,16,32或64MB) ASM磁碟組->ASM磁碟 與Oracle DB交互:記憶體、進程和存儲 1.Oracle DB的節點上啟動資料庫實例。 2.用戶啟動一個應用程式,衍生一個用戶進程。該用戶進程嘗試與伺服器建立一個連接。 3.伺服器運行相應的Oracle Net服務進行監聽。監聽程式檢測到應用程式發出的連接請求,並創建一個代表用戶進程的專用伺服器進程。 4.用戶運行DML類型的SQL語句並提交事務處理。 5.伺服器進程接收該語句,並檢查共用池中是否包含相同的SQL語句的共用SQL區域。如果找到共用SQL區域,伺服器進程將檢查用戶對所請求數據的訪問許可權,然後使用現有的共用SQL區域處理該語句。如果沒有找到共用SQL區域則為該語句分配一個新的共用SQL區域,以便對該語句進行分析和處理。 6.伺服器進程從實際數據文件(表)或資料庫緩衝區高速緩存中存儲的值中檢索必需的數據值。 7.伺服器進程修改SGA中的數據。提交事務並調用日誌寫進程(LGWR)將重做日誌緩衝區的信息立即寫入到重做日誌文件中。資料庫寫進程(DBWn)在一個高效的時機將修改後的塊永久寫入磁碟。 8.如果事務處理成功,伺服器進程將通過網路嚮應用程式發送一條信息。如果事務處理不成功,則傳送一條錯誤信息。 9.整個過程中,其他後臺進程也在運行,監控進程(PMON)監視是否需要干預的情況。此外,資料庫伺服器也管理其他用戶的事務,並防止請求相同數據的事務處理之間發生爭用。 總結: Oracle Server -Oracle Instance -Oracle Memory -Systen global area(系統全局區):由所有用戶進程共用的一塊記憶體區域。 -Shared pool(共用池):保存最近執行的sql語句、pl/sql程式的數據字典信息。語法分析、編譯和執行的記憶體區域。 -Library cache(庫高速緩存) -Shared SQL area -Private SQL area(Shared Server Only) -Data dictionary cache(數據字典高速緩存) -Server result cache(服務結果緩存) -Other -Database buffer cache(數據高速緩衝區):用於存儲從磁碟數據文件中讀取的數據。 -Redo log buffer(重做日誌緩衝區):用於存儲資料庫的修改操作信息。 -Large pool(大池):提供一個大的緩衝區供資料庫的備份和恢復操作使用。 -Java pool(Java池):程式緩衝區為Java程式保留的。 -Streams pool(流池):流複製所使用-10g新加入。如streams_pool_size未設定,它會從sga獲取最多為shared pool的10%。 -Sort area(排序區):Oracle系統為排序操作所產生的臨時數據提供的記憶體空間。 -Program global area(程式全局區):單個用戶或伺服器數據和控制信息的記憶體區域,它在用戶進程連接到oracle資料庫並創建一個會話由oracle自動分配 -Stack Space(堆棧區) -User global area -User session data(會話信息區) -Cursor status(游標狀態區) -Sort area(排序區) http://docs.oracle.com/cd/B28359_01/server.111/b28318/memory.htm -Background Process -DBWn(DataBase Write 資料庫寫入進程):數據緩衝區的後臺進程負責將緩衝區的數據寫入磁碟中的數據文件中。 -PMON(Process Monitor 程式監控進程):用於用戶進程出現故障時執行恢復操作。 -SMON(System Monitor 系統監控進程):實例啟動時執行實例恢復並負責清理不在使用的臨時段。 -LGWR(Log Write 日誌寫入進程):負責管理重做日誌緩衝區的後臺進程,將重做日誌緩衝區的日誌數據寫入磁碟的聯機重做日誌文件中。-->確認進程 -CKPT(Check Point 檢查點進程):檢查所有修改過的數據緩衝區的數據都被寫入磁碟數據文件中。 -ARCN(Archvie Process 歸檔日誌進程):將寫滿的聯機重做日誌文件複製到歸檔日誌文件中。 -RECO(Recovery 還原進程):自動解決在分散式資料庫中出現的事務故障。 -LCKn(Lock 鎖進程):存在與並行伺服器系統中,用於實現多個實例間的封鎖。 -Dnnn(Dispatchers 調度進程):多線程伺服器體繫結構中將用戶進程連接到伺服器進程中。 -Snnn(Shared Servers) -Server process -User process -Oracle Database -Physical Structure(物理存儲結構):用於展示oracle在操作系統中的物理文件組成情況。 -Control file(control.ctl 控制文件):二進位文件,描述資料庫的物理結構。存放資料庫中的數據文件和日誌文件的具體位置。 -Data file(*.dbf 數據文件):存儲資料庫數據的物理文件。 -Online log file(*.log 聯機日誌文件):記錄資料庫中所有修改信息,保證數據安全。一個資料庫至少有兩個日誌組文件每個日誌組至少有一個日誌成員。 -Archive log file(*.arc 歸檔日誌文件):對寫滿的日誌文件進行複製保存。 -pfile and spfile(init$SID.ora spfile$SID.ora 參數文件):記錄oracle資料庫的基本信息,如資料庫名、控制文件存放位置、記憶體等等。 -password file(orapwd$SID 密碼文件):用於Oracle具有sysdba許可權用戶的認證。 -alert and treacrt file(警告和跟蹤文件):資料庫運行日誌和錯誤信息的跟蹤。 -backup file( 備份文件):用於資料庫數據的還原。 -Logical Structure(邏輯存儲結構):用於描述oracle內部組織和管理數據的方式。 -Tablespace(表空間):最大的邏輯存儲結構 -Table(表) -Index(索引) -View(視圖) -Segment(段): -數據段 -索引段 -回滾段 -臨時段 -Extent -Data blocks -塊頭 -表目錄 -行目錄 -空餘空間 -行數據