因剛好遇到12c 監(jiān)聽注冊的問題,現(xiàn)將以前關(guān)于oracle 12c lreg進(jìn)程的一些學(xué)習(xí)文章分享下:
10余年的五峰網(wǎng)站建設(shè)經(jīng)驗(yàn),針對設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都全網(wǎng)營銷的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整五峰建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)從事“五峰網(wǎng)站設(shè)計(jì)”,“五峰網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
在 oracle 數(shù)據(jù)庫中 pmon 進(jìn)程一直承擔(dān)著較多的工作,例如清理進(jìn)程以及監(jiān)聽注冊等 , 這相當(dāng)于一個(gè)人需要同時(shí)做好幾件工作, 而當(dāng)其中一件讓他應(yīng)接不暇時(shí),也許這會(huì)影響它負(fù)責(zé)的其他工作,曾經(jīng)在 11g r2 版本的數(shù)據(jù)庫遇到過 pmon 進(jìn)程因忙于清理異常中斷的會(huì)話而導(dǎo)致服務(wù)更新 和服 務(wù) 注冊出現(xiàn)異常的情況。
在 oracle12c 以前的版本中服務(wù)注冊一直都是由 PMON 進(jìn)程負(fù)責(zé) , 從 12c 起 oracle 引入了 LREG (listener registration) 后臺(tái)進(jìn)程接管了這部分工作從而減輕 PMON 的工作。
一. Oracle 監(jiān)聽及服務(wù)注冊:
在 Oracle 中,監(jiān)聽器是一個(gè)監(jiān)測連入客戶端連接請求并建立和管理會(huì)話的服務(wù)器端進(jìn)程。這在當(dāng)數(shù)據(jù)庫實(shí)例啟動(dòng)后不同時(shí)間里,數(shù)據(jù)庫實(shí)例與監(jiān)聽器聯(lián)系并建立了一條到該實(shí)例的通信路徑。
服務(wù)注冊讓監(jiān)聽器能夠確定數(shù)據(jù)庫服務(wù)及其 service handlers (服務(wù)處理程序)是否可用。在注冊期間,服務(wù)注冊進(jìn)程向 listener 提供實(shí)例名稱,數(shù)據(jù)庫服務(wù)名稱以及 service handlers 的類型 ( 專用或共享 ) 和地址。
在 oracle 12c 以前,負(fù)責(zé)服務(wù)注冊的是 pmon 進(jìn)程:
而在 12c 以后,負(fù)責(zé)服務(wù)注冊的換成了 LREG 進(jìn)程:
監(jiān)聽沒有啟動(dòng) LREG 進(jìn)程不能注冊服務(wù) , 但是 LREG 進(jìn)程會(huì)定時(shí)嘗試注冊 , 如果 local_listener 沒有配置 ,LREG 會(huì)嘗試連接默認(rèn)的 1521 端口 , 直到監(jiān)聽進(jìn)程啟動(dòng) , 在監(jiān)聽啟動(dòng)后 LREG 進(jìn)行周期注冊前 , 同樣也可以使用 ”alter system register” 立即注冊服務(wù) .litener 的注冊信息。實(shí)際這個(gè)過程是動(dòng)態(tài)注冊的過程。
另一個(gè)需要注意的是如果 LREG 進(jìn)程死了,會(huì)同樣和 pmon 一樣,數(shù)據(jù)庫實(shí)例也會(huì) crash 。 12c 直接報(bào)出的 ora-500,ora-500 則是監(jiān)聽注冊進(jìn)程死掉。
二.動(dòng)態(tài)注冊的工作過程研究:
1. 使用 oradebug Event 10257 trace name context forever, level 1 6 來將 lreg dump 出來。可以初步看出 lreg 的工作過程:
從 dump 出來的信息可以看出, lreg 進(jìn)程每 3 秒更新一次狀態(tài),而到約每 60 秒時(shí)便會(huì)實(shí)例信息進(jìn)行注冊。以下在監(jiān)聽沒有啟動(dòng)的情況下, LREG woken up to process network events after 0 cs 之后成功的數(shù)量依然為 0 ,說明此時(shí)無法注冊成功。
而當(dāng)將監(jiān)聽啟動(dòng)后,在 60 秒后的下一個(gè)注冊是便可以成功注冊。
2. 使用 strace 追蹤 lreg 進(jìn)程的工作過程
當(dāng)數(shù)據(jù)庫運(yùn)作時(shí)其背后發(fā)生了很多事,數(shù)據(jù)庫也是一個(gè)應(yīng)用軟件,其背后的這一切都可以追溯到操作系統(tǒng)的工作原理。 在對 lreg 進(jìn)程進(jìn)行追蹤可能需要先了解 orcle 監(jiān)聽動(dòng)態(tài)注冊中的兩個(gè)概念:文件描述符和 Sockets 文件 。
當(dāng)監(jiān)聽進(jìn)程啟動(dòng)時(shí),它會(huì)在 /var/tmp/.oracle 下創(chuàng)建兩個(gè)套接字文件。
這些文件均是 socket 文件, 且 s#12214.1 中的 12214 為進(jìn)程號(hào),則應(yīng)為監(jiān)聽的進(jìn)程號(hào),這些 socket 文被用作本地客戶端使用進(jìn)程間通信協(xié)議( ipc )和不同的 oracle 的進(jìn)程通信,而這些進(jìn)程包括: tns 監(jiān)聽, css , crs , evm 守護(hù)進(jìn)程;甚至數(shù)據(jù)庫和 asm 實(shí)例。這些 socket 由 ‘ 主動(dòng)監(jiān)聽 ’ 的進(jìn)程創(chuàng)建。在這里 oracle 監(jiān)聽創(chuàng)建這些 socket 文件主要使用用作 lreg 和 tnslsnr 通信。
同時(shí),會(huì)在 /proc 目錄下相應(yīng)進(jìn)程號(hào)文件下創(chuàng)建幾個(gè)文件描述符,這些文件描述符( file descriptor )是內(nèi)核為了高效管理已被打開的文件所創(chuàng)建的索引,其是一個(gè)非負(fù)整數(shù)(通常是小整數(shù)),用于指代被打開的文件,所有執(zhí)行 I/O 操作的系統(tǒng)調(diào)用都通過文件描述符。
我 們 可以看到有幾個(gè)文件描述符,因此,確定有 為進(jìn) 程 創(chuàng) 建的文件描述符和 sockets 。
那么 LREG 過程(以前的版本 PMON ) 進(jìn) 行的 動(dòng)態(tài) 注冊與文件描述符和 sockets 文件相關(guān)的 過 程是怎 樣 的呢?
這些進(jìn)程通過系統(tǒng)調(diào)用來查看監(jiān)聽器是否啟動(dòng),如果沒有發(fā)現(xiàn)監(jiān)聽進(jìn)程,則等待,并且在 3000 毫秒之后重新 嘗試 。直到 監(jiān) 聽啟 動(dòng)時(shí) ,文件描述符被 監(jiān) 聽打開,并被 進(jìn) 程 綁 定以建立彼此之 間 的 連 接。
要找到 LREG 進(jìn) 程正在做什么,我使用 STRACE OS 實(shí) 用程序來跟蹤它的工作。 11g 中的 PMON 進(jìn) 程的 輸 出不是完全相同的,因 為 它不是一個(gè) 專門 用于在 監(jiān) 聽器中注冊 實(shí) 例的 過 程。另一方面, LREG 的唯一目的就是 動(dòng)態(tài) 注冊, 這樣 可以解 釋 兩個(gè) 進(jìn) 程之 間 使用的系 統(tǒng)調(diào) 用之 間 的差異。
以下是 STRACE LREG 進(jìn)程的日志:
從以上 strace 日志可以看到主要調(diào)用 epoll_wait() 函數(shù) , 該 函數(shù)表示通 過 文件描述符來等待某個(gè) I/O 事件發(fā)生的 時(shí)間 。 實(shí)際 上 這 就是一個(gè)持 續(xù) 等待某個(gè) IO 事件的 發(fā) 生,而表 現(xiàn) 到數(shù)據(jù) 庫層 面, 應(yīng)該 就可以理解 為監(jiān)視監(jiān)聽進(jìn)程是否啟動(dòng)的過程,在 epoll_wait(7, {}, 1024, 3000) 的最后一個(gè) 參數(shù) 顯 示的 時(shí)間 以毫秒 3000 毫秒 為單 位(也就是 3 秒)。
關(guān)于epoll_wait的解釋:
接下來的兩行 getrusage ()函數(shù)表示 資 源使用消耗,而后面 times() 為 時(shí)間 函數(shù)返回 時(shí)間 ,在前面的 時(shí)間 打印很明 顯 可以看出是每 3 秒 執(zhí) 行一次函數(shù)。
再繼續(xù)往下看是 socket 函數(shù)其后面的值為 10 ,表示使用一個(gè) socket 函數(shù)來處理文件描述符 10 。猜測這是用來與監(jiān)聽器進(jìn)程建立連接的文件描述符。這里使用的套接字是 NETLINK ,用于創(chuàng)建內(nèi)核和網(wǎng)絡(luò)層之間的連接。
進(jìn)一步查看下面的函數(shù), 是對前面函數(shù)返回的文件描述符 10 進(jìn)行嘗試綁定。
在接下來的幾行中,這個(gè)文件描述符將被用于與 PID 2582 的連接,而這個(gè) PID 2582 是 LREG 進(jìn)程的 PID 。
正在嘗試與 IP 地址 127.0.0.1 建立 連 接,端口號(hào)是 1521 。
由于沒有啟動(dòng)監(jiān)聽進(jìn)程,并且還沒有文件描述符 10 與進(jìn)程 LREG 相關(guān)聯(lián),因此連接被拒絕,即也沒有建立的連接。
而在啟動(dòng)監(jiān)聽之后, lreg 發(fā)現(xiàn)監(jiān)聽,并可以正常建立連接后則沒有沒有報(bào)出被拒絕的錯(cuò)誤 。
在以上lreg進(jìn)程活動(dòng)的日志可以看出 較多的 epoll_ctl與 epoll_wait函數(shù)調(diào)用,epoll在這里epoll貌似一種不斷來觸發(fā)監(jiān)聽并操作某些文件描述的過程,lreg調(diào)用 epoll_wait 每3秒來監(jiān)測監(jiān)聽進(jìn)程是否啟動(dòng),當(dāng)發(fā)生注冊時(shí)使用 epoll_ctl去添加刪除某個(gè)文件描述符。具體的確實(shí)一時(shí) 無法 了解清楚。
在監(jiān)聽程序啟動(dòng)后,可以使用 lsof –i TCP:1521 命令 來看 lreg 進(jìn)程與tnslsnr進(jìn)程的連接。
ESTABLISHED的意思是建立連接。表示兩個(gè)進(jìn)程正在通信。 ncube-lm是 nCube License Manager (即ncube管理的一個(gè)許可證明),意思是被允許,被認(rèn)證開放的意思,這是tnslnr開啟的并處于LISTEN狀態(tài)。
三.總結(jié):
oracle 12c 除了服務(wù)注冊方面,其網(wǎng)絡(luò)服務(wù)架構(gòu)在數(shù)據(jù)庫并沒有變化。在以前的版本中,服務(wù)注冊是通過PMON進(jìn)程來完成?,F(xiàn)在 由LREG(listener registration)來處理。LREG 是一個(gè)實(shí)例級(jí)別的后臺(tái)進(jìn)程并且是非常重要, 一旦該進(jìn)程被殺掉,將導(dǎo)致數(shù)據(jù)庫實(shí)例崩,它會(huì) 做一切 PMON 過去在實(shí)例注冊的方面執(zhí)行的,例如:在監(jiān)聽日志 listener.log 里 service_update, service_register, service_died 。
由于工作被專屬化,這里我們可以更清晰的了解其工作的過程,例如每3秒一次的監(jiān)測,每60秒一次的嘗試注冊等,都可以清楚的看到。
名稱欄目:oracle12c新增的LREG進(jìn)程及其動(dòng)態(tài)注冊的過程
網(wǎng)站路徑:http://jinyejixie.com/article48/pocghp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、網(wǎng)站排名、自適應(yīng)網(wǎng)站、手機(jī)網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、網(wǎng)頁設(shè)計(jì)公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)