国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Oracle架構(gòu)_數(shù)據(jù)庫(kù)底層原理、機(jī)制 (授人以漁)

這篇具有很好參考價(jià)值的文章主要介紹了Oracle架構(gòu)_數(shù)據(jù)庫(kù)底層原理、機(jī)制 (授人以漁)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

目錄

系統(tǒng)全局區(qū)SGA

高速緩存緩沖區(qū)(數(shù)據(jù)庫(kù)緩沖區(qū))

日志緩沖區(qū)

共享池

其他結(jié)構(gòu)

用戶連接進(jìn)程

用戶進(jìn)程User Process

Server Process服務(wù)進(jìn)程

程序全局區(qū)PGA

Oracle的connect連接和session會(huì)話與User Process緊密相關(guān)

后臺(tái)進(jìn)程

數(shù)據(jù)庫(kù)寫入進(jìn)程(DBWn)

檢查點(diǎn)(CKPT)

進(jìn)程監(jiān)視進(jìn)程(PMON)

系統(tǒng)監(jiān)視進(jìn)程(SMON)

重做日志文件和日志寫入進(jìn)程

歸檔進(jìn)程(ARCn)

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

Data Files

Redo Log Files

Control Files

Parameter File

Password File

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

邏輯空間到物理空間的映射


Oracle架構(gòu),講述了Oracle RDBMS的底層實(shí)現(xiàn)原理,是Oracle DBA**調(diào)優(yōu)和排錯(cuò)的基礎(chǔ)理論。深入理解Oracle架構(gòu),能夠讓我們?cè)贠racle的路上走的更遠(yuǎn)。本文主要是在對(duì)RDBMS的底層組件功能和實(shí)現(xiàn)原理有一定的了解的情況下,結(jié)合自身的工作經(jīng)驗(yàn)提出了對(duì)Oracle調(diào)優(yōu)和排錯(cuò)的思路。**當(dāng)然,對(duì)Oracle體系結(jié)構(gòu)的理解是一個(gè)深遠(yuǎn)的過(guò)程,需要不斷的更新修改,如有不對(duì),還望指正。:)

Oracle RDBMS架構(gòu)圖

Oracle架構(gòu)_數(shù)據(jù)庫(kù)底層原理、機(jī)制 (授人以漁),數(shù)據(jù)庫(kù)資料,oracle

一般我們所說(shuō)的Oracle指的是Oracle RDBMS(Relational databases Management system),一套Oracle數(shù)據(jù)庫(kù)管理系統(tǒng),也稱之為Oracle Server。而Oracle Server主要有兩大部分:

Oracle Server = 實(shí)例 + 數(shù)據(jù)庫(kù)?(Instance和Database是相互獨(dú)立的)

  • 數(shù)據(jù)庫(kù) = 數(shù)據(jù)文件 + 控制文件 +日志文件
  • 實(shí)例 = 內(nèi)存池 + 后臺(tái)進(jìn)程

所以可以細(xì)分為:?Oracle Server = 內(nèi)存池 + 后臺(tái)進(jìn)程 + 數(shù)據(jù)文件 + 控制文件 + 日志文件

一臺(tái)Oracle Server支持創(chuàng)建多個(gè)Database,而且每個(gè)Datacase是互相隔離而獨(dú)立的。不同的Database擁有屬于自己的全套相關(guān)文件,例如:有各自的密碼文件,參數(shù)文件,數(shù)據(jù)文件,控制文件和日志文件。

Database由一些物理文件(如:存放在存儲(chǔ)設(shè)備中的二維表文件)組成。二維表存儲(chǔ)在Database中,但Database的內(nèi)容不能被用戶直接讀取,用戶必須通過(guò)Oracle instance才能夠訪問(wèn)Database,一個(gè)Instance只能連接一個(gè)Database,但是一個(gè)Database可以被多個(gè)Instance連接。

將上面的Oracle RDBMS架構(gòu)圖進(jìn)行抽象分類,可以將Oracle架構(gòu)抽象為:Oracle體系 = 內(nèi)存結(jié)構(gòu) + 進(jìn)程結(jié)構(gòu) + 存儲(chǔ)結(jié)構(gòu)
Oracle架構(gòu)_數(shù)據(jù)庫(kù)底層原理、機(jī)制 (授人以漁),數(shù)據(jù)庫(kù)資料,oracle

內(nèi)存結(jié)構(gòu)

Oracle Instance是Oracle RDBMS的核心之一,負(fù)責(zé)RDBMS的管理功能。Oracle Instance主要由內(nèi)存池SGA后臺(tái)進(jìn)程組成。
Oracle架構(gòu)_數(shù)據(jù)庫(kù)底層原理、機(jī)制 (授人以漁),數(shù)據(jù)庫(kù)資料,oracle

系統(tǒng)全局區(qū)SGA

Oracle架構(gòu)_數(shù)據(jù)庫(kù)底層原理、機(jī)制 (授人以漁),數(shù)據(jù)庫(kù)資料,oracle

內(nèi)存池SGA的默認(rèn)Size,會(huì)在安裝Oracle的時(shí)候會(huì)根據(jù)LinuxOS的sysctl.conf參數(shù)文件來(lái)決定:

kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 1048576
net.core.rmem_max = 1048576
net.core.wmem_default = 262144
net.core.wmem_max = 262144

查看SGA的Size

SQL> conn /as sysdba
Connected.
SQL> show user;
USER is "SYS"
SQL> select * from v$sga;
NAME              VALUE
-------------------- ----------
Fixed Size      2022144
Variable Size         503317760
Database Buffers     1627389952
Redo Buffers           14753792

SQL> show sga
Total System Global Area 2147483648 bytes     #對(duì)應(yīng)kernel.shmmax = 2147483648
Fixed Size          2022144 bytes
Variable Size         503317760 bytes
Database Buffers     1627389952 bytes
Redo Buffers           14753792 bytes

SGA(System Global Area)是與Oracle性能關(guān)系最大的核心部分,也是對(duì)Oracle進(jìn)行調(diào)優(yōu)的主要考量。SGA內(nèi)存池會(huì)在Instance啟動(dòng)時(shí)被分配,在Instance關(guān)閉時(shí)被釋放。在一定范圍內(nèi),SGA可以在Instance運(yùn)行時(shí)通過(guò)自動(dòng)方式響應(yīng)DBA的指令。如果想對(duì)SGA進(jìn)行調(diào)優(yōu)還必須理解SGA所包含如下幾種數(shù)據(jù)結(jié)構(gòu):

高速緩存緩沖區(qū)(數(shù)據(jù)庫(kù)緩沖區(qū))

數(shù)據(jù)庫(kù)緩沖區(qū)是oracle執(zhí)行SQL語(yǔ)句的區(qū)域。
例如在更新數(shù)據(jù)時(shí),用戶執(zhí)行的SQL語(yǔ)句不會(huì)直接對(duì)磁盤上的數(shù)據(jù)文件進(jìn)行更改操作,而是首先將數(shù)據(jù)文件復(fù)制到數(shù)據(jù)庫(kù)緩沖區(qū)緩存(就是說(shuō)數(shù)據(jù)庫(kù)緩沖區(qū)里會(huì)存放著SQL相關(guān)數(shù)據(jù)文件副本),再更改應(yīng)用于數(shù)據(jù)庫(kù)緩沖區(qū)緩存中這些數(shù)據(jù)塊的副本。而且數(shù)據(jù)塊副本將在緩存中保留一段時(shí)間,直至其占用的緩沖區(qū)被另一個(gè)數(shù)據(jù)庫(kù)覆蓋為止(緩沖區(qū)Size有限)。

在查詢數(shù)據(jù)時(shí),為了提高執(zhí)行效率,查詢的數(shù)據(jù)也要經(jīng)過(guò)緩存。建立的Session會(huì)計(jì)算出那些數(shù)據(jù)塊包含關(guān)鍵的行,并將它們復(fù)制到數(shù)據(jù)庫(kù)緩沖區(qū)中進(jìn)行緩存。此后,相關(guān)關(guān)鍵行會(huì)傳輸?shù)絊ession的PGA作進(jìn)一步處理。這些數(shù)據(jù)塊也會(huì)在數(shù)據(jù)庫(kù)緩存區(qū)緩存中保留一段時(shí)間。

一般情況下,被頻繁訪問(wèn)的數(shù)據(jù)塊會(huì)存在于數(shù)據(jù)庫(kù)緩沖區(qū)緩存中,從而最大程度地減少對(duì)磁盤I/O的需要。

那什么時(shí)候會(huì)將被更新的數(shù)據(jù)塊副本寫入到磁盤中的數(shù)據(jù)文件呢?
答案就是:如果在緩沖區(qū)緩存中存儲(chǔ)的數(shù)據(jù)塊與磁盤上的數(shù)據(jù)塊不同時(shí),那么這樣的緩沖區(qū)常稱為”臟緩沖區(qū)”,臟緩沖區(qū)中的數(shù)據(jù)塊副本就必須寫回到磁盤的數(shù)據(jù)文件中。

調(diào)優(yōu):數(shù)據(jù)庫(kù)緩沖區(qū)緩存的大小會(huì)對(duì)性能產(chǎn)生至關(guān)重要的影響,具體需要多大的Size才能成為最佳配比還要結(jié)合實(shí)際的生產(chǎn)環(huán)境而言。總體而言可以依據(jù)以下兩點(diǎn)基本要求來(lái)判斷:
1. 緩存應(yīng)足夠大,以便能緩存所有被頻繁訪問(wèn)的數(shù)據(jù)塊。如果緩存過(guò)小,那么將導(dǎo)致磁盤I/0活動(dòng)過(guò)多,因?yàn)轭l繁訪問(wèn)的數(shù)據(jù)塊持續(xù)從磁盤讀取,并由其他數(shù)據(jù)塊使用和重寫,然后再?gòu)拇疟P讀取。
2. 但也不能太大,以至于它會(huì)將極少被訪問(wèn)的塊也一并加入到緩存中,這樣會(huì)增長(zhǎng)在緩存中搜索的時(shí)間。

數(shù)據(jù)庫(kù)緩沖區(qū)緩存在Instance啟動(dòng)時(shí)被分配。從數(shù)據(jù)庫(kù)9i開(kāi)始,可以隨時(shí)將其調(diào)大或調(diào)小??梢圆捎檬謩?dòng)方式重調(diào),也可以根據(jù)工作負(fù)荷自動(dòng)重調(diào)大小(事務(wù))。
修改緩沖區(qū)DB_CACHE_SIZE地方法

#Step1. 查看SGA的大?。阂?yàn)镈B_CACHE_SIZE的size受SGA的影響
SQL> show parameter sga_max_size;
NAME                     TYPE    VALUE
------------------------------------ ----------- ------------------------------
sga_max_size                 big integer 2G

#Step2. 查看show parameter shared_pool_size的大小
SQL> show parameter shared_pool_size;                   NAME                     TYPE    VALUE
------------------------------------ ----------- ------------------------------
shared_pool_size             big integer 0

#Step3. 計(jì)算DB_CACHE_SIZE的大小:shared_pool_size + db_cache_size = SGA_MAX_SIZE * 70%

#Step4. 修改DB_CACHE_SIZE的大小
SQL> alter system set db_cache_size=1433M scope=spfile sid='demo';

System altered.

SQL> conn sys /as sysdba
Enter password: ********
Connected.
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

Total System Global Area 2147483648 bytes
Fixed Size          2022144 bytes
Variable Size         503317760 bytes
Database Buffers     1627389952 bytes
Redo Buffers           14753792 bytes
Database mounted.
Database opened.

SQL> show parameter db_cache_size

日志緩沖區(qū)

日志緩沖區(qū)是小型的、用于短期存儲(chǔ)將寫入到磁盤上的重做日志的變更向量的臨時(shí)區(qū)域。主要作用是提供更加快的日志處理效率。

共享池

共享池的大小也對(duì)性能產(chǎn)生重要影響
1. 它應(yīng)該足夠大,以便緩存所有頻繁執(zhí)行的代碼和頻繁訪問(wèn)的對(duì)象定義。如果共享池過(guò)小,則性能下降,因?yàn)榉?wù)器會(huì)話將反復(fù)搶奪其中的空間來(lái)分析語(yǔ)句,此后,這些語(yǔ)句會(huì)被其他語(yǔ)句重寫,在重新執(zhí)行時(shí),將不得不再次分析。如果共享池小于最優(yōu)容量,則性能將下降。但有一個(gè)最小容量,如果低于此限度,則語(yǔ)句將失敗。
2. 但也不能過(guò)大,以至于連僅執(zhí)行一次的語(yǔ)句也要緩存。過(guò)大的共享池也會(huì)對(duì)性能產(chǎn)生不良影響,因?yàn)樗阉餍枰臅r(shí)間過(guò)長(zhǎng)。

確定最優(yōu)容量是一個(gè)性能調(diào)整問(wèn)題,大多數(shù)數(shù)據(jù)庫(kù)都需要一個(gè)數(shù)百M(fèi)B的共享池。有些應(yīng)用程序需要1GB以上的共享池,但很少有應(yīng)用程序能夠在共享池小于100MB時(shí)充分運(yùn)行。共享池內(nèi)有下列三種數(shù)據(jù)結(jié)構(gòu):

  • 庫(kù)緩沖:存儲(chǔ)最近執(zhí)行的代碼
  • 數(shù)據(jù)字典緩存:存儲(chǔ)最近使用的對(duì)象定義
  • PL/SQL緩沖區(qū):存儲(chǔ)的PL/SQL對(duì)象是過(guò)程、函數(shù)、打包的過(guò)程、打包的函數(shù)、對(duì)象類型定義和觸發(fā)器。

手動(dòng)的調(diào)整共享池的大小

select COMPONENT,CURRENT_SIZE,MIN_SIZE,MAX_SIZE from v$sga_dynamic_components;   //顯示可以動(dòng)態(tài)重設(shè)大小的SGA組件的當(dāng)前最大和最小容量

ALTER SYSTEM SET SHARED_POOL_SIZE = 110M;

其他結(jié)構(gòu)

這里暫時(shí)不做詳細(xì)介紹。
大型池
主要用途是供共享的服務(wù)器進(jìn)程使用。
JAVA池
只有當(dāng)應(yīng)用程序需要在數(shù)據(jù)庫(kù)中運(yùn)行java存儲(chǔ)程序時(shí),才需要java池。

進(jìn)程結(jié)構(gòu)

進(jìn)程結(jié)構(gòu)主要有后臺(tái)進(jìn)程用戶連接進(jìn)程兩大類。

用戶連接進(jìn)程

Oracle架構(gòu)_數(shù)據(jù)庫(kù)底層原理、機(jī)制 (授人以漁),數(shù)據(jù)庫(kù)資料,oracle

用戶連接進(jìn)程是連接用戶和Oracle Instance的橋梁。只有在User與Instance建立了連接以后,User才能夠?qū)racle Server進(jìn)行操作。

用戶連接進(jìn)程?=?用戶進(jìn)程?+?服務(wù)進(jìn)程?+?PGA

用戶進(jìn)程User Process

當(dāng)一個(gè)Database User請(qǐng)求連接到Oracle Server時(shí),Oracle Server會(huì)創(chuàng)建User Process。
User Process的作用

  • 為Database User與Server Process建立連接
  • 并不會(huì)直接與Oracle Server交互

connect連接:是User和Server Process之間的通信通道。

Oracle架構(gòu)_數(shù)據(jù)庫(kù)底層原理、機(jī)制 (授人以漁),數(shù)據(jù)庫(kù)資料,oracle

Server Process服務(wù)進(jìn)程

用于處理Database User和Oracle Server之間的連接。
當(dāng)一個(gè)User與User Process建立了一個(gè)connect后,Oracle Server會(huì)創(chuàng)建一個(gè)Server Process。然后再由User Process與Server Process建立了連接之后,Server Process會(huì)通過(guò)用戶提交的請(qǐng)求信息來(lái)確定與oracle instance建立一個(gè)會(huì)話。
Server Process的作用

  • 與Oracle Server直接交互
  • 復(fù)制執(zhí)行和返回結(jié)果

Session會(huì)話:一個(gè)用戶通過(guò)User Process(本質(zhì)是通過(guò)Server Process)與Oracle Instance建立連接后稱之為一個(gè)會(huì)話,一個(gè)用戶可以建立多個(gè)會(huì)話,即同時(shí)使用同一個(gè)用戶可以多次的連接到同一個(gè)實(shí)例,也就是說(shuō)多個(gè)session可以使用同一個(gè)connect。

Oracle架構(gòu)_數(shù)據(jù)庫(kù)底層原理、機(jī)制 (授人以漁),數(shù)據(jù)庫(kù)資料,oracle

程序全局區(qū)PGA

Oracle架構(gòu)_數(shù)據(jù)庫(kù)底層原理、機(jī)制 (授人以漁),數(shù)據(jù)庫(kù)資料,oracle

PGA:Oracle Server Process分配來(lái)專門用于當(dāng)前User Session的內(nèi)存區(qū)。該區(qū)域是私有的,不同的用戶擁有不同的PGA。

PGA包含了Server Process數(shù)據(jù)和控制信息的內(nèi)存區(qū)域。,由下列3個(gè)部分組成:
1. ??臻g:存儲(chǔ)Session的變量、數(shù)組等的內(nèi)存空間。
2. Session Info:如果運(yùn)行的不是多線程服務(wù)器,會(huì)話信息將保存在PGA中,如果是多線程服務(wù)器,則保存在SGA中。
3. 私有SQL區(qū):用來(lái)保存綁定變量(binding variables)和運(yùn)行時(shí)緩沖區(qū)(runtime buffers)等信息。

Oracle的connect連接和session會(huì)話與User Process緊密相關(guān)

注意:在RDBMS中由db\_nameinstance\_name共同確定一個(gè)Database,所以Instance_name被用于Oracle與OS之間的聯(lián)系同時(shí)也被用于Oracle Server與外部連接時(shí)使用。

所以在User提交連接請(qǐng)求的時(shí)候,User Process首先會(huì)與Server Process建立Connect,然后Server Process會(huì)通過(guò)請(qǐng)求中所包含的db\_nameInstance\_name來(lái)確定需要且可以被連接的數(shù)據(jù)庫(kù)(RDBMS可以存在多個(gè)數(shù)據(jù)庫(kù)),這樣就確保了RDBMS在擁有多個(gè)數(shù)據(jù)庫(kù)的情況下,還能夠保證每一個(gè)Database的獨(dú)立性。而且同一個(gè)Database可以被多個(gè)屬于這個(gè)Databse的不同用戶發(fā)起的Instance連接。這一個(gè)功能是非常有必要的,因?yàn)槊恳粋€(gè)不同的數(shù)據(jù)庫(kù)中都包含有同名的sys、system等系統(tǒng)用戶。

后臺(tái)進(jìn)程

后臺(tái)進(jìn)程主要是完成數(shù)據(jù)庫(kù)管理任務(wù) ,后臺(tái)進(jìn)程是Oracle Instance和Oracle Database的聯(lián)系紐帶,分為核心進(jìn)程和非核心進(jìn)程。
1. 核心進(jìn)程:核心進(jìn)程,必須存在,有一個(gè)終止,所有數(shù)據(jù)庫(kù)進(jìn)程全部終止,實(shí)例崩潰!其中五大進(jìn)程全都是核心進(jìn)程。
2. 非核心進(jìn)程:完成數(shù)據(jù)庫(kù)的額外功能,非核心進(jìn)程死亡數(shù)據(jù)庫(kù)不會(huì)崩潰!

常用的核心進(jìn)程
Oracle架構(gòu)_數(shù)據(jù)庫(kù)底層原理、機(jī)制 (授人以漁),數(shù)據(jù)庫(kù)資料,oracle

在用戶訪問(wèn)數(shù)據(jù)庫(kù)時(shí),首先會(huì)提交請(qǐng)求,再分配SGA內(nèi)存,創(chuàng)建并啟動(dòng)后臺(tái)進(jìn)程和實(shí)例,最后建立連接和會(huì)話。Oracle Server運(yùn)行過(guò)程中必須啟動(dòng)上面的前五個(gè)進(jìn)程。否則實(shí)例無(wú)法創(chuàng)建。

查看后臺(tái)進(jìn)程:

SQL>select name,description from v$bgprocess where paddr<>'00';

NAME  DESCRIPTION
----- ----------------------------------------------------------------
PMON  process cleanup
PSP0  process spawner 0
MMAN  Memory Manager
DBW0  db writer process 0
LGWR  Redo etc.
CKPT  checkpoint
SMON  System Monitor Process
RECO  distributed recovery
CJQ0  Job Queue Coordinator
QMNC  AQ Coordinator
MMON  Manageability Monitor Process

NAME  DESCRIPTION
----- ----------------------------------------------------------------
MMNL  Manageability Monitor Process 2

數(shù)據(jù)庫(kù)寫入進(jìn)程(DBWn)

Oracle架構(gòu)_數(shù)據(jù)庫(kù)底層原理、機(jī)制 (授人以漁),數(shù)據(jù)庫(kù)資料,oracle

Server process連接Oracle后,通過(guò)數(shù)據(jù)庫(kù)寫進(jìn)程(DBWn)將數(shù)據(jù)緩沖區(qū)中的“臟緩沖區(qū)”的數(shù)據(jù)塊寫入到存儲(chǔ)結(jié)構(gòu)(數(shù)據(jù)文件、磁盤文件)

Database writer (DBWn)數(shù)據(jù)庫(kù)寫進(jìn)程
只做一件事,將數(shù)據(jù)寫到磁盤。就是將數(shù)據(jù)庫(kù)的變化寫入到數(shù)據(jù)文件。
該進(jìn)程最多20 個(gè),即使你有36 個(gè)CPU 也只能最多有20 個(gè)數(shù)據(jù)庫(kù)寫進(jìn)程。
進(jìn)程名稱DBW0-DBW9 DBWa-DBWj
注意:數(shù)據(jù)庫(kù)寫進(jìn)程越多,寫數(shù)據(jù)的效率越高。該進(jìn)程的個(gè)數(shù)應(yīng)該和cpu的個(gè)數(shù)對(duì)應(yīng),如果設(shè)置的數(shù)據(jù)庫(kù)寫進(jìn)程數(shù)大于CPU 的個(gè)數(shù)也不會(huì)有太明顯的效果,因?yàn)镃PU 是分時(shí)的。

檢查點(diǎn)(CKPT)

Oracle架構(gòu)_數(shù)據(jù)庫(kù)底層原理、機(jī)制 (授人以漁),數(shù)據(jù)庫(kù)資料,oracle

Checkpoint (CKPT)檢查點(diǎn)進(jìn)程
主要用戶更新數(shù)據(jù)文件頭,更新控制文件和觸發(fā)DBWn數(shù)據(jù)庫(kù)寫進(jìn)程。
Ckpt 進(jìn)程會(huì)降低數(shù)據(jù)庫(kù)性能,但是提高數(shù)據(jù)庫(kù)崩潰時(shí),自我恢復(fù)的性能。我們可以理解為階段性的保存數(shù)據(jù),一定的條件滿足就觸發(fā),執(zhí)行DBWn存盤操作。

進(jìn)程監(jiān)視進(jìn)程(PMON)

Oracle架構(gòu)_數(shù)據(jù)庫(kù)底層原理、機(jī)制 (授人以漁),數(shù)據(jù)庫(kù)資料,oracle

Process monitor (PMON)進(jìn)程監(jiān)測(cè)進(jìn)程
PMON在后臺(tái)進(jìn)程執(zhí)行失敗后負(fù)責(zé)清理數(shù)據(jù)庫(kù)緩存和閑置資源,是Oracle的自動(dòng)維護(hù)機(jī)制。

  • 清除死進(jìn)程
  • 重新啟動(dòng)部分進(jìn)程(如調(diào)度進(jìn)程)
  • 監(jiān)聽(tīng)的自動(dòng)注冊(cè)
  • 回滾事務(wù)
  • 釋放鎖
  • 釋放其他資

系統(tǒng)監(jiān)視進(jìn)程(SMON)

Oracle架構(gòu)_數(shù)據(jù)庫(kù)底層原理、機(jī)制 (授人以漁),數(shù)據(jù)庫(kù)資料,oracle

System monitor (SMON)系統(tǒng)監(jiān)測(cè)進(jìn)程
SMON啟動(dòng)后會(huì)自動(dòng)的用于在實(shí)例崩潰時(shí)進(jìn)行數(shù)據(jù)庫(kù)實(shí)例自動(dòng)恢復(fù)。
清除作廢的排序臨時(shí)段,回收整理碎片,合并空閑空間,釋放臨時(shí)段,維護(hù)閃回的時(shí)間點(diǎn)。
在老數(shù)據(jù)庫(kù)版本中,當(dāng)我們大量刪除表的時(shí)候,會(huì)觀測(cè)到SMON進(jìn)程很忙,直到把所有的碎片空間都整理完畢。

重做日志文件和日志寫入進(jìn)程

Oracle架構(gòu)_數(shù)據(jù)庫(kù)底層原理、機(jī)制 (授人以漁),數(shù)據(jù)庫(kù)資料,oracle

主要用于記錄數(shù)據(jù)庫(kù)的改變和記錄數(shù)據(jù)庫(kù)被改變之前的原始狀態(tài),所以應(yīng)當(dāng)對(duì)其作多重備份,用于恢復(fù)和排錯(cuò)。

激活LGWR的情況:

  • 提交指令
  • 日志緩沖區(qū)超過(guò)1/3
  • 每三秒
  • 每次DBWn執(zhí)行之前

歸檔進(jìn)程(ARCn)

歸檔進(jìn)程(ARCn)是非核心進(jìn)程。
Oracle架構(gòu)_數(shù)據(jù)庫(kù)底層原理、機(jī)制 (授人以漁),數(shù)據(jù)庫(kù)資料,oracle

存儲(chǔ)結(jié)構(gòu)

Oracle RDBMS存儲(chǔ)結(jié)構(gòu)主要由Database組成。
Oracle架構(gòu)_數(shù)據(jù)庫(kù)底層原理、機(jī)制 (授人以漁),數(shù)據(jù)庫(kù)資料,oracle

又能夠?qū)atabase分為物理結(jié)構(gòu)邏輯結(jié)構(gòu)來(lái)理解。

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

Database物理結(jié)構(gòu):是Database在操作系統(tǒng)中的文件集合,即:磁盤上的物理文件,主要由數(shù)據(jù)文件、控制文件、重做日志文件、歸檔日志文件、參數(shù)文件、口令文件組成。

Data Files

數(shù)據(jù)文件是數(shù)據(jù)的存儲(chǔ)倉(cāng)庫(kù)。
? 包括所有的數(shù)據(jù)庫(kù)數(shù)據(jù)
? 只能屬于一個(gè)數(shù)據(jù)庫(kù)
? 來(lái)自于被稱為”表空間”的數(shù)據(jù)庫(kù)存儲(chǔ)邏輯單元
? 可以直接被讀進(jìn)內(nèi)存,在執(zhí)行SQL語(yǔ)句的時(shí)候,會(huì)將相關(guān)的數(shù)據(jù)文件副本加載如數(shù)據(jù)緩沖區(qū)。
? 通過(guò)備份策略可以使數(shù)據(jù)文件得到保護(hù)

Redo Log Files

重做日志文件包含對(duì)數(shù)據(jù)庫(kù)所做的更改操作記錄,在Oracle發(fā)生故障時(shí)能夠恢復(fù)數(shù)據(jù)。
能夠恢復(fù)數(shù)據(jù)的原理:重做日志文件會(huì)按時(shí)間的順序,將應(yīng)用于數(shù)據(jù)庫(kù)的一連串的變更向量(做了什么操作)存儲(chǔ)起來(lái)(即將變更的地方標(biāo)記起來(lái))。其中包含了所有已經(jīng)完成操作的信息和完成操作之前的數(shù)據(jù)庫(kù)狀態(tài)。如果數(shù)據(jù)文件受損,就可以將這些變更向量應(yīng)用于數(shù)據(jù)文件備份來(lái)進(jìn)行重做(重建)工作,將它恢復(fù)到發(fā)生故障的那一刻前的狀態(tài)。重做日志文件又分為下面兩種類型:

  • 聯(lián)機(jī)重做日志文件:記錄連續(xù)的數(shù)據(jù)庫(kù)操作
  • 歸檔日志文件Archived Log Files:用于時(shí)間點(diǎn)恢復(fù),當(dāng)RedoLogFiles存滿時(shí),會(huì)對(duì)這些日志進(jìn)行歸檔備份,以便以后還原數(shù)據(jù)時(shí)使用。
    • 查看redo log info
SQL> select member from v$logfile;    # v$logfile數(shù)據(jù)字典,記錄了redolog文件的列表 MEMBER
--------------------------------------------------------------------------------
 /u01/oradata/demo/redo03.log
 /u01/oradata/demo/redo02.log
 /u01/oradata/demo/redo01.log

Control Files

控制文件包含維護(hù)和驗(yàn)證數(shù)據(jù)庫(kù)完整性的必要的信息。
它記錄了聯(lián)機(jī)重做日志文件、數(shù)據(jù)文件的位置、更新的歸檔日志文件的位置。它還存儲(chǔ)著維護(hù)數(shù)據(jù)庫(kù)完整性所需的信息,如數(shù)據(jù)庫(kù)名??刂莆募且远M(jìn)制型式存儲(chǔ)的,用戶無(wú)法修改控制文件的內(nèi)容??刂莆募贿^(guò)數(shù)MB,卻起著至關(guān)重要的作用。

Parameter File

實(shí)例參數(shù)文件,當(dāng)啟動(dòng)oracle實(shí)例時(shí),SGA結(jié)構(gòu)會(huì)根據(jù)此參數(shù)文件的設(shè)置內(nèi)存,后臺(tái)進(jìn)程會(huì)據(jù)此啟動(dòng)。

Password File

用戶通過(guò)提交username/password來(lái)建立會(huì)話,Oracle根據(jù)存儲(chǔ)在數(shù)據(jù)字典的用戶定義對(duì)用戶名和口令進(jìn)行驗(yàn)證。

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

表空間就是典型的Oracle邏輯結(jié)構(gòu)類型 ——?里面存放著若干的數(shù)據(jù)文件
表空間:用于存儲(chǔ)數(shù)據(jù)庫(kù)對(duì)象的邏輯空間,表空間是在數(shù)據(jù)庫(kù)中開(kāi)辟的一個(gè)空間,用于存放數(shù)據(jù)庫(kù)的對(duì)象,它是信息存儲(chǔ)的最大邏輯單位,是存放數(shù)據(jù)庫(kù)文件的地方,其中數(shù)據(jù)又被存放在表空間中的數(shù)據(jù)文件中。一個(gè)數(shù)據(jù)庫(kù)可以由多個(gè)表空間組成,Oracle的調(diào)優(yōu)就是通過(guò)表空間來(lái)實(shí)現(xiàn)的。(Oracle數(shù)據(jù)庫(kù)獨(dú)特的高級(jí)應(yīng)用)

表空間的作用:分類管理、批量處理; 將瑣碎的磁盤文件整合、抽象處理成為邏輯結(jié)構(gòu)。這樣更加便于我們?nèi)ス芾頂?shù)據(jù)庫(kù)。

邏輯空間到物理空間的映射

段、區(qū)和塊
Oracle架構(gòu)_數(shù)據(jù)庫(kù)底層原理、機(jī)制 (授人以漁),數(shù)據(jù)庫(kù)資料,oracle

執(zhí)行一條寫入的SQL語(yǔ)句時(shí)在RDBMS中都發(fā)生了什么

Oracle架構(gòu)_數(shù)據(jù)庫(kù)底層原理、機(jī)制 (授人以漁),數(shù)據(jù)庫(kù)資料,oracle
1. 將SQL語(yǔ)句加載入數(shù)據(jù)庫(kù)緩沖區(qū)
2. 將SQL語(yǔ)句要操作的數(shù)據(jù)文件副本加載入數(shù)據(jù)庫(kù)緩沖區(qū)
3. 執(zhí)行SQL語(yǔ)句,修改數(shù)據(jù)文件副本,形成“臟緩沖區(qū)”
4. CKPT檢測(cè)到“臟緩沖區(qū)”,調(diào)用DBWn
5. 在DBWn運(yùn)行之前,先運(yùn)行了LGWR,將數(shù)據(jù)文件的原始狀態(tài)和數(shù)據(jù)庫(kù)的改變記錄到Redo Log Files
6. 運(yùn)行DBWn,將“臟緩沖區(qū)的內(nèi)容寫入到數(shù)據(jù)文件”
7. 同時(shí)CKPT修改控制文件和數(shù)據(jù)文件頭
8. SMON回收不必要的空閑資源

最后

最后我們舉個(gè)例子來(lái)看看Oracle RDBMS是怎么運(yùn)作的
Oracle架構(gòu)_數(shù)據(jù)庫(kù)底層原理、機(jī)制 (授人以漁),數(shù)據(jù)庫(kù)資料,oracle

Oracle架構(gòu)_數(shù)據(jù)庫(kù)底層原理、機(jī)制 (授人以漁),數(shù)據(jù)庫(kù)資料,oracle文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-808705.html

  1. User訪問(wèn)Oracle Server之前提交一個(gè)請(qǐng)求(包含了db_name、instance_name、username、password等信息),Oracle Server接收到請(qǐng)求并通過(guò)Password File的驗(yàn)證后,分配SGA內(nèi)存池,啟動(dòng)后臺(tái)進(jìn)程同時(shí)創(chuàng)建并啟動(dòng)實(shí)例。
  2. 在啟動(dòng)實(shí)例之后User Process與Server Process建立Connect。
  3. 再通過(guò)Server process和Oracle Instance完成建立Sesscion。
  4. 用戶執(zhí)行SQL語(yǔ)句,由server process接收到并直接與Oracle交互。
  5. SQL語(yǔ)句通過(guò)Server Process到達(dá)Oracle Instance,再將SQL載入數(shù)據(jù)庫(kù)緩沖區(qū)。
  6. Server Process通知Oracle Database將與SQL語(yǔ)句相關(guān)的數(shù)據(jù)塊副本加載到緩沖區(qū)中。
  7. 在數(shù)據(jù)庫(kù)緩存區(qū)執(zhí)行SQL語(yǔ)句,并產(chǎn)生”臟緩沖區(qū)”。
  8. 由CKPT檢查點(diǎn)進(jìn)程檢查到”臟緩沖區(qū)”,并調(diào)用DBWn數(shù)據(jù)庫(kù)寫進(jìn)程,但在DBWn執(zhí)行之前,應(yīng)該由LGWR先將數(shù)據(jù)文件的原始狀態(tài)、數(shù)據(jù)庫(kù)的改變等信息記錄到Redo Log Files。
  9. 將更新的內(nèi)容寫入到磁盤中的數(shù)據(jù)文件。
  10. 返回結(jié)果給用戶

到了這里,關(guān)于Oracle架構(gòu)_數(shù)據(jù)庫(kù)底層原理、機(jī)制 (授人以漁)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 構(gòu)建高可用性數(shù)據(jù)庫(kù)架構(gòu):深入探索Oracle Active Data Guard(ADG)

    隨著企業(yè)數(shù)據(jù)規(guī)模的不斷增長(zhǎng)和業(yè)務(wù)的復(fù)雜化,數(shù)據(jù)庫(kù)的高可用性和可靠性變得尤為重要。Oracle Active Data Guard(ADG)作為Oracle數(shù)據(jù)庫(kù)提供的一種高可用性解決方案,在實(shí)時(shí)備份和災(zāi)難恢復(fù)方面發(fā)揮著重要作用。本文將深入探討ADG的原理、配置步驟、優(yōu)勢(shì)以及故障處理方法,旨

    2024年04月15日
    瀏覽(102)
  • 精華推薦 |【Redis技術(shù)探索】「底層架構(gòu)原理」幫你徹底搞定Sentinel的實(shí)現(xiàn)原理運(yùn)作機(jī)制

    精華推薦 |【Redis技術(shù)探索】「底層架構(gòu)原理」幫你徹底搞定Sentinel的實(shí)現(xiàn)原理運(yùn)作機(jī)制

    最美好的生活方式是和一群志同道合的人,一起奔跑在理想的路上,回頭有一路的故事,低頭有堅(jiān)定的腳步,抬頭有清晰的遠(yuǎn)方! ??? Sentinel出現(xiàn)的前提背景 在前面Redis技術(shù)系列的章節(jié)中,我們介紹了相關(guān)Redis持久化機(jī)制和Redis主從架構(gòu)的探究。兩者的相輔相成實(shí)現(xiàn)了Redis的

    2023年04月09日
    瀏覽(54)
  • 【數(shù)據(jù)庫(kù)】執(zhí)行計(jì)劃中的兩趟算法機(jī)制原理,基于排序算法來(lái)分析,算法的限制,執(zhí)行代價(jià)以及優(yōu)化

    【數(shù)據(jù)庫(kù)】執(zhí)行計(jì)劃中的兩趟算法機(jī)制原理,基于排序算法來(lái)分析,算法的限制,執(zhí)行代價(jià)以及優(yōu)化

    ? 專欄內(nèi)容 : 手寫數(shù)據(jù)庫(kù)toadb 本專欄主要介紹如何從零開(kāi)發(fā),開(kāi)發(fā)的步驟,以及開(kāi)發(fā)過(guò)程中的涉及的原理,遇到的問(wèn)題等,讓大家能跟上并且可以一起開(kāi)發(fā),讓每個(gè)需要的人成為參與者。 本專欄會(huì)定期更新,對(duì)應(yīng)的代碼也會(huì)定期更新,每個(gè)階段的代碼會(huì)打上tag,方便階段學(xué)

    2024年02月05日
    瀏覽(26)
  • 【數(shù)據(jù)庫(kù)】樹(shù)形數(shù)據(jù)組織架構(gòu)下的封鎖并發(fā)控制,B樹(shù)索引并發(fā)訪問(wèn)控制,樹(shù)協(xié)議原理及案例分析

    【數(shù)據(jù)庫(kù)】樹(shù)形數(shù)據(jù)組織架構(gòu)下的封鎖并發(fā)控制,B樹(shù)索引并發(fā)訪問(wèn)控制,樹(shù)協(xié)議原理及案例分析

    ? 專欄內(nèi)容 : 手寫數(shù)據(jù)庫(kù)toadb 本專欄主要介紹如何從零開(kāi)發(fā),開(kāi)發(fā)的步驟,以及開(kāi)發(fā)過(guò)程中的涉及的原理,遇到的問(wèn)題等,讓大家能跟上并且可以一起開(kāi)發(fā),讓每個(gè)需要的人成為參與者。 本專欄會(huì)定期更新,對(duì)應(yīng)的代碼也會(huì)定期更新,每個(gè)階段的代碼會(huì)打上tag,方便階段學(xué)

    2024年02月04日
    瀏覽(27)
  • 數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)-Syabse數(shù)據(jù)庫(kù)存儲(chǔ)頁(yè)底層數(shù)據(jù)雜亂的數(shù)據(jù)恢復(fù)案例

    數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)-Syabse數(shù)據(jù)庫(kù)存儲(chǔ)頁(yè)底層數(shù)據(jù)雜亂的數(shù)據(jù)恢復(fù)案例

    數(shù)據(jù)庫(kù)恢復(fù)環(huán)境: Sybase版本:SQL Anywhere 8.0。 數(shù)據(jù)庫(kù)故障: 數(shù)據(jù)庫(kù)所在的設(shè)備意外斷電后,數(shù)據(jù)庫(kù)無(wú)法啟動(dòng)。 錯(cuò)誤提示: 使用Sybase Central連接后報(bào)錯(cuò): ? ? 數(shù)據(jù)庫(kù)故障分析: 經(jīng)過(guò)北亞企安數(shù)據(jù)恢復(fù)工程師檢測(cè),定位到數(shù)據(jù)庫(kù)無(wú)法啟動(dòng)的原因:突然斷電導(dǎo)致Sybase數(shù)據(jù)庫(kù)無(wú)法正

    2024年02月15日
    瀏覽(22)
  • etcd底層支持的數(shù)據(jù)庫(kù)有哪些

    etcd底層的數(shù)據(jù)庫(kù)可以更換。在當(dāng)前版本的etcd中,它使用的是BoltDB作為默認(rèn)的后端存儲(chǔ)引擎。但是,etcd提供了接口允許您更換數(shù)據(jù)庫(kù)后端,以便根據(jù)需要選擇更合適的存儲(chǔ)引擎。 以下是etcd支持的一些后端數(shù)據(jù)庫(kù)選項(xiàng): BoltDB(默認(rèn)) :BoltDB是一個(gè)嵌入式的鍵值存儲(chǔ)數(shù)據(jù)庫(kù),具

    2024年02月15日
    瀏覽(22)
  • 數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)-Oracle數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)案例

    數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)-Oracle數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)案例

    數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)環(huán)境: Oracle數(shù)據(jù)庫(kù)ASM磁盤組有4塊成員盤。 數(shù)據(jù)庫(kù)故障分析: Oracle數(shù)據(jù)庫(kù)ASM磁盤組掉線 ,ASM實(shí)例無(wú)法掛載,用戶聯(lián)系我們要求恢復(fù)oracle數(shù)據(jù)庫(kù)。 數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)工程師拿到磁盤后,先將所有磁盤以只讀方式進(jìn)行扇區(qū)級(jí)別的鏡像備份,后續(xù)的數(shù)據(jù)分析和數(shù)據(jù)恢

    2024年02月13日
    瀏覽(40)
  • Oracle數(shù)據(jù)庫(kù)

    Oracle數(shù)據(jù)庫(kù)

    ①層次型數(shù)據(jù)庫(kù) ②網(wǎng)狀型數(shù)據(jù)庫(kù) ③關(guān)系型數(shù)據(jù)庫(kù)(主要介紹) E-R圖:屬性(橢圓形),實(shí)體(矩形),聯(lián)系(菱形-一對(duì)一、一對(duì)多、多對(duì)多) 注:有的聯(lián)系也有屬性 關(guān)系型數(shù)據(jù)庫(kù)的設(shè)計(jì)范式: 第一范式(1NF):屬性不可再分,字段保證原子性 第二范式(2NF):在滿足1

    2024年02月08日
    瀏覽(33)
  • Oracle 數(shù)據(jù)庫(kù)恢復(fù)刪除的數(shù)據(jù)

    需求描述: 同事讓刪除臟數(shù)據(jù),結(jié)果刪錯(cuò)了,需要恢復(fù)數(shù)據(jù) 思路: 利用閃回恢復(fù)數(shù)據(jù)只能恢復(fù)15分鐘之內(nèi)的,后面undo空間會(huì)被重寫,就恢復(fù)不了,所以刪除數(shù)據(jù)后,要謹(jǐn)慎再三確認(rèn),若發(fā)現(xiàn)不對(duì),則利用閃回恢復(fù) 先查詢刪除時(shí)的時(shí)間節(jié)點(diǎn)的快照 查到時(shí)間戳之后 閃回恢復(fù)數(shù)

    2024年01月24日
    瀏覽(36)
  • 【數(shù)據(jù)庫(kù)】日常使用PL/SQL 登錄ORACLE 數(shù)據(jù)庫(kù)查詢數(shù)據(jù)

    一、PL/SQL 登錄方式 username: ##訪問(wèn)數(shù)據(jù)庫(kù)的賬號(hào) password: ##訪問(wèn)數(shù)據(jù)庫(kù)的密碼 Databse: ##數(shù)據(jù)庫(kù)IP地址/實(shí)例名 數(shù)據(jù)庫(kù)集群心跳地址/實(shí)例名 Connect as : ##Normal,如果使用sysdba賬戶登錄選擇SYSDBA 二、PL/SQL使用SQL語(yǔ)句查詢 點(diǎn)擊上方導(dǎo)航欄,New,選擇SQL Window,即可再次輸入要查詢的

    2024年02月19日
    瀏覽(30)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包