就我而言,最佳實踐之是以是最佳實踐必須滿足1)它能夠被證明是有效的,2)它足夠靈活,可以适用于多種環境。下面的5條基本最佳實踐源于我多年使用大大小小的Oracle系統的實際經驗總結。
#1: 建立多個Oracle Homes
我最喜歡的最佳實踐是關于多個Oracle Homes。下面将介紹這是怎麼回事。當安裝一個更新檔或者一個更新檔集的時候,我反對在現有的Oracle Home上安裝這些更新檔。相反,我建議建立一個Oracle Home,然後在這個新的Oracle Home上安裝這些更新檔。
比如,我在/app/oracle/db_1上建立第一個Oracle Home。當需要打一個更新檔,我在一個不同的home上安裝整個Oracle軟體——/app/oracle/db_2——然後對它安裝更新檔。在安裝和打更新檔的過程中,原來的資料庫一直在/db_1 Home中運作。當outage window出現的時候,我需要做的就是關閉Oracle;将Oracle Home指向db_2,再啟動資料庫。假如出現了問題,我可以将Oracle Home重新指回原先的目錄。
總結傳統的方法如下:
1. 關閉資料庫
2. 給Oracle Home打更新檔
3. 啟動資料庫
4. 假如存在問題
5. 關閉資料庫
6. 復原更新檔
7. 啟動資料庫
第2步和第6步可能會花費三個小時,具體的時間依賴于更新檔的數量。而在此期間資料庫是停止的。
在新方法中:
1. 安裝一個新的Oracle Home
2. 給新的Home打更新檔
3. 關閉資料庫
4. 将Oracle Home指向新的位置
5. 啟動資料庫
6. 如果出現問題
7. 關閉資料庫
8. 将Oracle Home指向原來的位置
9. 啟動資料庫
資料庫隻有在第4步和第8步之間才是停止,這段停機時間最多幾分鐘,不超過一小時。
下面是這種方法的好處:
1. 停機時間顯著降低,隻是原有時間的六十分之一。
2. 由于不用復原更新檔,風險顯著降低;你隻要回退到老版本。
3. 你可以執行“diff”指令來比較這前後兩個Home,看發生了哪些變化。你頁可以發現多個Home之間的不同。
4. 你可以将同一台伺服器上運作的多個資料庫逐個的轉移到新的Oracle Home上。
5. 使用目錄(inventory),你可以檢視不同Oracle Home以及它們的更新檔版本。
唯一的負面結果是空間消耗——你需要兩個Oracle Home的空間。但是考慮到一個典型的Oracle Home占用大概4G或者更少的空間,這方面的影響還是無關緊要的。
#2:設定DB審計跟蹤
在資料庫建立過程中,在初始化參數檔案中加入參數AUDIT_TRAIL = DB,可以為DB設定audit trail。在設定該參數之後,并不會馬上開始審計,因為一定要對對象發出顯式的AUDIT指令才開始審計。但是隻有在這個參數設定為非FALSE值(這個參數的預設值)之後,指令才會生效。這個參數是非動态的,資料庫必須重新開機才能改變AUDIT_TRAIL的值。為了避免修改參數的麻煩,通常将該變量設定為DB,即使你并不打算審計什麼。這不會造成任何問題,而且你可以在時機成熟的時候開始審計。
#3: 不用使用.log
不要使用.log作為redo日志的擴充名。有些人可能會認為日志檔案是多餘的,而執行一個腳本删除所有的日志檔案,這樣做結果可能是失去所有的線上redo日志,進而強迫進行一次資料庫恢複。相反,使用“redo”或者“rdo”作為redo日志的擴充名。
#4: 預演RMAN的恢複
在不進行真實的恢複的情況下,預先檢查RMAN恢複,找出在恢複過程中會用到的所有的備份部分。這将消除在真實的恢複過程中發生缺少備份的情況。
#5: 當用戶端運作在資料庫相同的伺服器上時,為這些用戶端建立Oracle 使用者
Oracle資料庫伺服器軟體也包含了用戶端的部分,讓用戶端能夠連接配接到同一台伺服器上的資料庫。但是最佳實踐是不使用初始的使用者名;而是使用一個新的。比如,如果“oracle”是安裝Oracle軟體的使用者,建立一個叫做“oraapp”的使用者,用于安裝用戶端的軟體。這個“oraapp”使用者不應該是dba或者oinstall組的成員;是以該使用者無法作為sysdba登陸到資料庫上。建立一個叫“appgrp”的使用者組,并且将使用者oraapp加入這個組。所有的應用程式的使用者也應該是appgrp組的成員。這樣他們可以使用sqlplus,sqlldr和其他的程式,但是無法作為sysdba連接配接到資料庫。
一條常見的實踐是以資料庫軟體所有者的使用者使用用戶端軟體。但是從版本10.2開始,Oracle改變了安全政策,取消了對Oracle Home的全局執行權限。這樣唯一的選擇是讓應用使用者作為dba組的成員,或者改變對Oracle Home的權限——兩種方法都讓資料庫非常脆弱。