Oracle副總裁Tom Kyte:Oracle每天都會教給我一些新東西(圖靈訪談)

盼盼姐發表於2013-04-10

圖靈訪談之四十三:專訪Oracle副總裁Tom Kyte

Oracle副總裁Tom Kyte:Oracle每天都會教給我一些新東西(圖靈訪談)

Thomas Kyte是Oracle公司核心技術集團的副總裁,從Oracle7.0.9版本開始就一直任職於Oracle公司,不過,其實他從5.1.5c版本就開始使用Oracle了。在進入Oracle公司之前,Kyte是一名系統整合人員,主要為美國軍方和政府部門的客戶構建大規模、異構資料庫。Thomas Kyte就是主持Oracle Magazine Ask Tom專欄和Oracle公司同名線上論壇的那個Tom,他通過這一方式熱心地回答困擾著Oracle開發人員和DBA的各種問題。

你認為Oracle 12c中最令人興奮的特性是什麼呢?

正如我剛才在演講中所說的(下載slides),以下12個特性是我認為大多數人都會感興趣的。

  1. 更強大的SQL內嵌PL/SQL
  2. 改進的預設值
  3. 增加了 VARCHAR2, NVARCHAR2, RAW資料型別的大小限制
  4. 簡單的 Top-N和分頁查詢
  5. 行模式匹配
  6. 分割槽功能提升
  7. 自適應執行計劃
  8. 增強的統計資訊
  9. 臨時UNDO
  10. 資料優化
  11. 應用連續性
  12. 可插拔資料庫

它們中的有一些是一些很小的特性,比如說第一個,更強大的SQL內嵌PL/SQL,這個東西很簡單,但是可以在資料庫裡構建成巨大的架構上的改變。有一些人可能會覺得有一些特性很無聊,因為和他們沒有很強的關係。所以,我這裡提到的12個特性應該是大多數人都會感興趣的。但是還另外有488個其他特性,我沒有時間來一一講解。12c是一次很大的改進,會有很多改變,也會有很多新的功能。我們在優化器上下了很大功夫。

你的部落格上說新書《深入資料庫體系結構(第3版)》會在今年出版,什麼時間?新書和《深入資料庫體系結構(第2版)》相比會有哪些不同?

那要看什麼時候Oracle的新版本可以完成,新版本釋出之後之後需要6-9個月來完成這本書。Oracle的12c版本大概會在今年6月釋出。所以我覺得可能是今年12月到明年的4月份我有可能會出下一版的書。

這本書會填補11g和12c之間的空白,有很多東西都變了,從儲存、資料庫工作方式上,第二版包含了所有11g以前的資料庫,第三版將保留了第二版中的內容,並加入新的特性。

有很多人會為資料庫遷移的問題困擾,不同平臺間的資料遷移,你的建議是什麼呢?是用RMAN還是用Oracle Data Pump?

如果說我要把一個Oracle資料庫從windows遷移到linux的話,我很可能會用RMAN來做一個整資料庫運輸(full database transport),因為我不需要再建索引,表格,就可以完成整個資料庫的遷移。但前提是我是從Windows 的x86架構遷移到Linux 的x86架構。但是如果我想把Linux x86遷移到Solaris的話我就不能用整資料庫運輸,因為他們的片結構不同,儲存盤的順序不同。如果這樣做的話,改動就太多了,需要很多人力才能夠完成。

這時候就可能要用Data Pump,或者一種叫做GoldenGate Replication的工具。如果我可以選擇當機一陣子的話,這時候如果資料是PB或者TB級的,我可能會用Data Pump來減少負載,把資料庫的資訊複製下來到另外一個上。如果我必須要做到在執行狀態下解決問題的話,我就會用GoldenGate從intel Linux上覆制到Solaris,把這兩個系統同步上,當他們非常接近時,就可以關掉那臺Linux機器,等到最後的資料也收到了,我就可以按照常規的做法來處理新系統上的資料了。如果我要更改硬體架構,或者位元組順序不同的話,我也會用Data Pump或者GoldenGate,這要根據要求是線上操作還是線下操作來決定了。如果硬體、架構、位元組順序都維持不變,而我可以有一段短暫的當機時間,我就會用RMAN Backup and Restore來完成整系統運輸。

在你的書中你提到過開發者和DBA的職責有所不同,你也簡要的提到他們的個性也不盡相同,你認為哪裡最不同?

我不知道是不是個性的原因,但是我知道在很多環境下,開發者和DBA之間,就像是一個無形的牆一樣。DBA感覺自己好像在保護整個資料庫,甚至可能是保護資料庫不受開發者的侵擾。而開發者會把DBA當作一個障礙,他們不把DBA看作幫助自己的人,他們不想和DBA一起解決問題,而是把DBA當作一個問題。並不是說他們的個性不同,而是他們看問題的角度不同。開發者眼裡只有自己寫的應用,而DBA只想如何管理公司的資料。一個應用對DBA來說可能無足輕重,因為一個公司可能有上千個應用。而對於開發者來說,最重要的就是自己的那個應用。所以從某些角度來說,DBA的視野更寬廣,而開發者的視線更集中,這就會產生矛盾。有時候開發者會覺得DBA不想幫他們,也不想教他們。而更多的時候,開發者根本就不想學,他們覺得資料庫什麼的不是他們應該學的。他們都有自己的工作環境,比如C#,或者VB,而SQL/PL SQL和他們一點關係都沒有。這就是障礙。如果開發者意識到,掌握一些知識會幫助他們構建出更好的資料庫應用,而DBA意識到,瞭解更多的開發者會更好地圍繞資料庫來做這些應用,那麼我們最後的應用就會更好。

從效能上來講,大家都在抱怨效能問題,應用永遠都太慢了。沒有人會說,這個應用跑得太快了,快讓它慢點吧。如果你想讓你的應用快10%,從1一分鐘降到54秒,去和你的DBA談談,他們能做到。他們把表格整理一下,重寫一下索引就可以。如果我們想讓應用快10倍的話,從1分鐘到6秒,那就只有開發者可以做到了。他們是唯一可以在數量級上改變這件事的人,他們通過改變獲取資料的方法,或者重新設計他們的架構來完成,而DBA無法完成這些。所以很多人認為DBA是效能調優專家,而開發者們不具備這方面的知識,其實這兩個角色之間需要一個持續的知識傳遞,從彼此身上學習。

20年前是什麼讓你選擇了Oracle,當時它還不是這麼大的公司吧?

20年前的Oracle和今天相比,是一家非常小的公司。我當時為另外一家公司工作,是一家外包公司,為美國軍方構建系統,我當時打算離職,去另外一家公司。但是有一個Oracle的人和我說,你為什麼不來我們公司呢?我的第一反應是,那可真是太酷了!我可連想都沒有想過。當時這個軟體還很新,Oracle只是一家成長很快的小公司。關係型資料庫也是個新概念,尤其是從開放系統上看,如果你想構建一個資料庫,你不一定會選擇關係型資料庫,還有其他很多可選項。所以這樣嶄新的令人興奮的概念和這家公司一樣,就像現在創業公司一樣,這是我能找到最貼近的詞了。現在公司大概有10萬人了,我很高興能看著公司一點點的成長起來。當時看來這可真是一個令人興奮的機會。所以我從一個銷售諮詢起步,一點一點地工作到現在。

你現在在Oracle的職責是什麼?

在Oracle的前14年,我都在一個銷售諮詢組裡面工作。我的工作需要時時接觸到顧客,他們要麼剛買了產品,要麼就是正打算買我們的產品。我的工作就是告訴他們,資料庫怎麼工作,怎麼能最大程度上的利用它,告訴他們效能基準是什麼。如果他們在初始取向上有問題,我就去和他們一起解決問題。最近7年,我都在一個叫做“伺服器技術”的組裡,主要做專案管理工作。

我現在寫的程式碼不多了,但是我每一天都在使用資料庫,因為我在Ask Tom上面回答問題,而我是唯一負責回答問題的。所以他們一有問題就來找我,而我也一直都是資料庫的使用者。當遇到某些問題時,我仍然會和顧客一起工作,比如有效能問題,技術缺陷的時候。我現在總是一週在家工作,一週在旅行,比如現在我在中國,我下一週就會回去完成資料庫的技術文件,我還會在網上做公開課。我仍然在學習資料庫,在我的專欄上回答問題,在下個月我就會開始忙活這本書的下一版了。

當你面試其他DBA或者Oracle開發者的時候,你最重視的是什麼品質?

我最看重的是好奇心。當DBA或者開發者問我這個東西是怎麼工作的,而不是問我具體要怎麼做的時候,我會很高興。很多開發者會把自己的疑惑在網上貼出來,他們想得到的答案是我具體應該怎麼做。他們一有問題就會找地方貼出來,嘗試找到一個解決方案。如果有人幫他們寫程式碼的話,他們拿了就走。我喜歡的程式設計師是想自己把程式碼寫出來,因為未來終將有一個時間,沒有人能夠回答你的問題了,因為別人不知道背景是什麼。所以我覺得好奇心和學習的渴望是最重要的,他們想知道資料庫是怎麼工作的,怎麼做才是最好的,他們想把問題弄明白,然後自己找到解決方法。

有人在工作崗位上幹了20年,可是他的方法還是20年前的,有的人可能從事相同的工作只有5年經驗,但是他迅速地成長,提升工作方法並與時俱進。這種情況下我肯定會要只有5年工作經驗的人。經驗確實很重要,但是溝通能力、表達能力和質量,以及回答問題的能力也很重要。如果我問的問題5年工作經驗的人能給我答案而另一位不能的話,我就不會看重經驗更多的人。所以在面試的時候,經驗確實能夠幫助你敲開大門,但是卻沒法幫你拿到這份工作。你還要證明你有學習、創新、發現新方法的能力,因為我們現在做事情的方法和20年前應該做的可大不相同,如果你還是墨守陳規,那你的經驗就真的不值錢了。

你在培養新人方面是怎麼做的?

我不給他們答案。我告訴他們足夠多的資訊,讓他們自己去發現答案。在我的論壇上這種事你經常可以見到。有人還挺生氣的,說:“你就把程式碼給我不行嗎?”我就會說:“不,我不會給你寫程式碼,我會告訴你怎麼去做,以及涉及的技術,用這個技術就可以解決你的問題,你去學學吧。”有一些技巧就是要學的,等到學會了,你就可以把這些技術應用到很多問題上。

有些人一點也不想知道這東西是怎麼工作的,為什麼是這樣,我認為這是很危險的行為,你把這樣的程式碼給了他,他把這些用在實際生產中,而他實際上不知道這些程式碼都做了什麼。所以我的方法就是,告訴他們資訊,讓他們自己想答案。當我最開始做Ask Tom專欄的時候,我就只是回答問題,他們問什麼我就答什麼,而現在我會給他們一段程式碼,並且告訴他們:這段程式碼幾乎可以幫你解決問題,但是你需要自己想想來改變一部分,這段程式碼才能真的為你所用。只有理解了這段程式碼是如何工作的,你才知道怎麼去改。一旦你解決了問題,歡迎把你的解決方案分享出來,讓別人也能看看學學。

有人說像微軟這樣的大公司越來越缺乏競爭力,很多充滿創造力的年輕人到了這裡就變成了黃金螺絲釘,你們在這方面是怎麼做的,怎麼能讓人們的創造力發揮出來並不斷創新?

在Oracle有很多不同的技術種類,我們有Linux組,我的妻子就在這個組工作的。她是資料庫專家,但是做的是Linux平臺的開發工作。我們有MySQL,NoSQL資料庫,我們還有時間戳資料庫和記憶體資料庫,我們還有一個很大的工具部門在建造Oracle開發者應用快車,有中介軟體,還有應用部門。這些部門,每個都像是一個小公司,我曾在資料庫部門工作,而我所在的部門所做的創新有時候是很瘋狂的。而我們必須這麼做,因為有開源資料庫在和我們競爭,而開源就意味著有那麼多人一直在寫新的功能和特性。我們還有其他對手,比如微軟和DB 2。剛才你提到了微軟,在桌面機上他們幾乎是沒有對手,所向披靡的,所以可能他們缺乏創新的動力吧。而我們在資料庫領域的競爭卻很激烈,不光在Oracle外面我們要競爭,甚至在公司內部我們也要和自己內部團隊競爭,比如Oracle資料庫和MySQL。在Oracle的20年中,我從未感到過無聊。

圖靈其實還出了一本中文的本版書叫做《DBA的思想天空》,這本書的作者也是一位Oracle ACE專家。他在書中倡導的觀點就是學習Oracle的思想才是最重要的,你要像Oracle一樣思考,讓它變成你生活的一部分,而不是把它當作謀生的工具,追求酷炫的技巧,這樣你就會學得更快,成為更成功的DBA。你同意他的觀點嗎?

這和我的想法有很高的相似度。我不會給你生活上的建議,我不會說這會讓你變成一個更好的人,但我會告訴你Oracle資料庫是怎麼回事。事實上我的書只會告訴你這些。我不用很炫的工具,我用SQL+,我不會告訴你小技巧,我只是告訴你資料庫是怎麼工作的。我覺得這也是他想說的,理解工作原理,你就可以用它為所欲為了。雖然我沒有看過這本書,但是我感覺我應該會同意書中的觀點。

相關閱讀:精通Oracle的關鍵是……(Ask Tom上最經常被問到的問題)


更多精彩,加入圖靈訪談微信!

相關文章