久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Oracle體系結(jié)構(gòu)分析

141次閱讀
沒有評論

共計 3863 個字符,預(yù)計需要花費 10 分鐘才能閱讀完成。

這篇文章主要講解了“Oracle 體系結(jié)構(gòu)分析”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著丸趣 TV 小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Oracle 體系結(jié)構(gòu)分析”吧!

  一、什么是 Oracle 數(shù)據(jù)庫?

眾所周知,Oracle DataBase 是一款關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(不了解何謂關(guān)系型數(shù)據(jù)庫的童鞋自行 google,baidu),同類的產(chǎn)品還有 mySql,sqlServer 等,很多時候,我們會把那個承載我們核心數(shù)據(jù)的系統(tǒng)籠統(tǒng)地成為數(shù)據(jù)庫服務(wù)器,但從嚴(yán)格意義上來講 Oracle DataBase 是由兩個部分組成:

實例:實例是數(shù)據(jù)庫啟動時初始化的一組進(jìn)程和內(nèi)存結(jié)構(gòu)

數(shù)據(jù)庫:數(shù)據(jù)庫則指的是用戶存儲數(shù)據(jù)的一些物理文件

正因為如此我們一般才會說 關(guān)閉和啟動實例,加載卸載數(shù)據(jù)庫,就是這個道理。

從實例和數(shù)據(jù)庫的概念上來看,我們能知道,實例暫時的,它不過是一組邏輯劃分的內(nèi)存結(jié)構(gòu)和進(jìn)程結(jié)構(gòu),它會隨著數(shù)據(jù)庫的關(guān)閉而消失,而數(shù)據(jù)庫它其實就是一堆物理文件(控制文件,數(shù)據(jù)文件,日志文件等等),它是永久存在的(除非磁盤損壞)。數(shù)據(jù)庫和實例通常是一對一的,這種結(jié)構(gòu)我們成為單實例體系結(jié)構(gòu);當(dāng)然還有一些復(fù)雜的分布式的結(jié)構(gòu),一個數(shù)據(jù)庫可以對多個實例,像 Oracle 的 RAC(有興趣的童鞋可以了解下)。

  二、交互流程

下面是從網(wǎng)上找的一張圖,描述了單實例體系結(jié)構(gòu)大致的交互流程

1. 用戶和用戶進(jìn)程交互

用戶進(jìn)程可以是一般的客戶端軟件,像 Oracle 的 sqlplus,sql developer, 或者是一些驅(qū)動程序等等都屬于用戶進(jìn)程。

2. 用戶進(jìn)程和服務(wù)器進(jìn)程交互

服務(wù)器進(jìn)程有時會稱為前臺進(jìn)程,當(dāng)然是相對于后臺進(jìn)程(后面會提到的數(shù)據(jù)庫寫入器,日志寫入器等)來說的,服務(wù)器進(jìn)程的主要作用就是處理連接到當(dāng)前實例的用戶進(jìn)程的請求,對客戶端發(fā)來的 sql 進(jìn)行執(zhí)行并返回執(zhí)行結(jié)果。在專有服務(wù)器結(jié)構(gòu)中,用戶進(jìn)程和服務(wù)器進(jìn)程是一對一的,也就是說,當(dāng)監(jiān)聽程序監(jiān)聽到客戶端來了一個請求,會為其分配一個對應(yīng)的服務(wù)器進(jìn)程。還有一種結(jié)構(gòu)為共享服務(wù)器,這種結(jié)構(gòu)就不是一個用戶進(jìn)程對應(yīng)一個服務(wù)器進(jìn)程了,會通過調(diào)度程序進(jìn)行協(xié)調(diào)處理,關(guān)于共享服務(wù)器連接,本文就不在贅述了。

3. 服務(wù)器進(jìn)程和實例進(jìn)程交互 4. 實例和數(shù)據(jù)庫進(jìn)程交互

上面描述了一些我們在進(jìn)行數(shù)據(jù)庫連接操作的時候,大致的交互流程是什么樣的。下面,我們就來看看 Oracle 的實例內(nèi)存結(jié)構(gòu)

  三、實例內(nèi)存結(jié)構(gòu)和進(jìn)程結(jié)構(gòu)

(由于內(nèi)存結(jié)構(gòu)和進(jìn)程結(jié)構(gòu)關(guān)系較緊密,進(jìn)程會作用到對應(yīng)的內(nèi)存區(qū)域,比如數(shù)據(jù)庫寫入器作用到數(shù)據(jù)庫緩沖區(qū)緩存中,日志寫入器會作用到日志緩沖區(qū),所以內(nèi)存結(jié)構(gòu)和進(jìn)程結(jié)構(gòu)會相互配合地進(jìn)行描述)

oracle 實例內(nèi)存結(jié)構(gòu)由兩部分組成 SGA(系統(tǒng)全局區(qū)) 和 PGA(用戶全局區(qū)) 組成,SGA 是一塊共享的內(nèi)存區(qū)域,也是最大的一塊內(nèi)存區(qū)域;PGA 則是用戶會話專有的內(nèi)存區(qū)域,每個會話在服務(wù)器端都有一塊專有的內(nèi)存區(qū)域就是 PGA。本文主要對 SGA 進(jìn)行分析描述。SGA 組成如下

數(shù)據(jù)庫緩沖區(qū)緩存 數(shù)據(jù)庫寫入器

緩沖區(qū)緩存 是 Oracle 用來執(zhí)行 sql 的工作區(qū)域,在更新數(shù)據(jù)時,用戶會話不會直接去更新磁盤上的數(shù)據(jù),想想,如果允許這么做,那么頻繁的磁盤 IO 對于系統(tǒng)性能的影響是毀滅性的。所以,實際的處理流程是這樣的:

1

SQL alter system checkpoint;

檢查點可強制 DBWn 寫入臟緩沖區(qū),當(dāng)數(shù)據(jù)庫崩潰后,由于大量臟緩沖區(qū)未寫入數(shù)據(jù)文件,在重新啟動時,需要由 SMON 進(jìn)行實例恢復(fù),實例恢復(fù)需要提取和應(yīng)用重做日志記錄,提取的位置就是從上次檢查點發(fā)起的位置開始的(檢查點之前的數(shù)據(jù)已經(jīng)被強制寫入到數(shù)據(jù)文件中去了),這個位置稱為 RBA(redo byte address),CKPT 會不斷將這個位置更新到控制文件中去(以確定實例恢復(fù)需要從哪兒開始提取日志記錄)。

MMON(Manageability Monitor)

數(shù)據(jù)庫的自我監(jiān)視和自我調(diào)整的支持進(jìn)程。實例在運行中,會收集大量有關(guān)實例活動和性能的統(tǒng)計數(shù)據(jù),這些數(shù)據(jù)會收集到 SGA 中,MMON 定期從 SGA 中捕獲這些統(tǒng)計數(shù)據(jù),并將其寫入到數(shù)據(jù)字典中,便于后續(xù)對這些快照進(jìn)行分析。(默認(rèn)情況,MMON 每隔一個小時收集一次快照)

ARCn(Archiver)

歸檔進(jìn)程,這個進(jìn)程是可選的,如果數(shù)據(jù)庫配置為歸檔模式,這個進(jìn)程就是必須的。所謂歸檔,就是將重做日志文件永久保存(生產(chǎn)庫一般都會配置為歸檔模式)到歸檔日志文件中。歸檔日志文件和重做日志文件作用是一樣的,只不過重做日志文件會不短被重寫,而歸檔日志文件則保留了關(guān)于數(shù)據(jù)更改的完整的歷史記錄。

至此,Oracle 基礎(chǔ)的內(nèi)存結(jié)構(gòu)和進(jìn)程結(jié)構(gòu)我們已大概了解,來看下完成的進(jìn)程和內(nèi)存的交互情況,可以根據(jù)前面的理解將整個交互流程串聯(lián)一下。

  四、Oracle 存儲結(jié)構(gòu)

針對 Oracle 存儲結(jié)構(gòu)將分別從物理存儲結(jié)構(gòu)和邏輯存儲結(jié)構(gòu)兩個維度來進(jìn)行闡述。

物理存儲結(jié)構(gòu)

所謂外部文件,意味著這些文件從嚴(yán)格意義上來講并不屬于 Oracle 數(shù)據(jù)庫的一部分。

控制文件:

控制文件雖小,但作用重大,它包含指向數(shù)據(jù)庫其余部分的指針(包括重做日志文件,數(shù)據(jù)文件,歸檔日志文件等的位置),存儲重要的序列號和時間戳,存儲 RMAN 備份的詳細(xì)信息。控制文件一旦受損,那實例會立馬終止,一般對數(shù)據(jù)文件的保護(hù)采用多路復(fù)用機制,就是冗余多份在不同物理位置。

重做日志文件

重做日志文件的作用在講解內(nèi)存和進(jìn)程結(jié)構(gòu)的時候有提到過,重做日志按時間順序存儲應(yīng)用于數(shù)據(jù)庫的一連串的變更向量(包含聯(lián)機重做日志文件和歸檔日志文件)。由 SMON 在數(shù)據(jù)庫啟動時自動執(zhí)行的實例恢復(fù) 和 磁盤損壞所要求的提取備份恢復(fù)都會應(yīng)用到重做日志進(jìn)行相應(yīng)的數(shù)據(jù)恢復(fù)

重做日志文件也建議進(jìn)行多路復(fù)用,一個數(shù)據(jù)庫至少要有兩組重做日志文件。一組供 LGWR 進(jìn)行寫入,日志文件是固定大小,業(yè)務(wù)高峰期會很快寫滿,寫滿之后會切換到第二組上,在配置為歸檔模式的數(shù)據(jù)庫中,這時由歸檔進(jìn)程(ARCn)開始將第一組的內(nèi)容進(jìn)行歸檔備份,如此循環(huán)地進(jìn)行寫入和歸檔。需要注意的是,在歸檔進(jìn)程還未對當(dāng)前組的日志歸檔完畢前,是不允許 LGWR 對其進(jìn)行重寫的。

數(shù)據(jù)文件

數(shù)據(jù)文件存儲著實際的數(shù)據(jù),DBWn 會將數(shù)據(jù)庫緩沖區(qū)中的內(nèi)容寫入到這類文件中去,數(shù)據(jù)文件的大小和數(shù)量是不受限制的。Oracle 從 10g 開始,創(chuàng)建一個數(shù)據(jù)庫至少需要兩個數(shù)據(jù)文件,一個用于 SYSTEM 表空間,該表空間用來存儲數(shù)據(jù)字典;一個用于 SYSAUX 表空間,這個表空間用來存儲一些數(shù)據(jù)字典的輔助數(shù)據(jù)。

數(shù)據(jù)文件由一個個的 Oracle 塊組成,這是 Oracle 的 I / O 基礎(chǔ)單元,與操作系統(tǒng)塊是不同的概念,Oracle 塊要比操作系統(tǒng)塊大,這當(dāng)然有處于性能的一些考慮,但我們考慮這樣一種情況,當(dāng)用戶使用操作系統(tǒng)命令進(jìn)行數(shù)據(jù)文件的備份的時候(假設(shè) 1 個 Oracle 塊 = 8 個操作系統(tǒng)塊),已經(jīng)復(fù)制了 4 個操作系統(tǒng)塊,然后 CPU 被 DBWn 搶占了,DBWn 又重新對這個 Oracle 塊進(jìn)行了更新,這時,當(dāng)復(fù)制命令又得到了 CPU 時間去復(fù)制剩余的 4 個塊的時候,就造成了整個 Oracle 塊的數(shù)據(jù)不一致,所以,這也是在執(zhí)行這種備份(用戶自行備份)的時候,需要做一些額外處理,比如將表空間置為備份模式的原因。當(dāng)然,使用 RMAN 是不存在這樣的問題的,RMAN 的備份機制是肯定可以得到數(shù)據(jù)一致的塊的。(這塊內(nèi)容作了解即可)

對于數(shù)據(jù)文件的保護(hù),一般可進(jìn)行定期備份,或者使用 RAID 也可以。

實例參數(shù)文件

這個文件存儲了數(shù)據(jù)庫所需的一些參數(shù)設(shè)置,比如各個內(nèi)存區(qū)域的大小,可允許的最大進(jìn)程數(shù),最大會話數(shù),控制文件的位置,數(shù)據(jù)庫的名稱等等,參數(shù)文件也是實例啟動時首先要加載的文件。

口令文件

一般稱為外部口令文件。一般的用戶名和口令是存放在數(shù)據(jù)字典中,不會存放在這個文件中。在一些特殊場景下,比如實例還未啟動,這時,我可能需要以管理員的身份登入系統(tǒng)去執(zhí)行一些恢復(fù)或者啟動操作,然而此時,數(shù)據(jù)字典由于實例還沒啟動是不存在的,這時就需要外部口令文件進(jìn)行用戶身份的驗證。

歸檔日志文件

ARCn 將聯(lián)機重做日志文件會備份歸檔到這類文件中去,歸檔日志文件保留了數(shù)據(jù)更改的完整歷史信息。

邏輯存儲結(jié)構(gòu)

Oracle 將其物理結(jié)構(gòu)從邏輯存儲結(jié)構(gòu)中抽象出來,物理機構(gòu)是系統(tǒng)管理員能看到的,邏輯結(jié)構(gòu)則是用戶所能感知到的。比較典型的邏輯結(jié)構(gòu)就是 段 和 表空間。

段:

段就是包含所有數(shù)據(jù)的邏輯結(jié)構(gòu),比較典型的段就是 表,稱為表段,還有索引段,撤銷段等等。

表空間

表空間從邏輯上是多個段的結(jié)合,在物理上是多個數(shù)據(jù)文件的集合,相當(dāng)于在段和數(shù)據(jù)文件的對應(yīng)中加入了一個中間層來解決這種多對多的關(guān)系。

在早期的一些數(shù)據(jù)庫設(shè)計中,段和數(shù)據(jù)文件是一對一的關(guān)系,一個段一個數(shù)據(jù)文件,這種設(shè)計有很多弊端,首先,段的數(shù)量是不固定的,有可能一個系統(tǒng)中上千張表,那就得需要上千個數(shù)據(jù)文件,系統(tǒng)管理員要管理這么多文件肯定會抓狂的;還有一種情況就是某些歷史表可能特別大,大到底層系統(tǒng)對單個文件的限制,用一個數(shù)據(jù)文件去承載的話肯定是不行的。表空間則完美解決了這樣的問題。

還有一些邏輯結(jié)構(gòu)如區(qū)間和 Oracle 塊(Oracle 塊前面有提到過,區(qū)間則為塊的集合),下面通過一張圖對 Oracle 的存儲結(jié)構(gòu)進(jìn)行整體的宏觀的認(rèn)識,進(jìn)一步加深些理解

感謝各位的閱讀,以上就是“Oracle 體系結(jié)構(gòu)分析”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對 Oracle 體系結(jié)構(gòu)分析這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是丸趣 TV,丸趣 TV 小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-07-20發(fā)表,共計3863字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 静宁县| 盈江县| 富民县| 会泽县| 梁河县| 墨玉县| 财经| 星座| 乐至县| 双牌县| 五峰| 安塞县| 华安县| 三河市| 云龙县| 通州区| 星子县| 兴海县| 库尔勒市| 白朗县| 东源县| 巴青县| 枣阳市| 哈巴河县| 尚义县| 建阳市| 阿坝县| 苏尼特左旗| 社旗县| 阿城市| 望城县| 无极县| 文昌市| 临洮县| 孟村| 靖安县| 张家界市| 类乌齐县| 商南县| 平定县| 习水县|