此文謹以紀念我們曾經失去的青春
在節前(端午節)就收到了甲骨文的電話,說我投遞的履歷被選中,邀請來面試,分别是兩個部門,在深圳總部打過來的全球化支援部(工作地點依然為北京)和北京總部打過來的公有雲事業部,職位都是進階DBA。
由于全球化支援部涉及英語口語要求較高,個人還是更傾向于公有雲事業部,但是先接到了前者的面試郵件,約定6月18日下午去面試,在軟體園裡的甲骨文總部大樓~
到了軟體園大門,以前熊熊一直以為東門口那個十号樓上寫的Oracle甲骨文的就是甲骨文總部了,還覺得那裡挺小的了,郵件中提到的是24号樓,于是進入十号樓問了保安,才知道要走很遠(一開始沒在意,後來才知道,真的好遠)
沿着路一直往軟體園深處走去,真的好遠啊,沿途經過了一個中歐國際工商學院,那種别墅似風格的教學樓,不高,就2-3層,但是應該很奢華,樓下停着很多的豪車(奔馳、寶馬、奧迪,都是進口高系),啥時候熊熊才能來這裡學習呢,嘻嘻~
走了大約25分鐘的路程,終于來到了24号樓,甲骨文北京總部所在地,真的很壯觀,就像一個小型社群,在門口照了張相,把甲骨文的Logo照了進來,找到右手邊的T2樓,進去到前台,說明來意,問是否預約好,回答是的。
前台保安讓熊熊給聯系人打個電話,這時才想起,聯系人根本沒有給熊熊留電話。于是在前台小姑娘那裡查聯系人的電話,結果因為甲骨文都是英文名字的原因,我隻知道對方中文名稱,無法查到,正在着急中,對方正好打電話過來,告知她已經到樓下,說稍等片刻,下來接熊熊~
見面以後,一個長相很一般的女生,氣質和親和度也不是特别贊,填好表格以後,由她領上3樓,到了一間小會議室,過不多久,進來一位30來歲的進階工程師(也許就是manager)模樣的男人,面試正式開始~
也沒有浪費時間讓熊熊做什麼簡單的自我介紹,隻是問了一下現在工作主要做什麼,可能熊熊答的有點簡單,讓對方感覺是普通的運維DBA,于是針對熊熊的問題開始了深入面試
Q:你在工作中主要負責哪塊業務現在
A:主要負責整體資料庫的日常維護,保證資料庫的穩定、可靠、高效運作
Q:那你們通常如何來巡檢,有哪些工具手段?
A:因為銀行方面無法使用OEM或者GC(Grid Control)這種圖形化工具,是以我們的日常巡檢都是用AWR、ASH、ADDM、RDA等一系列工具來做的,如果有具體的問題,也會通過一些動态視圖來具體檢視,包括檢視alert日志以及抓trc進行分析等等。
Q:那你們不能使用OEM這種的話,如何保證這個監控的頻度,還是說每次都必須自己手工上去生成報告看一下?
A:是這樣的,有一些重要的監控名額,我們在Nagios裡做了腳本進行監控,比如資料庫的監聽狀況、RAC節點的健康狀況、表空間的增長率等等,如果出現問題,通過Nagios報警會直接發送到我的手機上
Q:既然你們要進行日常監控,如果感覺資料庫跑得很慢,從哪些地方能展現出來
A:這個需要具體問題具體分析,看看到底是OS層面問題,還是資料庫本身問題,亦或是網絡或者ASM存儲的問題,如果是OS層面的問題,看看CPU的負載高不高,如果高的話,考慮是不是應用層與資料庫層面的連接配接瓶頸(比如記憶體溢出等問題),如果CPU負載正常,但是I/O瓶頸比較高(這是資料庫經常遇到的問題),那麼有可能是SGA記憶體配置設定不合理,或者SGA記憶體不足,甚至是整體實體記憶體不足,那麼需要考慮的情況有很多種,有可能是資料庫的DML操作過于頻繁,有可能是SQL寫的不合理(比如沒有使用綁定變量,共享遊标等等,比如SQL寫法不規範,比如沒有使用索引,或者索引設定不規範導緻大量全表掃描),這些可以從AWR報告裡的等待事件中看到一些問題。
Q:你剛剛提到了AWR報告,那麼如果是資料庫比較慢,比如你說的I/O問題這種,在AWR報告中會怎麼展現出來?
A:首先是各種target的名額監控(那個說實話熊熊真忘了是怎麼說,但是解釋一下,就是那個各項性能滿分是100%那個),這裡可以看到一些比如字典緩存命中率,庫緩存命中率等等低不低,如果不低再看看SQL的執行重複率低不低,如果低,證明SQL設計不合理,當然,有很多比如資料檔案順序讀,直接路徑讀/寫這種,都是造成大量User I/O的原因
Q:那這個User I/O,在AWR報告中的顯示是什麼?
A:(撓頭),額,這個我真不知道,我英語太爛了,不知道怎麼說這個,但是如果AWR報告發給我,我真的可以看出來的
Q:如果AWR報告中報日志的頻繁切替,是什麼問題?
A:那有可能是日志組過少,然後日志組裡的日志成員過多,而且日志設定的大小過小,比如就設定了20M,然後DML操作過于頻繁,會造成大量的日志寫入,寫滿了就會切替,過多的切替就會造成日志頻繁寫入,影響資料庫性能
Q:你剛剛提到的頻繁寫日志,包括髒塊寫入到dbf中,事務沒有送出的話,髒塊或者日志會不會寫入到相應檔案中?
A:這個肯定不可以的啊,事務要遵循ACID原則,事務隻能被送出或者被復原,不能自我中斷的,不過如果髒塊把buffer cache寫滿,無論事務送出與否,都會寫到datafile中,不寫日志,就算髒塊寫到了datafile裡,這時候如果資料庫重新開機,因為日志裡沒寫,pmon就不能還原,這樣就可以了解為:因為沒有commit,這個事務就不成立。
Q:OK,你在工作中都是單執行個體還是有RAC?
A:是這樣的,我們有一個小機,上面跑了五個單執行個體的庫,另外還有兩套RAC環境
Q:你們的RAC是兩個節點的?
A:是的,以前也做過4個節點的
Q:那麼你如何來檢視RAC的狀态?
A:通過crs指令就可以檢視了
Q:具體指令是什麼呢?
A:crs_stat –t就可以檢視到節點狀态
Q:那麼你如何知道RAC中有幾個節點呢?
A:使用剛才那個指令其實就可以看到有幾個節點了
Q:你說的這是所有節點正常啟動的情況,如果不是呢?
A:是這樣,有一個比較笨的方法,我使用DBCA指令中的instancemanager來看我的節點資訊,隻要節點的OCR資訊沒有被破壞,那麼都可以看到的
Q:你剛才提到OCR資訊被破壞,那麼如果OCR資訊被破壞了,該怎麼做?
A:我們可以通過重建OCR來修複
Q:具體怎麼做呢?
A:通過修改ocr.loc和paramfile.crs檔案進行設定,然後通過指令進行重建
Q:什麼指令?
A:額,那個,唉,想不起來了,不過如果做的話,我知道該如何做的,除了重建OCR,我們也可以删除節點的OCR資訊再添加,效果是一樣的,隻是OCR重建更友善些
Q:你們裝RAC用的是ASM嗎?
A:是的
Q:ASM裡有個au_size參數,你知道嗎?
A:這個真沒接觸過(回來以後熊熊仔細看了這個參數,Oracle 10g是預設的1m大小,不能修改,11g以後可以手工修改,是以熊熊不知道)
Q:如果單執行個體變成RAC,有什麼方法嗎?
A:可以使用DG的standby複制出一個節點,然後添加節點的OCR資訊等,用rman克隆應該也可以的
Q:你提到DG,你有沒有做過DG?
A:這個是有的
Q:那你說說DG都需要配置哪些?
A:首先在主庫開啟歸檔和輔助日志,然後設定一些參數,比如log_archive_dest裡添加主庫和備庫的資訊,fal的兩個參數要設定(fal_client與fal_server),然後如果有檔案轉換需要設定convert(包括db和log),将主庫的spfile轉化成pfile,傳送pfile和密碼檔案到從庫機器上修改相應參數,主庫可以通過RMAN做一個全備,然後可以使用RMAN的輔助資料庫功能在從庫進行恢複,10g的實體DG隻能是mount模式,11g可以是open read only模式,這樣可以将此庫設定為隻讀查詢庫,來實作讀寫分離
Q:你們工作中有沒有用到DG
A:我們用到的是GG(GoldenGate)
Q:你能簡單說一下GG的設定嗎
A:先在兩個節點上(主備庫)分别按照ogg軟體,設定mgr程序,然後在主庫上設定抽取程序和采集程序,在備庫上設定采集程序,像我們上次遷移新查詢庫,首先用rman進行全庫備份,然後使用克隆技術克隆出一個庫,再通過GG将增量資料抽取過來,就可以了,為了安全起見,禁用了GG的DDL同步功能,如果要是雙向複制,就需要在備庫再建立一個抽取程序和采集程序,相應在主庫在添加一個采集程序即可。
Q:像RMAN在執行中會占用到SGA的large pool,那麼GG在運作中是自己獨立的程序,還是也會占用Oracle的程序
A:data pump的話應該會占用到Oracle的程序吧,感覺GG應該是也會占用large_pool,但是具體的沒有研究過那麼深,是以不知道對錯
Q:如果是一個SQL産生了死鎖,有什麼方法能看出來?在OS層面
A:是這樣的,首先可以使用top來看一下CPU和記憶體的情況(根據每個程序),并且結合ps –ef | grep ora指令來查找,如果真的是死鎖的話,那麼通過v$session中的lockwait顯示出來的sid和OS上的pid是會對應的。
Q:死鎖有什麼解決辦法?隻能人工殺死嗎?
A:具體問題具體分析,如果是latch,不需要管他,他是搶占式的,如果是lock,那麼要看到底是事務占用了(比如排他鎖會産生排隊),還是真的死鎖(比如應用層斷開連接配接或者沒響應了),如果是排隊,那麼将死掉的事務送出或者復原,剩下與其排隊的死鎖會自動解開,如果是失去響應了,就需要手工幹預了
Q:OS層面除了top,還有啥可以檢視系統或者資料庫性能狀況的指令,從系統級
A:iostat、vmstat、sar、uptime等等,還有很多了
Q:如果檢視系統的核心版本用哪個指令
A:uname,-a或者-r都可以
Q:如果檢視系統版本号怎麼辦?
A:檢視/ect/redhat-release檔案即可
Q:如何檢視一個伺服器上有多少個執行個體
A:這個用查監聽狀況應該可以
Q:如果service用的其他名字或者用其他端口呢,這都不确定的
A:如果查/etc/oratab檔案也是可以的其實,當然,有可能裡面沒有寫,那麼查ORACLE_HOME/dbs/initSID.ora或者spfileSID.ora是可以的。
Q:嗯,你英文不太好是吧
A:額,是啊,很爛,丢人
Q:那你能用英文做個簡單的自我介紹嗎?
A:對不起,這個真的沒有準備(不是第二輪才英文面試嗎,郁悶)
Q:哦,那你看還有啥需要問我們的?
A:(自己又問了一些技術問題,主要是12C新技術方面和Oracle未來發展方向的,那個人很耐心的給熊熊解答了,感覺很好)
Q:還有嗎?
A:沒有了,非常感謝
Q:好的,我們會再通知你
A:好的,謝謝
今天的面試就結束了,那個女生把熊熊送下樓的時候提到因為面試結果要呈報美國的那個manager稽核,由他來決定是否可以進入第二輪面試,同時她也提到,這個部門對英語還是很看重,是以這點還是很重要的。
總結一點,基本上技術大方向還是能答出來,但是細節和深度還是不夠,有些問題應該是很清晰的,面試時候還是有些緊張了,總體來說,此次面試受益匪淺,就算失敗,也是一次很有意義的經曆,感謝甲骨文給出的這次機會,會讓我非常受用~
本文轉自bear_cat51CTO部落格,原文連結:http://blog.51cto.com/bearlovecat/1340756 ,如需轉載請自行聯系原作者