根據消費者行為學,對于某一個新的產品,無論產品的好壞與否,總會有2.5%的消費者身先士卒成為第一批吃螃蟹的人。13.5%的消費者表現出瞻前顧后,他們會對前面的2.5%的消費者進行觀察,分析和確認后,成為第二批產品使用者。之后的34%的早期大多數消費者是略顯激進的實用主義者,同時他們也是之前的16%消費者的追隨者。再后的34%的晚期大多數消費者是略顯保守的實用主義者,50%的消費者都使用了這個產品,所以我也要使用。最后的16%的使用者是極其保守的消費者,他們選擇這個產品只有一個原因,就是原來的那款老掉牙的產品實在買不到了。
作為Oracle DBA,對于生產數據庫版本的選擇,你屬于哪個用戶群體?
我們先來看一下Oracle數據庫的版本結構。自Oracle 9i開始,版本的定義大致相同,比如Oracle9.2.0.4,其中9指的是數據庫的版本為Oracle 9i(Oracle的數據庫版本有8i,9i,10g,11g,12c等);2指的是Release 2版本,Oracle在發布一個新的版本時的第一個版本是Release 1版本,較舊版本提供很多新功能有較大改動。
Release 1版本發布一段時間后根據用戶反饋情況做一定改動發布Release 2版本,自Oracle 9i之后,每個版本的最終版都是Release2;4指的是打了Patch Set 3的補丁集(自11g開始,補丁程序集升級都是 out-of-place 的,如安裝11.2.0.2,不再需要安裝基礎版本11.2.0.1)。
在這里Oracle發布的Release 2的第一個版本為Oracle 9.2.0.1,做為搞軟件的我們都清楚,任何一個軟件都有bug,而對于一個新發布的軟件,bug更多,隨著那2.5%的激進用戶的使用反饋的問題,開發了針對性的補丁,將一段時間內的補丁集結成集就形成了PatchSet 1,之后將更多的補丁集結進來形成Patch Set 2、Patch Set 3,新的補丁集基本上對之前的補丁集是包含關系。
大家不要小看這些補丁集,它們都是用戶的系統的各種異常和故障換來的,走在前面的用戶以犧牲自己為代價踩爆了大多數的地雷,才使我們這些后走的用戶有機會用上比之前相對穩定的版本,直至最后形成最終穩定的版本。自Oracle8i開始的穩定版本分別是8.1.7.4、9.2.0.8、10.2.0.5,11g截止筆者完稿時還未形成最終穩定版本,12c R1正在演進。
既然如此,是不是將數據庫更新至某版本的最終穩定版本之后就可以了?比如我安裝10g最穩定的版本10.2.0.5,為什么非要升級呢?
這要從Oracle的技術支持說起。一般對一個產品的支持分為主要支持期,擴展支持期和持續支持期。在主要支持期內會定期發布某些關鍵補丁集,不斷的更新PatchSet,主要支持期過后不再發布關鍵補丁集,只針對非常嚴重的bug開發補丁。進入持續支持期后,將不再針對這個版本的bug開發補丁。比如,針對Oracle10gR2,其主要支持期為2010年7月至2013年7月,其擴展支持期為2013年8月至2015年7月,2015年7月之后為永久支持期,在擴展支持期間出現嚴重的故障,Oracle會給予支持。過了2015年7月之后,再出現新的問題或者故障,Oracle也會支持你,但是如果是bug,Oracle就不再管你了,只會給你一個建議:升級。
因此僅從技術角度來說,在選擇生產庫的數據庫版本時,盡量選擇運行相對穩定的版本。至少應該是已經發布了Release2的Patch Set 3或者4版本。