中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

技術人生系列 · 我和數據中心的故事(第十一期)- 一次啟停引發的故障

發布時間:2020-08-19 12:07:26 來源:ITPUB博客 閱讀:168 作者:記錄每一次錯誤 欄目:關系型數據庫
技術人生系列 · 我和數據中心的故事(第十一期)- 一次啟停引發的故障     

      春風輕輕吹走了冬日里的寒氣,又到了一年最美的花季,伴隨著溫暖的陽光 老K 再次與大家相見!此次的回歸老K不僅會繼續和大家分享一些自己處理過的小案例,更優化了技術交流模塊,希望在探討的過程中大家可以提高技術等級的同時,也能領略到中亦DBA團隊獨有的匠人精神。

問題來了

      某一日的清晨,客戶打來電話稱巡檢時發現關鍵系統數據庫節點無法連接,原數據庫為 4 節點 RAC ,現少一節點,擔心業務高峰 3 個節點數據庫無法承擔業務高峰的壓力。這種情況需要盡快處理,所以老 K 選擇以最快的遠程支持方式解決問題。


問題分析

環境描述

系統: linux

技術人生系列 · 我和數據中心的故事(第十一期)- 一次啟停引發的故障

數據庫:服務器上存在多個數據庫實例 p1 x1 (此處 p1 x1 為化名)

技術人生系列 · 我和數據中心的故事(第十一期)- 一次啟停引發的故障

現象描述

本地使用 sqlplus 登錄到 x1 數據庫發現無法登錄到正常狀態:

技術人生系列 · 我和數據中心的故事(第十一期)- 一次啟停引發的故障

而我 們在本地登錄 p1 數據庫,則一切正常,無明顯問題

技術人生系列 · 我和數據中心的故事(第十一期)- 一次啟停引發的故障

分析步驟小1:

   查看 alert 日志,了解到數據庫從前一天 18 點就開始有報錯;

技術人生系列 · 我和數據中心的故事(第十一期)- 一次啟停引發的故障

技術人生系列 · 我和數據中心的故事(第十一期)- 一次啟停引發的故障

技術人生系列 · 我和數據中心的故事(第十一期)- 一次啟停引發的故障

   從日志看起來,問題似乎很簡單, oracle 運行過程中,組發生了改變:啟動時的組為 501 oinstall ),當前組卻變為了 503 asmadmin );同時,我們也可以從 alert 所在目錄相關 trace 文件的屬性變化來確認這一點:

技術人生系列 · 我和數據中心的故事(第十一期)- 一次啟停引發的故障

   在 18:43 產生或更新的 trace 文件還是 oracle:oinstall 的屬主,而到了 18:44 ,新產生或更新的 trace 文件便成了 oracle:asmadmin 屬主。


技術人生系列 · 我和數據中心的故事(第十一期)- 一次啟停引發的故障

知識點:

問: UNIX/LINUX 環境中, oracle 數據庫啟動后存在許多后臺進程和前臺進程,雖然相關進程產生一些 trace 文件也是常有的事情,但是真正是什么決定了 oracle 相關進程的屬性呢?

答:通常來說,oracle的后臺進程的調用是依賴于$ORACLE_HOME/bin/oracle這個二進制文件,但它從遠端連入而分配的服務器進程(server process)相關屬主的屬性則是繼承自listener進程,而listener進程的屬主屬性同樣是進程自其啟動的用戶(分oracle用戶和grid用戶)$ORACLE_HOME/bin/oracle的屬主屬性。

技術人生系列 · 我和數據中心的故事(第十一期)- 一次啟停引發的故障


分析步驟小2:

   這樣,我們就可以查看 $ORACLE_HOME/bin/oracle 這個文件的屬主情況:

技術人生系列 · 我和數據中心的故事(第十一期)- 一次啟停引發的故障

   老 K 2 10 日查看發現 oracle 文件的屬主是 oracle ,屬組是 asmadmin ,它的上次修改時間是 12 10 日,對比起來相隔久遠;然而我們關注的文件屬組 / 屬主的變化,是不會影響到其顯示的修改時間的,只有修改內容或替換文件才會出現文件修改時間的變化。下一步我們就可以使用如圖中命令來查看文件屬性變化的時間:

技術人生系列 · 我和數據中心的故事(第十一期)- 一次啟停引發的故障

   顯而易見,文件屬主 / 屬組的改變正是在 2 9 日,這樣基本全部對應,就可以合理的推斷出: oracle 文件的屬主在 2 9 日發生了變化,隨后數據庫即產生報錯,也就是實際上這個數據庫實例自前一天的晚上就不可用了,只是到第二天早上才發現問題,那解決問題的方式就簡單多了,重啟數據庫!因為無法正常登錄數據庫(連 sysdba 也無法登錄),就不得不直接 kill 掉數據庫實例的關鍵進程,然后再正常啟動數據庫,一切又再次恢復正常。

   按照上述步驟分析起來也不是什么麻煩問題,大家或許會想即使我們不懂詳細原因,看到數據庫沒法用了,直接使用重啟大法,這個問題不也輕易的就解決了嗎?難道還需要理解這個問題的本質嗎?

在這里,老K有話說! ↓↓↓↓↓↓↓↓

         既然大家選擇要走技術的道路,最重要的是保持一顆持久的好奇心,尋找答案的過程予我們也是進益,不斷的研究即是不斷的提高,永無止境的探索,才是前進路上的唯一指引。當然最重要的是在保證生產環境安全并且合規操作的前提下


難題首現

        OK ,言歸正傳我們繼續來說問題,前面雖然簡述了一些,其實不難發現這里有兩個重要的疑問還沒有解答

為什么 x1 實例存在問題,而 p1 實例卻沒有受到影響呢?

  老 K 首先猜想到的就是:“是不是 p1 實例的啟動是在 oracle 文件的屬組改變之后呢”?于是查看發現 p1 實例的啟動時間:

技術人生系列 · 我和數據中心的故事(第十一期)- 一次啟停引發的故障

        p1 數據庫實例的啟動時間是似乎就在 $ORACLE_HOME/bin/oracle 文件的屬組改變的前后,這真的是巧合嗎?這里引出了第二個疑問

  是誰改變了 oracle 文件的屬組,為什么要去這么做呢?

技術人生系列 · 我和數據中心的故事(第十一期)- 一次啟停引發的故障

  如圖顯示 p1 實例的 trace 文件也曾在 2016 年的 12 10 日發生過改變,而且改變后,一直保持為 oracle:oinstall 的屬主屬性,而在 2 9 日重啟完成后恢復為 oracle:asmadmin 的屬主屬性(圖片中沒有顯示出來),也就是說在更早之前,我們可以推斷 $ORACLE_HOME/bin/oracle 文件的屬組是 asmadmin ,在 12 10 日更改為 oinstall ,而在 2 9 日再次更改為 asmadmin


老K的回憶沙龍~

  事情似乎又變的復雜起來了,這里讓老 K想起 遇到過的一段經驗, CASE 是這樣的:我們在打完數據庫補丁之后,經常會出現 $ORACLE_HOME/bin/oracle 文件的屬組發生改變,導致本地的非 dba 用戶不通過監聽連接數據庫時報無法訪問 ASM 磁盤的情況( asm 磁盤的屬組一般是 grid:asmadmin 的),而我們只需要通過使用 srvctl start database   的方式來重新啟動數據庫就可以解決該問題(當然在數據庫停止的情況下直接 chown 的方式也可以) ;

  那么在這個問題里是不是也前一天重啟 p1 實例也是用的 srvctl 命令呢?

技術人生系列 · 我和數據中心的故事(第十一期)- 一次啟停引發的故障

  正是因為前一天使用 srvctl 的方式啟動了 p1 節點,改變了 oracle 文件的屬組,導致了 x1 節點出現報錯;至于為什么要改變 oracle 文件的屬組,那就是 oracle 的機制的原因了。這里我們需要理解的一點,使用 srvctl/crsctl 命令來啟停數據庫和使用 sqlplus 登錄到數據庫中啟停數據庫的區別是, srvctl/crsctl 命令調用的是 crs oraagent 來執行的,而 sqlplus 是在 oracle 用戶下直接執行的。


小結

1 .      數據庫實例 p1 x1 在正常運行;

2.   $ORACLE_HOME/bin/oracle 文件的屬組是 oinstall 的;

3.   2 9 日,運維人員重啟了 p1 實例,啟動時的方式是 srvctl     startinstance -d p -i p1 ,這個過程中將 $ORACLE_HOME/bin/oracle 的屬組改為 asmadmin

4.   數據庫實例 x1 開始報錯運行時屬組與啟動時屬組不一致



難題再現!

   到這里,前面的兩個難題已經解開,不過我們在與客戶的溝通過程中就不免多問一句,為什么會去重啟 p1 實例呢?給出的答案又引起了我們的思考:前一天客戶發現 p1 實例無法登錄,由于 p1 數據庫實際上已經不作生產使用,平時可能會有一些簡單的測試使用到這個數據庫,所以客戶的現場維護人員直接重啟了 p1 實例解決問題。但是 為何 p1 實例會無法登錄呢? 如果僅僅是測試庫的話,正常是不應該有壓力大的情況,還是說也是類似 x1 的情況?就此,我們再從分析 p1 實例之前的運行情況。另外,從前面的過程來看,我們可以看到 oracle 文件屬組曾經從 asmadmin 變為 oinstall ,這樣我們就還需要解釋一個問題, 如果說 srvctl 的方式啟停數據庫會將 $ORACLE_HOME/bin/oracle 文件的屬組改為 asmadmin 的話,那么,又是什么讓這個文件的屬組改為 oinstall 的呢 ? 帶著這兩個新的疑惑,老 K 再次踏上解惑的征程,先來看 p1 實例的 alert 日志:

技術人生系列 · 我和數據中心的故事(第十一期)- 一次啟停引發的故障

技術人生系列 · 我和數據中心的故事(第十一期)- 一次啟停引發的故障

技術人生系列 · 我和數據中心的故事(第十一期)- 一次啟停引發的故障

技術人生系列 · 我和數據中心的故事(第十一期)- 一次啟停引發的故障

   看到日志老 K 才發現,原來 p1 實例在 12 10 09:18:09 開始啟動,啟動到 09:23:33 的時候就已經開始報錯,并一直持續到 2 9 日重啟之前,通過重啟的方式最終解決。 P1 為什么會存在這樣的問題呢?那么 X1 實例呢,之前為什么沒有問題呢?我們再來看看 x1 實例之前的 alert 日志:

技術人生系列 · 我和數據中心的故事(第十一期)- 一次啟停引發的故障

技術人生系列 · 我和數據中心的故事(第十一期)- 一次啟停引發的故障

技術人生系列 · 我和數據中心的故事(第十一期)- 一次啟停引發的故障

          x1 實例在啟動時也經歷過啟動報錯的過程,只不過很不幸, x1 實例在啟動后臺進程 RSMN 時,就已經出錯,導致實例啟動失敗,而后在 09:23 再次啟動,則啟動成功,后續因為 $ORACLE_HOME/bin/oracle 文件沒有修改過屬組,直到 2 9 18 點,也沒有再報過錯。細心的同學可以看到   x1 實例和 p1 實例在 12 10 日的 shutdown 和初次 startup 的時間是基本一致的,于是我們猜測,這個動作應該是使用 crsctl stop crs crsctl start crs 的方式來啟停 CRS 的過程中順帶將數據庫啟停了, 那么為什么 p1 實例啟動完成了,而 x1 實例啟動失敗了呢?事實上這里 p1 也就只是啟動了實例,并沒有打開數據庫,而 x1 實例啟動失敗是因為其關鍵進程 RSMN 的啟動時間正好在 $ORACLE_HOME/bin/oracle 的屬組修改的時間( 09:19:22 )之后導致啟動失敗,而再次啟動時, x1 實例相關進程的屬組也就都一致了不再存在啟動時和運行時屬組不一致的問題了。

   現在,我們還剩下最后一個難題,那就是 12 10 日,客戶現場的維護人員做了什么才導致 $ORACLE_HOME/bin/oracle 文件的屬組變為了不正確的 oinstall 屬組?這里,我們查看了該節點上數據庫打補丁的信息,發現自安裝以來并沒有再打過補丁(日志過長,這里就不再列出);不過很幸運,我們通過歷史命令記錄查到了蛛絲馬跡:

技術人生系列 · 我和數據中心的故事(第十一期)- 一次啟停引發的故障

   之前存在對 oracle 文件的 relink 操作,并將日志記錄在了 $ORACLE_HOME/install/relink.log 里,在我們查看 relink.log 的信息時就能定位到這條命令的操作時間了:

技術人生系列 · 我和數據中心的故事(第十一期)- 一次啟停引發的故障

   基于老 K 日常積累的經驗,才可以這么認定 relink 操作就會改變 oracle 文件的屬組信息。在 opatch 打完一些數據庫補丁后,通常會改變 oracle 文件的屬組信息,如果我們細看 opatch 過程中的詳細日志,我們就會發現,這個過程中實際上使用的底層命令就是 relink ,也就認為 relink 實際上會修改 oracle 文件的內容,同時也會修改 oracle 文件的屬組(因為做這個操作的用戶是 oracle:oinstall )。得出結論后繼續與客戶進行溝通,對話如下:↓↓↓↓↓

技術人生系列 · 我和數據中心的故事(第十一期)- 一次啟停引發的故障

現場運維商確實在之前處理其它問題時,使用過 relink 命令重現編譯 oracle 文件,但是當時沒有啟動數據 庫。

是不是當時先重啟了操作系統呢?
技術人生系列 · 我和數據中心的故事(第十一期)- 一次啟停引發的故障
技術人生系列 · 我和數據中心的故事(第十一期)- 一次啟停引發的故障
請輸入
技術人生系列 · 我和數據中心的故事(第十一期)- 一次啟停引發的故障

厄。。。好像是的!


到底發生了什么?

1. 12 10 ,客戶的現場運維商需要使用 relink 命令解決問題;

2. relink 之前直接重啟操作系統,操作系統啟動時,自動啟動 CRS ,并且將試圖啟動數據庫以恢復到之前狀態

3. 在啟動數據庫的過程中,維護商沒有關注到是否有數據庫正在運行即已開始執行 relink 操作;

4. relink 操作的過程中, p1 完成了實例啟動,而 x1 實例則因為 RSMN 啟動時 oracle 文件的屬組已經發生改變, RSMN 啟動失敗,繼而導致 x1 實例失敗,而 p1 實例雖然啟動成功,但是一直報錯,數據庫也未能打開;

5. 在此期間 p1 實例實際上是不可用的,在 2 9 日維護商發現 p1 實例不可用,因為認為 p 1庫不重要,在未核查原因的情況下直接重啟了 p1 實例, p1 實例正常

6. 因為在啟動 p1 實例是使用的 srvctl start 的命令,導致啟動時修改了 $ORACLE_HOME/bin/oracle 的屬組,導致 x1 實例不可用

7. 最終通過重啟 x1 實例恢復正常。

技術人生系列 · 我和數據中心的故事(第十一期)- 一次啟停引發的故障

  最后總結:

     通過詳細的分析,我們發現從 p1 實例的處理方式能很快的解決,但是問題的根本是 有一系列的操作上的失誤導致, 所以老 K 想再一次安利下自己的觀點:我們在解決問題的過程中,對于任何小疑點都不能輕易濾過,現在發生的問題也許就是由多個小的問題愈演愈烈最終影響正常業務,我們只要對整體分析透徹,自然可以從本質上解決問題。所以大家一定時刻保持探索精神,不忽略任何一個細節,這也是我們作為中亦人一直在堅持的精神!!

   好啦,本期就到這里, 今年 我們中亦 DBA 團隊將全力以赴,用詼諧和嚴謹的方式將我們的經驗進行分享, 希望大家多多支持,伙伴們的轉發分享是對我們最大的鼓勵!


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

吉水县| 惠州市| 祁阳县| 多伦县| 江北区| 田林县| 黔西县| 独山县| 栾川县| 辽阳市| 晴隆县| 靖江市| 南川市| 新巴尔虎右旗| 曲沃县| 赤城县| 丹江口市| 崇文区| 长岭县| 阿图什市| 登封市| 凤凰县| 石首市| 绥芬河市| 菏泽市| 抚宁县| 甘肃省| 台江县| 定远县| 瓦房店市| 宣化县| 浠水县| 吉水县| 正宁县| 随州市| 桃园市| 南安市| 浦北县| 库尔勒市| 扎鲁特旗| 龙门县|