oracle进程结构中完成更新,Oracle 进程结构
Oracle進(jìn)程結(jié)構(gòu)
進(jìn)程是動(dòng)態(tài)創(chuàng)建的,完成任務(wù)后就消亡;而程序是靜態(tài)的實(shí)體,程序是可以復(fù)制、編輯的。進(jìn)程強(qiáng)調(diào)的是執(zhí)行過程,而程序僅僅是指令的有序集合;進(jìn)程在內(nèi)存中,程序在外存中。
ORACLE分為用戶進(jìn)程和ORACLE進(jìn)程。
l用戶進(jìn)程
當(dāng)用戶執(zhí)行一個(gè)基于ORACLE數(shù)據(jù)庫的應(yīng)用程序時(shí),客戶端就會(huì)創(chuàng)建一個(gè)ORACLE的用戶進(jìn)程(如運(yùn)行的sqlplus、OEM都叫用戶進(jìn)程)。
用戶進(jìn)程通過連接登錄到ORACLE服務(wù)器,ORACLE服務(wù)器上就產(chǎn)生一個(gè)對(duì)應(yīng)的服務(wù)器進(jìn)程(Oracle服務(wù)器的“外交部”);該服務(wù)器進(jìn)程代表運(yùn)行在客戶端的用戶進(jìn)程與服務(wù)器通信。
lORACLE進(jìn)程
Oracle進(jìn)程可以分為服務(wù)器進(jìn)程和后臺(tái)進(jìn)程服務(wù)器進(jìn)程。
2服務(wù)器進(jìn)程
主要是服務(wù)于客戶端的用戶進(jìn)程。服務(wù)器進(jìn)程又可以分為:專用服務(wù)器進(jìn)程(只為一個(gè)用戶進(jìn)程提供服務(wù))和共享服務(wù)器進(jìn)程(可以為多個(gè)用戶進(jìn)程提供服務(wù))。
2服務(wù)器進(jìn)程的任務(wù):
A.解析并執(zhí)行用戶所提交的SQL語句;
B.搜索SGA區(qū)的數(shù)據(jù)庫緩存,決定是否讀取數(shù)據(jù)文件。如果數(shù)據(jù)塊不在SGA區(qū)的數(shù)據(jù)庫緩存中,就將其從數(shù)據(jù)文件中讀入;
C.將查詢執(zhí)行的結(jié)構(gòu)數(shù)據(jù)返回給用戶。
2后臺(tái)進(jìn)程(BackgroundProcess)
服務(wù)器進(jìn)程是由后臺(tái)進(jìn)程提供支持的,后臺(tái)進(jìn)程主要完成的任務(wù)是:
A.在內(nèi)存和外存之間進(jìn)行I/O操作;
B.監(jiān)視各個(gè)進(jìn)程的狀態(tài);
C.協(xié)調(diào)各個(gè)進(jìn)程的任務(wù);
D.維護(hù)系統(tǒng)的性能;
E.保證系統(tǒng)的可靠性;
可使用以下查詢來檢查數(shù)據(jù)庫中啟動(dòng)的后臺(tái)進(jìn)程個(gè)數(shù)及其名稱
SQL> SELECT * FROM V$BGPROCESS
常用的后臺(tái)進(jìn)程:
nSMON(SystemMonitor)系統(tǒng)監(jiān)視進(jìn)程:
ü啟動(dòng)條件:隨ORACLE數(shù)據(jù)庫系統(tǒng)啟動(dòng);運(yùn)行期間ORACLE可以喚醒SMON進(jìn)程,以檢查是否需要執(zhí)行它所負(fù)責(zé)的工作;如果其他任何進(jìn)程需要使用SMON進(jìn)程的功能時(shí),將隨時(shí)喚醒SMON進(jìn)程。
ü作用:
A、在例程啟動(dòng)時(shí)負(fù)責(zé)對(duì)數(shù)據(jù)庫進(jìn)行恢復(fù)。如果是非正常關(guān)閉數(shù)據(jù)庫,則當(dāng)下次啟動(dòng)例程時(shí),SMON進(jìn)程會(huì)自動(dòng)讀取重做日志文件,對(duì)數(shù)據(jù)庫進(jìn)行恢復(fù)(即執(zhí)行將已提交的事務(wù)寫入數(shù)據(jù)文件中、回退未提交的事務(wù)等操作);
B、清除已經(jīng)分配但不再使用的表空間中的臨時(shí)段(如果表空間中有大量的盤區(qū),則清除就會(huì)花費(fèi)大量時(shí)間,就會(huì)影響數(shù)據(jù)庫啟動(dòng)時(shí)的性能)。
C、合并基于數(shù)據(jù)字典管理的各個(gè)表空間中位置相鄰的空閑盤區(qū),使之更容易分配。
ü備注說明:如果某個(gè)表空間的存儲(chǔ)參數(shù)PCTINCREASE被設(shè)置為0,則SMON進(jìn)程就不會(huì)對(duì)該表空間中的空閑盤區(qū)進(jìn)行合并操作。
nPMON(Process Monitor)進(jìn)程監(jiān)視進(jìn)程;
ü啟動(dòng)條件:
A、需要啟動(dòng)、清除中斷或失敗的用戶進(jìn)程時(shí)(即對(duì)ORACLE數(shù)據(jù)庫的連接發(fā)生崩潰、掛起或其他非正常終止等);清除操作還包括非正常中斷的用戶進(jìn)程留下的孤兒會(huì)話,回退未提交的事務(wù),釋放會(huì)話所占用的鎖、SGA區(qū)、PGA區(qū)的資源。
B、運(yùn)行期間ORACLE可以喚醒PMON進(jìn)程,以檢查是否需要執(zhí)行它所負(fù)責(zé)的工作;如果其他任何進(jìn)程需要使用PMON進(jìn)程的功能時(shí),將隨時(shí)喚醒PMON進(jìn)程。
C、PMON是在單獨(dú)的數(shù)據(jù)庫中啟動(dòng)的,而分布式數(shù)據(jù)庫中是RECO恢復(fù)進(jìn)程來完成PMON進(jìn)程的任務(wù)的。
ü作用:
A、恢復(fù)中斷或失敗的用戶進(jìn)程、服務(wù)器進(jìn)程;
B、清除非正常中斷的進(jìn)程留下的孤兒會(huì)話;
C、回退未提交的事務(wù),重置活動(dòng)事務(wù)的狀態(tài),從系統(tǒng)活動(dòng)進(jìn)程中刪除用戶進(jìn)程標(biāo)識(shí)號(hào)(ID);
D、釋放進(jìn)程所占用的各種資源,并通過自動(dòng)回退事務(wù)來解決死鎖,釋放用戶所擁有的表和行上的鎖;
E、定期檢查服務(wù)器進(jìn)程和調(diào)度進(jìn)程,如果它們因失敗而被異常掛起,則自動(dòng)重新啟動(dòng)它們。
nDBWn(Database Writer)數(shù)據(jù)庫寫進(jìn)程;
ü啟動(dòng)條件
A、當(dāng)DIRTY列表中的臟緩存塊達(dá)到一定數(shù)量(即初始化參數(shù)db_block_write_batch指定值的一半),DBWn進(jìn)程將臟緩存塊寫入數(shù)據(jù)文件(同時(shí)ORACLE將對(duì)控制文件和數(shù)據(jù)文件的頭部的同步序號(hào)SCN進(jìn)行修改,記錄下當(dāng)前數(shù)據(jù)庫的結(jié)構(gòu)和狀態(tài),以保證數(shù)據(jù)庫中物理文件之間的同步);
B、當(dāng)在LRU列表中找到一定數(shù)量(即初始化參數(shù)db_block_max_scan指定的值)的空閑緩存塊,但還不夠時(shí),為獲得更多的空閑緩存塊,DBWn進(jìn)程將臟緩存塊寫入數(shù)據(jù)文件;
C、當(dāng)出現(xiàn)檢查點(diǎn)LGWR進(jìn)程通知DBWn進(jìn)程進(jìn)行寫操作;
D、一個(gè)表空間被置于備份模式、脫機(jī)或只讀狀態(tài)時(shí);
E、DBWn進(jìn)程出現(xiàn)超時(shí)(Time_out)即大約3秒未啟動(dòng)時(shí)。
ü作用:
A、管理高速緩沖區(qū),保證服務(wù)器進(jìn)程總能找到空閑緩存塊,以便保存從數(shù)據(jù)文件中讀取的數(shù)據(jù)塊;
B、將DIRTY列表中的臟緩存塊寫入到數(shù)據(jù)文件中,獲取更多的空閑緩存塊;
C、使用LRU算法將最近正在使用的緩存塊即命中塊,繼續(xù)保留在LRU列表中,不必重新讀取數(shù)據(jù)文件;
D、DBRn進(jìn)程通過延遲寫入來優(yōu)化磁盤I/O操作,而服務(wù)器進(jìn)程只在數(shù)據(jù)高速緩存區(qū)中做修改。
ü備注說明:
A、DBWn進(jìn)程數(shù)最好不要超過CPU的個(gè)數(shù),因?yàn)槊總€(gè)處理器同時(shí)只能運(yùn)行1個(gè)DBWn進(jìn)程;
B、ORACLE默認(rèn)啟動(dòng)一個(gè)DBWn進(jìn)程,啟動(dòng)受初始化參數(shù)(DB_WRITER_PROCESS)的限制。可以設(shè)置初始化參數(shù)DB_BLOCK_CHECKPOINT_BATCH來設(shè)置每當(dāng)出現(xiàn)檢查點(diǎn)時(shí),DBWn進(jìn)程寫入的臟緩存塊的最大數(shù)量。增大該值,可以延長(zhǎng)啟動(dòng)DBWn進(jìn)程的時(shí)間間隔。
nLGWR(Log Writer)日志寫進(jìn)程;
ü啟動(dòng)條件:
A、用戶進(jìn)程通過COMMIT語句提交當(dāng)前事務(wù);
B、重做日志高速緩存被寫滿1/3時(shí),或含有1MB的重做信息時(shí);
C、DBWn進(jìn)程需要為檢查點(diǎn)清除臟緩存塊,即將臟緩存塊寫入數(shù)據(jù)文件時(shí);
D、LGWR進(jìn)程出現(xiàn)超時(shí),即大約3秒為啟動(dòng)LGWR進(jìn)程時(shí)。
ü作用:
A、負(fù)責(zé)管理重做日志高速緩沖區(qū),即將重做日志記錄從高速緩存區(qū)寫入到重做日志文件;
B、如果例程沒有啟動(dòng)CKPT檢查點(diǎn)進(jìn)程,則LGWR進(jìn)程就來完成檢查點(diǎn)執(zhí)行任務(wù)。
ü備注說明:
A、每個(gè)例程只有一個(gè)LGWR進(jìn)程;
B、LGWR進(jìn)程先于DBWn進(jìn)程啟動(dòng)。
nCKPT (CheckPoint)檢查點(diǎn)進(jìn)程
ü啟動(dòng)條件:
A、關(guān)閉數(shù)據(jù)庫時(shí);
B、一個(gè)重做日志文件被寫滿而產(chǎn)生日志切換時(shí);
C、滿足參數(shù)LOG_CHECKPOINT_TIMEOUT(指定檢查點(diǎn)之間的時(shí)間間隔(以秒為單位));
D、參數(shù)LOG_CHECKPOINT_INTERVAL(指定當(dāng)一定數(shù)量的操作系統(tǒng)數(shù)據(jù)塊(非ORACLE數(shù)據(jù)塊)被寫入重做日志文件時(shí),將觸發(fā)一個(gè)檢查點(diǎn))
ü作用:
A、觸發(fā)DBWn進(jìn)程,使其將自上一個(gè)檢查點(diǎn)之后的全部已經(jīng)修改的數(shù)據(jù)塊(臟緩存塊)寫入數(shù)據(jù)文件中;
B、保持?jǐn)?shù)據(jù)庫高速緩沖區(qū)與數(shù)據(jù)文件之間數(shù)據(jù)同步(用最新的檢查點(diǎn)信息更新控制文件和數(shù)據(jù)庫文件的文件頭);
C、檢查點(diǎn)信息會(huì)在恢復(fù)數(shù)據(jù)庫期間使用,當(dāng)SMON進(jìn)程恢復(fù)數(shù)據(jù)庫時(shí),SMON會(huì)決定最后在數(shù)據(jù)文件中的檢查點(diǎn)。(必須將數(shù)據(jù)文件的文件頭和控制文件中最后記錄的檢查點(diǎn)之后的聯(lián)機(jī)重做日志文件中的事務(wù)編號(hào)重新提交到數(shù)據(jù)文件中。)
ü備注說明:
A、不要設(shè)置不必要的檢查點(diǎn),或迫使不需要的檢查點(diǎn)發(fā)生;
B、縮短檢查點(diǎn)執(zhí)行的間隔,可以縮短數(shù)據(jù)庫恢復(fù)時(shí)所需的時(shí)間;
C、如果檢查點(diǎn)執(zhí)行的間隔短,將會(huì)產(chǎn)生過多的I/O操作;
D、應(yīng)該使LOG_CHECKPOINT_INTERVAL設(shè)置的操作系統(tǒng)塊數(shù)與重做日志文件的大小相匹配。
üORACLE在不同的時(shí)刻執(zhí)行不同級(jí)別的檢查點(diǎn),故檢查點(diǎn)有可分為4種:
A、數(shù)據(jù)庫檢查點(diǎn):每一次重做日志文件切換時(shí)都執(zhí)行數(shù)據(jù)庫檢查點(diǎn);使用NORMAL\TRANSACTIONAL\IMMEDIATE選項(xiàng)關(guān)閉數(shù)據(jù)庫時(shí),會(huì)執(zhí)行一個(gè)檢查點(diǎn);此時(shí)DBWn進(jìn)程將數(shù)據(jù)高速緩存區(qū)中的所有臟緩存塊都寫入數(shù)據(jù)文件中。
B、表空間檢查點(diǎn):將一個(gè)表空間設(shè)置為脫機(jī)狀態(tài)或備注為BACKUP模式,會(huì)執(zhí)行一個(gè)表空間檢查點(diǎn);此時(shí)DBWn只會(huì)將高速緩存區(qū)中的與該表空間相關(guān)的臟緩存塊寫入數(shù)據(jù)文件中。
C、手動(dòng)檢查點(diǎn):使用ALTER SYSTEM CHECKPOINT語句來手動(dòng)設(shè)置一個(gè)檢查點(diǎn)。
D、時(shí)間檢查點(diǎn):即每隔多久執(zhí)行一次檢查點(diǎn)。可以通過調(diào)整(LOG_CHECKPOINT_TIMEOUT和LOG_CHECKPOINT_INTERVAL)參數(shù)來改變檢查點(diǎn)實(shí)行的間隔。
nARCn(Archiver)歸檔進(jìn)程;
ü啟動(dòng)條件:
發(fā)生重做日志切換時(shí)(必須是歸檔模式下,并且初始化參數(shù)LOG_ARCHIVE_START為TRUE ,如果在歸檔模式下該參數(shù)是FALSE當(dāng)重做日志文件全部寫滿,數(shù)據(jù)庫將會(huì)被掛起。)
ü作用:避免數(shù)據(jù)庫崩潰無法恢復(fù)。
ü備注說明:
A、一個(gè)例程默認(rèn)只會(huì)啟動(dòng)一個(gè)歸檔進(jìn)程ARCn,當(dāng)ARCn正在歸檔一個(gè)重做日志文件時(shí),任何其他進(jìn)程都不能訪問這個(gè)重做日志文件。
B、為了避免LGWR進(jìn)程使用正在歸檔中的重做日志文件造成數(shù)據(jù)庫被掛起,LGWR進(jìn)程會(huì)根據(jù)需要主動(dòng)啟動(dòng)更多的歸檔進(jìn)程。ORACLE最多可以啟用10個(gè)ARCn。
C、初始化參數(shù)LOG_ARCHIVE_DEST指定了歸檔日志文件所在的位置;LOG_ARCHIVE_FORMAT指定了歸檔日志文件的命名格式規(guī)則。
nRECO(Recoverer)恢復(fù)進(jìn)程
nLCKn(Lock) 鎖進(jìn)程
nRVWR(Recovery Writer)閃回恢復(fù)進(jìn)程
nCTWR(Change Tracking Writer)閃回變化跟蹤寫進(jìn)程
nCJQn(Job Queue Monitor)作業(yè)隊(duì)列監(jiān)視進(jìn)程
nJnnn(Job Queue)作業(yè)隊(duì)列進(jìn)程
nDnnn(Dispatcher)調(diào)度進(jìn)程
nSnnn(Shared Server)共享服務(wù)器進(jìn)程
2綜合案例
案例:查詢后臺(tái)進(jìn)程的編號(hào),名稱和描述。
col spid format a10;
col name format a10;
col description formata30;
select p.spid, b.name,b.description from v$bgprocess b, v$process p where p.addr=b.paddr;
案例:查詢
col spid format a10;
col username formata10;
col terminalformat? a10;
col program format? a10;
select spid, username,terminal, program from v$process;
案例:查看用戶進(jìn)程情況。Username表示用戶名,process記錄操作系統(tǒng)進(jìn)程號(hào)。
1)?????運(yùn)行cmd,輸入sqlplus/nolog,輸入conn / as sysdba;建立連接1。
2)?????在sqlplus中執(zhí)行下面命令:
col username formata10;
col process format? a10;
col machine format? a10;
col program format? a10;
select username,process, machine, program from v$session where username is not null;
3)?????運(yùn)行cmd,輸入sqlplus/nolog,輸入conn scott/tiger as sysdba;建立連接2。
4)?????在第一步建立的連接1中再執(zhí)行下面的命令:
select username,process, machine, program from v$session where username is not null;
5)?????對(duì)比以上兩個(gè)查詢結(jié)果。
總結(jié)
以上是生活随笔為你收集整理的oracle进程结构中完成更新,Oracle 进程结构的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle 导库时日志满了,oracl
- 下一篇: 公司c语言面试题目,c语言面试最必考的十