真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

oracle12c新增的LREG進(jìn)程及其動態(tài)注冊的過程

因剛好遇到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è)備顯示端的尺寸不同,自動調(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)站推廣”以來,每個客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

在 oracle 數(shù)據(jù)庫中 pmon  進(jìn)程一直承擔(dān)著較多的工作,例如清理進(jìn)程以及監(jiān)聽注冊等 , 這相當(dāng)于一個人需要同時(shí)做好幾件工作, 而當(dāng)其中一件讓他應(yīng)接不暇時(shí),也許這會影響它負(fù)責(zé)的其他工作,曾經(jīng)在 11g r2 版本的數(shù)據(jù)庫遇到過 pmon  進(jìn)程因忙于清理異常中斷的會話而導(dǎo)致服務(wù)更新 和服 務(wù) 注冊出現(xiàn)異常的情況。

在 oracle12c 以前的版本中服務(wù)注冊一直都是由 PMON 進(jìn)程負(fù)責(zé) , 從 12c 起 oracle 引入了 LREG (listener registration) 后臺進(jìn)程接管了這部分工作從而減輕 PMON 的工作。

一. Oracle 監(jiān)聽及服務(wù)注冊:

在 Oracle 中,監(jiān)聽器是一個監(jiān)測連入客戶端連接請求并建立和管理會話的服務(wù)器端進(jìn)程。這在當(dāng)數(shù)據(jù)庫實(shí)例啟動后不同時(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)程:

oracle 12c 新增的LREG進(jìn)程及其動態(tài)注冊的過程

而在 12c 以后,負(fù)責(zé)服務(wù)注冊的換成了 LREG 進(jìn)程:

oracle 12c 新增的LREG進(jìn)程及其動態(tài)注冊的過程

監(jiān)聽沒有啟動 LREG 進(jìn)程不能注冊服務(wù) , 但是 LREG 進(jìn)程會定時(shí)嘗試注冊 , 如果 local_listener 沒有配置 ,LREG 會嘗試連接默認(rèn)的 1521 端口 , 直到監(jiān)聽進(jìn)程啟動 ,  在監(jiān)聽啟動后 LREG 進(jìn)行周期注冊前 , 同樣也可以使用 ”alter system register” 立即注冊服務(wù) .litener 的注冊信息。實(shí)際這個過程是動態(tài)注冊的過程。

另一個需要注意的是如果 LREG  進(jìn)程死了,會同樣和 pmon  一樣,數(shù)據(jù)庫實(shí)例也會 crash 。 12c  直接報(bào)出的 ora-500,ora-500 則是監(jiān)聽注冊進(jìn)程死掉。

oracle 12c 新增的LREG進(jìn)程及其動態(tài)注冊的過程

二.動態(tài)注冊的工作過程研究:

1. 使用 oradebug Event 10257 trace name context forever, level 1 6   來將 lreg dump 出來??梢猿醪娇闯?lreg 的工作過程:

oracle 12c 新增的LREG進(jìn)程及其動態(tài)注冊的過程

從 dump  出來的信息可以看出, lreg 進(jìn)程每 3 秒更新一次狀態(tài),而到約每 60 秒時(shí)便會實(shí)例信息進(jìn)行注冊。以下在監(jiān)聽沒有啟動的情況下, LREG woken up to process network events after 0 cs 之后成功的數(shù)量依然為 0 ,說明此時(shí)無法注冊成功。

oracle 12c 新增的LREG進(jìn)程及其動態(tài)注冊的過程

   而當(dāng)將監(jiān)聽啟動后,在 60 秒后的下一個注冊是便可以成功注冊。

oracle 12c 新增的LREG進(jìn)程及其動態(tài)注冊的過程

2. 使用 strace  追蹤 lreg 進(jìn)程的工作過程

當(dāng)數(shù)據(jù)庫運(yùn)作時(shí)其背后發(fā)生了很多事,數(shù)據(jù)庫也是一個應(yīng)用軟件,其背后的這一切都可以追溯到操作系統(tǒng)的工作原理。 在對 lreg 進(jìn)程進(jìn)行追蹤可能需要先了解 orcle 監(jiān)聽動態(tài)注冊中的兩個概念:文件描述符和   Sockets 文件 。

當(dāng)監(jiān)聽進(jìn)程啟動時(shí),它會在 /var/tmp/.oracle 下創(chuàng)建兩個套接字文件。  

oracle 12c 新增的LREG進(jìn)程及其動態(tài)注冊的過程

這些文件均是  socket  文件, 且 s#12214.1  中的 12214  為進(jìn)程號,則應(yīng)為監(jiān)聽的進(jìn)程號,這些 socket  文被用作本地客戶端使用進(jìn)程間通信協(xié)議( ipc )和不同的 oracle 的進(jìn)程通信,而這些進(jìn)程包括: tns  監(jiān)聽, css  , crs , evm  守護(hù)進(jìn)程;甚至數(shù)據(jù)庫和 asm  實(shí)例。這些 socket  由 ‘ 主動監(jiān)聽 ’ 的進(jìn)程創(chuàng)建。在這里 oracle  監(jiān)聽創(chuàng)建這些 socket  文件主要使用用作 lreg 和  tnslsnr   通信。

   同時(shí),會在 /proc 目錄下相應(yīng)進(jìn)程號文件下創(chuàng)建幾個文件描述符,這些文件描述符( file descriptor )是內(nèi)核為了高效管理已被打開的文件所創(chuàng)建的索引,其是一個非負(fù)整數(shù)(通常是小整數(shù)),用于指代被打開的文件,所有執(zhí)行 I/O 操作的系統(tǒng)調(diào)用都通過文件描述符。

oracle 12c 新增的LREG進(jìn)程及其動態(tài)注冊的過程

我 們 可以看到有幾個文件描述符,因此,確定有 為進(jìn) 程 創(chuàng) 建的文件描述符和 sockets 。

那么 LREG 過程(以前的版本 PMON ) 進(jìn) 行的 動態(tài) 注冊與文件描述符和 sockets 文件相關(guān)的 過 程是怎 樣 的呢?

這些進(jìn)程通過系統(tǒng)調(diào)用來查看監(jiān)聽器是否啟動,如果沒有發(fā)現(xiàn)監(jiān)聽進(jìn)程,則等待,并且在 3000 毫秒之后重新 嘗試 。直到 監(jiān) 聽啟 動時(shí) ,文件描述符被 監(jiān) 聽打開,并被 進(jìn) 程 綁 定以建立彼此之 間 的 連 接。

要找到 LREG 進(jìn) 程正在做什么,我使用 STRACE OS 實(shí) 用程序來跟蹤它的工作。  11g 中的 PMON 進(jìn) 程的 輸 出不是完全相同的,因 為 它不是一個 專門 用于在 監(jiān) 聽器中注冊 實(shí) 例的 過 程。另一方面, LREG 的唯一目的就是 動態(tài) 注冊, 這樣 可以解 釋 兩個 進(jìn) 程之 間 使用的系 統(tǒng)調(diào) 用之 間 的差異。

以下是 STRACE LREG 進(jìn)程的日志:  

oracle 12c 新增的LREG進(jìn)程及其動態(tài)注冊的過程

  從以上 strace 日志可以看到主要調(diào)用 epoll_wait()  函數(shù) , 該 函數(shù)表示通 過 文件描述符來等待某個 I/O 事件發(fā)生的 時(shí)間 。 實(shí)際 上 這 就是一個持 續(xù) 等待某個 IO 事件的 發(fā) 生,而表 現(xiàn) 到數(shù)據(jù) 庫層 面, 應(yīng)該 就可以理解 為監(jiān)視監(jiān)聽進(jìn)程是否啟動的過程,在 epoll_wait(7, {}, 1024, 3000) 的最后一個 參數(shù) 顯 示的 時(shí)間 以毫秒 3000 毫秒 為單 位(也就是 3 秒)。

關(guān)于epoll_wait的解釋:

oracle 12c 新增的LREG進(jìn)程及其動態(tài)注冊的過程

接下來的兩行 getrusage ()函數(shù)表示 資 源使用消耗,而后面 times() 為 時(shí)間 函數(shù)返回 時(shí)間 ,在前面的 時(shí)間 打印很明 顯 可以看出是每 3 秒 執(zhí) 行一次函數(shù)。

 再繼續(xù)往下看是 socket 函數(shù)其后面的值為 10 ,表示使用一個 socket 函數(shù)來處理文件描述符 10 。猜測這是用來與監(jiān)聽器進(jìn)程建立連接的文件描述符。這里使用的套接字是 NETLINK ,用于創(chuàng)建內(nèi)核和網(wǎng)絡(luò)層之間的連接。

oracle 12c 新增的LREG進(jìn)程及其動態(tài)注冊的過程

進(jìn)一步查看下面的函數(shù), 是對前面函數(shù)返回的文件描述符 10 進(jìn)行嘗試綁定。

oracle 12c 新增的LREG進(jìn)程及其動態(tài)注冊的過程

在接下來的幾行中,這個文件描述符將被用于與 PID 2582 的連接,而這個 PID 2582 是 LREG 進(jìn)程的 PID 。

oracle 12c 新增的LREG進(jìn)程及其動態(tài)注冊的過程

正在嘗試與 IP 地址 127.0.0.1 建立 連 接,端口號是 1521 。

oracle 12c 新增的LREG進(jìn)程及其動態(tài)注冊的過程

由于沒有啟動監(jiān)聽進(jìn)程,并且還沒有文件描述符 10 與進(jìn)程 LREG 相關(guān)聯(lián),因此連接被拒絕,即也沒有建立的連接。

oracle 12c 新增的LREG進(jìn)程及其動態(tài)注冊的過程

而在啟動監(jiān)聽之后, lreg 發(fā)現(xiàn)監(jiān)聽,并可以正常建立連接后則沒有沒有報(bào)出被拒絕的錯誤  。

oracle 12c 新增的LREG進(jìn)程及其動態(tài)注冊的過程

oracle 12c 新增的LREG進(jìn)程及其動態(tài)注冊的過程

oracle 12c 新增的LREG進(jìn)程及其動態(tài)注冊的過程

在以上lreg進(jìn)程活動的日志可以看出 較多的 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)發(fā)生注冊時(shí)使用 epoll_ctl去添加刪除某個文件描述符。具體的確實(shí)一時(shí) 無法 了解清楚。

   

    在監(jiān)聽程序啟動后,可以使用 lsof –i TCP:1521 命令 來看 lreg 進(jìn)程與tnslsnr進(jìn)程的連接。

     ESTABLISHED的意思是建立連接。表示兩個進(jìn)程正在通信。    ncube-lm是  nCube License Manager (即ncube管理的一個許可證明),意思是被允許,被認(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 是一個實(shí)例級別的后臺進(jìn)程并且是非常重要, 一旦該進(jìn)程被殺掉,將導(dǎo)致數(shù)據(jù)庫實(shí)例崩,它會 做一切 PMON 過去在實(shí)例注冊的方面執(zhí)行的,例如:在監(jiān)聽日志 listener.log 里 service_update, service_register, service_died 。

      由于工作被專屬化,這里我們可以更清晰的了解其工作的過程,例如每3秒一次的監(jiān)測,每60秒一次的嘗試注冊等,都可以清楚的看到。


本文標(biāo)題:oracle12c新增的LREG進(jìn)程及其動態(tài)注冊的過程
本文鏈接:http://weahome.cn/article/pocghp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部