甲骨文面試歸來

此文謹以紀念我們曾經失去的青春

在節前(端午節)就收到了甲骨文的電話,說我投遞的簡歷被選中,邀請來面試,分別是兩個部門,在深圳總部打過來的全球化支持部(工作地點依然爲北京)和北京總部打過來的公有云事業部,職位都是高級DBA

由於全球化支持部涉及英語口語要求較高,個人還是更傾向於公有云事業部,但是先接到了前者的面試郵件,約定618日下午去面試,在軟件園裏的甲骨文總部大樓~

到了軟件園大門,以前熊熊一直以爲東門口那個十號樓上寫的Oracle甲骨文的就是甲骨文總部了,還覺得那裏挺小的了,郵件中提到的是24號樓,於是進入十號樓問了保安,才知道要走很遠(一開始沒在意,後來才知道,真的好遠)

沿着路一直往軟件園深處走去,真的好遠啊,沿途經過了一箇中歐國際工商學院,那種別墅似風格的教學樓,不高,就2-3層,但是應該很奢華,樓下停着很多的豪車(奔馳、寶馬、奧迪,都是進口高系),啥時候熊熊才能來這裏學習呢,嘻嘻~

走了大約25分鐘的路程,終於來到了24號樓,甲骨文北京總部所在地,真的很壯觀,就像一個小型社區,在門口照了張相,把甲骨文的Logo照了進來,找到右手邊的T2樓,進去到前臺,說明來意,問是否預約好,回答是的。

前臺保安讓熊熊給聯繫人打個電話,這時纔想起,聯繫人根本沒有給熊熊留電話。於是在前臺小姑娘那裏查聯繫人的電話,結果因爲甲骨文都是英文名字的原因,我只知道對方中文名稱,無法查到,正在着急中,對方正好打電話過來,告知她已經到樓下,說稍等片刻,下來接熊熊~

見面以後,一個長相很一般的女生,氣質和親和度也不是特別贊,填好表格以後,由她領上3樓,到了一間小會議室,過不多久,進來一位30來歲的高級工程師(也許就是manager)模樣的男人,面試正式開始~

也沒有浪費時間讓熊熊做什麼簡單的自我介紹,只是問了一下現在工作主要做什麼,可能熊熊答的有點簡單,讓對方感覺是普通的運維DBA,於是針對熊熊的問題開始了深入面試

Q:你在工作中主要負責哪塊業務現在

A:主要負責整體數據庫的日常維護,保證數據庫的穩定、可靠、高效運行

Q:那你們通常如何來巡檢,有哪些工具手段?

A:因爲銀行方面無法使用OEM或者GCGrid Control)這種圖形化工具,因此我們的日常巡檢都是用AWRASHADDMRDA等一系列工具來做的,如果有具體的問題,也會通過一些動態視圖來具體查看,包括查看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,這個事務就不成立。

QOK,你在工作中都是單實例還是有RAC

A:是這樣的,我們有一個小機,上面跑了五個單實例的庫,另外還有兩套RAC環境

Q:你們的RAC是兩個節點的?

A:是的,以前也做過4個節點的

Q:那麼你如何來查看RAC的狀態?

A:通過crs命令就可以查看了

Q:具體命令是什麼呢?

Acrs_stat –t就可以查看到節點狀態

Q:那麼你如何知道RAC中有幾個節點呢?

A:使用剛纔那個命令其實就可以看到有幾個節點了

Q:你說的這是所有節點正常啓動的情況,如果不是呢?

A:是這樣,有一個比較笨的方法,我使用DBCA命令中的instancemanager來看我的節點信息,只要節點的OCR信息沒有被破壞,那麼都可以看到的

Q:你剛纔提到OCR信息被破壞,那麼如果OCR信息被破壞了,該怎麼做?

A:我們可以通過重建OCR來修復

Q:具體怎麼做呢?

A:通過修改ocr.locparamfile.crs文件進行設置,然後通過命令進行重建

Q:什麼命令?

A:額,那個,唉,想不起來了,不過如果做的話,我知道該如何做的,除了重建OCR,我們也可以刪除節點的OCR信息再添加,效果是一樣的,只是OCR重建更方便些

Q:你們裝RAC用的是ASM嗎?

A:是的

QASM裏有個au_size參數,你知道嗎?

A:這個真沒接觸過(回來以後熊熊仔細看了這個參數,Oracle 10g是默認的1m大小,不能修改,11g以後可以手工修改,所以熊熊不知道)

Q:如果單實例變成RAC,有什麼方法嗎?

A:可以使用DGstandby複製出一個節點,然後添加節點的OCR信息等,用rman克隆應該也可以的

Q:你提到DG,你有沒有做過DG

A:這個是有的

Q:那你說說DG都需要配置哪些?

A:首先在主庫開啓歸檔和輔助日誌,然後設置一些參數,比如log_archive_dest裏添加主庫和備庫的信息,fal的兩個參數要設置(fal_clientfal_server),然後如果有文件轉換需要設置convert(包括dblog),將主庫的spfile轉化成pfile,傳送pfile和密碼文件到從庫機器上修改相應參數,主庫可以通過RMAN做一個全備,然後可以使用RMAN的輔助數據庫功能在從庫進行恢復,10g的物理DG只能是mount模式,11g可以是open read only模式,這樣可以將此庫設置爲只讀查詢庫,來實現讀寫分離

Q:你們工作中有沒有用到DG

A:我們用到的是GGGoldenGate

Q:你能簡單說一下GG的設置嗎

A:先在兩個節點上(主備庫)分別按照ogg軟件,設置mgr進程,然後在主庫上設置抽取進程和採集進程,在備庫上設置採集進程,像我們上次遷移新查詢庫,首先用rman進行全庫備份,然後使用克隆技術克隆出一個庫,再通過GG將增量數據抽取過來,就可以了,爲了安全起見,禁用了GGDDL同步功能,如果要是雙向複製,就需要在備庫再創建一個抽取進程和採集進程,相應在主庫在添加一個採集進程即可。

Q:像RMAN在執行中會佔用到SGAlarge pool,那麼GG在運行中是自己獨立的進程,還是也會佔用Oracle的進程

Adata pump的話應該會佔用到Oracle的進程吧,感覺GG應該是也會佔用large_pool,但是具體的沒有研究過那麼深,所以不知道對錯

Q:如果是一個SQL產生了死鎖,有什麼方法能看出來?在OS層面

A:是這樣的,首先可以使用top來看一下CPU和內存的情況(根據每個進程),並且結合ps –ef | grep ora命令來查找,如果真的是死鎖的話,那麼通過v$session中的lockwait顯示出來的sidOS上的pid是會對應的。

Q:死鎖有什麼解決辦法?只能人工殺死嗎?

A:具體問題具體分析,如果是latch,不需要管他,他是搶佔式的,如果是lock,那麼要看到底是事務佔用了(比如排他鎖會產生排隊),還是真的死鎖(比如應用層斷開連接或者沒響應了),如果是排隊,那麼將死掉的事務提交或者回滾,剩下與其排隊的死鎖會自動解開,如果是失去響應了,就需要手工干預了

QOS層面除了top,還有啥可以查看系統或者數據庫性能狀況的命令,從系統級

Aiostatvmstatsaruptime等等,還有很多了

Q:如果查看系統的內核版本用哪個命令

Auname-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審覈,由他來決定是否可以進入第二輪面試,同時她也提到,這個部門對英語還是很看重,所以這點還是很重要的。

總結一點,基本上技術大方向還是能答出來,但是細節和深度還是不夠,有些問題應該是很清晰的,面試時候還是有些緊張了,總體來說,此次面試受益匪淺,就算失敗,也是一次很有意義的經歷,感謝甲骨文給出的這次機會,會讓我非常受用~


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章