hwayw:
您先自我介紹一下?分享以下您的職業經歷?您目前的從事的工作?hwayw:
根據您多年的oracle開發經驗,分享一些在大型oracle開發專案中,前期需要準備什麼?中期需要注意什麼?後期需要做什麼維護?
ora-600:
首先說一下,其實我沒有多年的開發經驗,我做開發,也就五年,之後就全面轉行了,呵呵。
隨著企業資訊化的發展,越來越多的大型行業、企業使用者對資訊化的要求變得更高,他們不再侷限於能做什麼,而更強調能做到什麼、能得到什麼,尤其是一些行業使用者,經過多年的資訊化發展,分布式管理已經不再適合他們的需求,他們開始強調集中管理、綜合應用,所以越來越多的專案開始變得大型化、規模化、集中化,在這樣的需求下,如何保障這種應用系統的穩定、高效、可靠的執行,就變得非常重要。
在大型應用系統中,由於業務量、資料量的巨大,很容易造成前期規劃不當,中期維護複雜,後期調整難度大的情況,因此,必須在前期就要盡可能考慮全面。由於我是從開發轉到資料庫服務、培訓,因此有些觀點會有相當的侷限性,下面提到的僅僅是從我個人的感受中提煉的所想,希望對大家有一定的啟發,不足之處也希望大家諒解。
在我們的技術團隊成立之初,就一直帶著乙個理念,希望把dba的工作從簡單的後台維護和救火,轉換到前期的規劃設計上,dba在乙個專案的生命期中應該是無處不在的,乙個有豐富經驗,尤其是有過專案開發經驗的dba,對於專案生命期的各個環節對效能、穩定性的影響力感受頗深,因此,不論專案的前期、中期還是後期,dba都應該積極參與,盡其能力為專案的效能提供無窮盡的理念、方法、思路。
在專案的前期,主要是需求分析、架構設計、應用設計等工作,在這個過程中,dba都可以參與或者提供建議,在需求分析時,dba可以提供業務、技術實現手段的評判,對一些需求進行適度的限制以保障優化方法的實現;在架構規劃時,可以根據使用者對高可用、容災、健壯性、效能等多方面的要求,提供rac、ha、dg、gg、使用版本、硬體資源需求等多方面的資料庫架構規劃;在應用設計階段,對應用的需求評估,確定使用前台語言實現還是使用plsql實現,並設計e-r模型,構建應用的資料模型。在專案前期更多工作集中在規劃設計上,雖然這時並不需要dba去做什麼,但dba的經驗對於前期設計的準確性與完整性有很大的幫助。
專案的中期主要是**開發、資料庫部署、效能測試等工作,在**開發階段,dba將會輔助開發人員制定**規範和資料規範,並對高效sql進行評估,確保在大資料需求下高質量的sql**;同時通過對需求的了解和**的掌握,確定了應用對資料庫的資源需求特性和資源消耗量,在此基礎上,更準確地規劃儲存、網路、主機、中介軟體等資源,並且配合理配置資料庫,為不同需求構建不同型別的表,並且在相應欄位上構建索引以滿足各種查詢需求;而對於效能測試階段,dba則需要做更細節的監控和精細分析工作,通過各種測試資料的分析,確定目前系統仍然存在的潛在風險,從穩定、可靠、高效等多方位確定調整方案,確保系統上線後的平穩執行。
專案的後期主要就是運維,這就是大家認為的傳統意義上dba應該去做的事情,日常運維中最主要的就是監控和預警,通過對系統的理解,dba可以設定一些監控點和閥值,通過這些方法將系統潛在的隱患提前發現和排除,以保證系統的正常執行。。。可以說,dba的參與對整個系統的效能和穩定性都有著非常重大的意義,所以別再把dba當作路上的石子,其實他是大廈的脊梁。
hwayw:
資訊化的飛速的發展對資料庫的提出了更多的要求,很多人現在都在討論要做資料庫效能優化,資料庫的效能優化主要需要從哪些方面來實施?一般多大的資料量才需要考慮資料庫型效能優化?是否在資料庫設計之初就需要考慮效能優化呢?
ora-600:
說到效能問題絕不能簡單的說是資料庫效能,而應該考慮的是整體應用效能,因此,需要優化的地方涉及應用系統的各個環節,就像問題2所說,不論是前期的規劃設計,還是中期的運維調整,還是後期的sql分析,都是效能的一部分,所以在專案整個生命期內,從需求分析、架構設計、應用設計、資料庫設計、儲存規劃、網路規劃、中介軟體規劃到**開發、資料庫部署等各個環節,都需要考慮效能的影響。
效能問題與資料量有關,但並沒有絕對值,影響效能的因素很多,資料量、併發量、主機配置、網路環境、應用架構、**質量等等都會對效能帶來很大影響。我所見過的最小的乙個資料庫,最大的單錶資料量僅有幾m,也就是10萬條資料左右,整個資料庫不到200m的資料,併發會話只有100左右,但最慢的查詢一次就要執行十幾分鐘,所以很難簡單的說資料量多大就要考慮效能優化。
既然影響效能的因素很多,而其中不少因素又是在系統上線後很難調整的,所以前期規劃設計的優化肯定很重要。如果前期不做好,即使系統上線執行了,在一段時間之後,各種效能問題也會隨後出現,而到了那個時候,就會發現很多優化方法都受到了種種限制,以至於無法順利實施,這就是前期沒有考慮效能問題所帶來的隱患。因此,前期規劃設計絕對不能忽視,必須提前考慮各種設計方案在效能上的影響,綜合平衡多方面的需求。
hwayw:
很多人認為:現在oracle的技術越來越成熟,功能也越來越完備,這樣對於oracle的開發會變的更加的簡單,不需要多高的技術水平就可以用oracle完成資料庫的建設,您是否認同這種觀點?為什麼?
ora-600:
我並不同意這種觀點。不要把希望寄託在別人身上。這個觀點只有在系統負載量不大、業務不繁忙的時候才能使用,所有大型系統必須摒棄這個觀點。
現在很多資料庫都在通過各種技術手段使開發簡單化、實施傻瓜化,這是技術發展的乙個必然階段,任何使用者都不希望使用的是乙個自己搞不定的軟體,但是傻瓜式的構建只適合傻瓜式(或者叫通用性)的需求,這種開發和實施的自動化、簡單化,實際上是資料庫軟體智慧型化的乙個發展過程,但這種智慧型化到目前為止還非常弱,不論是自動診斷還是自動調整,都有很大的侷限性和延遲性,所以如果大型系統完全依賴於自動管理與調整,將會有非常多的問題發生。同時目前我們所用到的自動化與智慧型化僅限於資料庫內,而一套應用系統需要考慮健壯性、可用性、高效性、安全性等各個方面,這些方面是否能滿足需求,並不僅僅是通過資料庫的自動化就能解決的,需要考慮系統、架構、需求、**、儲存、網路等多個環節,因此,絕對不要認為資料庫技術發展了,我們就可以完全丟掉系統規劃設計、**優化、儲存調整等一系列技術需求。資料庫技術發展,僅僅意味著oracle希望能減輕我們的工作,並且從sql級進行一些自動調整,並不能根本上改變系統優化的模式。
hwayw:
隨著資訊量的增多,商務智慧型和資料探勘越來越重視,現在很多人認為:oracle已經不如一些新技術如hadoop,nosql等能滿足企業的業務需求,這些都會對現在的oracle dba的工作帶來衝擊?具體體現在哪些方面?
ora-600:
技術在不斷的發展,我們有時候也會感嘆,oracle這種傳統的資料庫,終將會逐漸衰退,也許是五年,也許是十年。當然,並不是說將來不會再有傳統資料庫了,而是說資料庫的領域將會逐漸細分,大型資料庫、小型資料庫、巨型資料庫,結構化資料庫、非結構化資料庫,影象資料庫、檔案資料庫、**資料庫。。。現在我們一律放在oracle資料庫中,通過不同的應用滿足不同的需求,但隨著資料和需求的不斷變化,技術的推進終將會將每種需求滿足到極致,到了那個時候,傳統資料庫可能更多的被使用在中小型資料量的通用領域,而在一些專用領域將是百家爭鳴、各展所長的各種新技術廣泛使用。
dba作為核心資料的管理人員,必須能夠掌握相關的技術細節,因此技能的提高是必須的,新技術的使用將會迫使我們不斷學習新的知識,不斷掌握這些新技能。當然,並不是說將來dba會很辛苦,要學習這麼多新技術,因為任何一種技術,都有它使用的領域,大部分dba都只在他自己的資料庫領域中工作,很少跨多種資料庫領域,就像現在絕大多數oracledba並不會管理sql一樣,所以說有什麼衝擊有點誇張,我覺得更多的是要去了解那些新技術,從而選擇是否要通過學習來進入相應的資料庫領域。
新技術帶給我們的是更多的選擇,而不是必須的技能,因此,了解它是需要的,但是否選擇它那要看對自己的定位以及對新技術的認可。
hwayw:
您對未來想成為dba的網友什麼意見和建議?
ora-600:
勤奮、自學是非常重要的,汗水永遠是成功的基石。
為了工作,去google,但為了自己,看書和試驗更重要。
不要說你沒有環境可以測試,所以學不會,環境是可以自己創造的,你可以裝虛擬機器,你也可以在網上與別人討論他們的案例,這都是產生學習環境的基本方法,說沒有環境就學不會,那只是逃避的藉口。
與別人的交流和討論是快速成長的必要手段。
多看書,多練習,踏踏實實的學習,別總盯著別人的薪水,至少在你能力不夠之前。
dba是個好職業,但dba不是終點,而是另乙個起點,事實證明,很多經驗豐富的dba,逐漸成為系統運維的管理者,或者企業級架構師,它們在另外的崗位上,很好的運用他們的dba經驗為企業的it發展提供著必要的技術、經驗支撐。
MySQL資料庫技術李 MySQL資料庫技術
11.查詢所有同學的學號 姓名 選課數 總成績 select student.s id,student.sname,count sc.c id sum score from student left outer join sc on student.s id sc.s id group by stu...
Oracle資料庫的找回DBA賬戶的密碼
這是大二時候寫在qq空間裡的一篇文章,我還記得當時這個問題花費了我整一天的時間去搞定它,所以那時體會頗深,所以那時特意記錄了下了這個解決的過程,今天突然有興致想找出幾篇大學時寫在空間裡的文章和大家分享下,以防類似當年的我發生的話,又得花費很多時間,以下為當時記錄的全部內容 今天登入用使用者scott...
對QSqlite資料庫的操作
首先新建乙個資料庫 qsqldatabase db qsqldatabase adddatabase qsqlite db.setdatabasename database.db 給資料庫檔案加密 db.setusername hsl db.setpassword 000000 注意,這僅僅是對da...