答案依 DBA 的工作經驗而有所不同。大部分高級管理員偏愛簡單的命令行 SQL*Plus(我的個人偏好),而其余的人則偏愛使用一些第三方產品。但是,同一個問題在入門級 DBA 那裡卻得到了不同反應:在這一群體中,Enterprise Manager (EM) 顯然是他們的選擇。
這些偏好不難理解。Oracle Enterprise Manager 自從幾年前推出以來一直不斷進行完善,它開始時是字符模式顯示的 SQL*DBA,隨後發展為基於操作系統的客戶端工具,最後具有了Java 風格。EM 提供的信息非常詳細,足夠完成大多數 DBA 任務,可作為不願或者無暇了解新語法並且希望使用 GUI 工具來管理常見數據庫任務(如添加用戶、修改數據文件和檢查回退段)的用戶的解決方案。診斷程序包為性能調節提供了非常需要的 GUI 支持。
但是,阻礙 EM 廣泛使用的一個主要問題是它無法跟上數據庫服務器本身的發展。例如,EM 的 Oracle9i 數據庫版本不支持子分區(該特性在 Oracle8i 中首次引入)。
Oracle 數據庫 10g 中的 EM 新版本改變了這種情況。它具有新的體系結構和新的界面,而最重要的是,它具有一個功能非常強大而完善的工具箱,提供從初學者到高級用戶所需的所有 DBA 技能集。而最好之處在於,它是安裝本身的一部分,無需額外費用。如果您正在評估第三方工具,您當然可以將 EM 加入評估行列中,從而使競爭更加激烈。即使您是那種“笃信命令行”的 DBA(象我這樣),您也會非常欣賞 EM 在某些情況下能為您所提供的幫助。
在本文中,我將為您介紹新的 EM。由於該工具所涉范圍甚廣,因此不可能在此討論所有的特性;我將在此介紹幾個基本特性,並提供其他材料的線索。我將遵循本系列之精神提供實際的示例,演示如何使用該工具解決實際問題。
體系結構缺省情況下,在安裝 10g 軟件時,即安裝 EM 10g時,在概念上它與以前版本的不同之處在於,它不是客戶端安裝的工具;實際上它是位於數據庫服務器本身上的 HTTP 服務器(稱為 DB 控制台)。(參見圖 1。)您可以使用任何浏覽器查看 EM 界面。
圖 1:EM 體系結構DB 控制台的端口號可在 $Oracle_HOME/install/portlist.ini 中找到。以下是一個文件的示例;對於您來說,端口可能不相同。
Ultra Search HTTP port number = 5620
iSQL*Plus HTTP port number = 5560
Enterprise Manager Agent Port =
Enterprise Manager Console HTTP Port (starz10) = 5500
Enterprise Manager Agent Port (starz10) = 1830
從這個文件中我們了解到,數據庫 starz10 的代理程序監聽端口 1830,而 EM 控制台監聽 5500。我們可以通過輸入以下 URL 來調用 EM 登錄畫面:
http://starz/em/console/logon/logon
該 URL 調出登錄畫面,從中您可以以 DBA 用戶登錄。在我們的示例中,我們將以 SYS 登錄。
主數據庫主頁 登錄後即出現主數據庫主頁。主頁的上部提供對重要細節的快速浏覽。(參見圖 2。)
圖 2:主數據庫主頁(上部)在上圖中已圈出了最重要的一些部分,並用本文中編號的引用對其進行了標注。首先,請注意標為“General”(1) 的部分;這一部分顯示了有關數據庫的一些最基本細節,如數據庫從 3 月 20 日起已經啟動,以及實例名稱等。Oracle Home 顯示為一個超鏈接,當單擊該鏈接時,將顯示所有產品以及共享該主目錄的所有其他 Oracle 數據庫。Listener 的超鏈接顯示注冊到監聽器(其名稱就顯示在緊靠它的下方)的所有數據庫和實例。最後,顯示主機名 (starz)。
在名為 “Host CPU”(2) 的部分中,醒目地顯示了 CPU 的詳細信息。“Active Sessions”(3) 部分顯示了活動的會話及其當前狀態 (4)。從上面我們看到,99% 的時間被處於等待狀態的會話所占用。(我們稍後將找出導致這些等待的原因。)“High Availability”(5) 部分顯示了與可用性相關的信息。例如,“Instance Recovery Time”的值(實例的 MTTR Target 的值)確定實例崩潰恢復可能需要的時間。
“Space Usage”(6) 部分很有趣:它顯示與 23 個段相關的警告。(同樣,稍後再詳細介紹這些警告。)“Diagnostic Summary”(7) 部分提供數據庫良好運行的概要信息。所發現的性能問題的數量表示自動數據庫診斷監控程序 (ADDM) — 在 10g 中新增的自診斷引擎 — 主動識別出多少問題。EM 還自動分析您的環境,以確定是否違反了所建議的最佳實踐;此分析的結果顯示在“Policy Violation”部分。最後,EM 掃描警報日志,並顯示任何最新的 ORA 錯誤。這種信息非常有價值 — 在警報日志中自動掃描 Oracle 錯誤使您避免了手動搜索這些錯誤的很多麻煩。
在數據庫主頁的下部,如圖 3 所示,我們可以更詳細地查看其中的一些消息。“Alerts”(1) 部分顯示了需要您注意的所有相關警報,每個警報都可以方便地進行配置。以第一個警報 (2) 為例,它顯示 Archiver 進程因為某種原因而掛起。當然,下一步就是確定其原因。要查明原因,只需單擊它即可。您將從包含該錯誤的 alert.log 文件中獲得更多詳細信息。在此情形下,故障點是一個已經填滿的閃回恢復區;我們只需將其清空,Archiver 即可重新開始工作。
圖 3:主數據庫主頁(下部)
另一個警報 (3) 是有關等待的:數據庫在 69% 的時間中等待一個與等待類“Application”相關的等待。還記得主頁上部是如何顯示一個會話處於等待狀態的嗎?這個警報向我們顯示它正在等待什麼。單擊超鏈接將會立即為您顯示實際的等待。
下一個警報 (4) 顯示一個審計項目,即用戶 SYS 從特定的客戶端機器連接到數據庫。同樣,通過單擊超鏈接,您可以顯示有關該連接的所有詳細信息。最後一個警報 (5) 顯示某些對象無效。單擊超鏈接,您將轉到對象被驗證無效的畫面。
如您所見,數據庫主頁猶如顯示需要您注意的所有事項的儀表板。該界面沒有將詳細信息堆積在屏幕上,其界面相當簡潔,只需單擊即可獲得這些詳細信息。您可以手動搜集所有這些信息,但這可能會花費很多時間和精力。EM 10g 提供了隨取隨用的解決方案。
一般應用
讓我們來看看如何使用新的 EM 來完成一些較常見的任務。
一項常見的任務是變更表及其相應的索引。在數據庫主頁,如圖 3 所示選擇“Administration”選項卡,並引用標記為 6 的項目。在本頁中,您可以管理數據庫來配置回退段、創建表空間和模式對象、設置資源管理器、使用新的調度程序(將在以後的文章中介紹)以及更多事項。在此處選擇“Tables”,這將調出如圖 4 所示的畫面。
圖 4:表管理
注意紅色圓圈中高亮顯示的手電筒標志;這是用於調出數值列表的按鈕。在圖中所示畫面中,您可以單擊 LOV 標志,調出數據庫中的用戶列表,並從列表中選擇一個用戶。單擊按鈕“Go”,出現該用戶的表的一個列表。您還可以使用“%”符號指定通配符 — 例如,通過使用 %TRANS%,可以找出名稱中帶有單詞 TRANS 的所有表。
讓我們來看一個示例。選擇表 TRANS,更改其中的一列。單擊超鏈接,調出如圖 5 所示的“編輯表”畫面。
圖 5:表管理
如果您要將列 ACTUAL_RATE 從 NUMBER(10) 改為 NUMBER(11),則可以更改數字(引用 1),然後單擊“Apply”。要查看完成該任務的實際 SQL 語句,可以單擊按鈕“Show SQL”。
在同一畫面上還可以獲得另一條重要信息:增長趨勢。您將在以後一篇有關段管理的文章中了解到,觀察一段時間內的對象增長情況是可能的。該畫面提供了相同的信息,但卻是以圖形方式表示的。要查看該畫面,可單擊選項卡“Segments”(圖 5 引用 2)。該操作調出段畫面,如圖 6 所示。
圖 6:段畫面
注意紅色圓圈中標記的項目。該畫面顯示有多少空間分配給段 (2)、實際使用了多少 (1) 以及浪費了多少 (3)。在該畫面的下部 (4),您可以看到一幅有關對象所用空間以及分配給對象的空間的圖形。在本示例中,表的使用模式已經穩定 — 因此是直線。
您可以對表執行其他管理操作,方法是使用那些用於該目的的選項卡,如用於管理約束的“Constraints”。
使用 EM 進行性能調節
到目前為止您已經了解到,雖然 EM 的外觀已經更改,但它提供了至少與以前的 Java 版本同樣多的功能。但是,與後者不同的是,EM 現在還支持更新的 Oracle 數據庫功能。例如,EM 現在能夠處理子分區。
但是,有經驗的 DBA 希望這種工具能完成更多的工作 — 尤其是在故障診斷或主動性能調節方面。讓我們舉個例子。回憶前文中我們的數據庫正在“Application”等待類上處於等待狀態,如數據庫主頁所示(圖 3 引用 3),而我們需要診斷其原因。在任何調整過程中需要了解的關鍵事情之一是有多少種組件(如 CPU、磁盤和主機子系統)在相互作用,這樣有助於在上下文環境中綜合觀察所有這些變量。為此,可在數據庫主頁中選擇“Performance”選項卡。此操作調出如圖 7 所示的畫面。
圖 7:“Performance”選項卡
請注意所有量度已在同一時間軸上對齊,這樣更容易觀察它們的相互依賴性。注意尖峰 (3),它對應於調度程序任務。它表明,在該時刻約有七個會話正在等待與調度程序相關的等待事件。那麼,影響因素是什麼?注意處於同一位置(綠色區域)的 CPU 量度 — 它們顯示了曾經使用過的最大 CPU 使用率,在圖形中以虛線 (4) 表示。在該點前後,我們沒有看到 CPU 尖峰出現,這就提供了一條線索。注意 CPU 運行隊列長度中的尖峰 (1),這是調度程序的直接後果,調度程序可能產生了過多的內存需求,導致增加了分頁活動 (2)。如您所見,所有現象集中在一起,促進了對數據庫負載“概況”的了解。
注意在時間軸末尾的尖峰 — 增加了運行隊列長度 (5) 和分頁速率 (6)— 它們與物理讀取的另一個尖峰相關 (7)。原因是什麼?
通過比較圖形“Sessions:Waiting and Working”與尖峰發生的時間,我們可以看到,大部分會話都在“Application”等待類上進行等待。但是我們需要確切地查明它在該時期內正在等待什麼?單擊該時間的區域,調出活動會話畫面,如圖 8 所示。
圖 8:活動會話等待
該畫面顯示會話正在等待的等待事件是 enq:TX ?row lock contention。那麼導致此問題的 SQL 語句是什麼?很簡單:畫面本身顯示了語句 8rkquk6u9fmd0 的 SQL ID(在紅色圓圈中)。單擊該 SQL ID,調出如圖 9 所示的 SQL 畫面。
圖 9:SQL 詳細信息
在該畫面上,您可以看到關於它的 SQL 語句以及相關的詳細信息,包括執行計劃。它表明,這條 SQL 導致行鎖爭用,因此應用程序設計可能是問題的根源。
栓鎖爭用
假設單擊“Performance”選項卡出現類似圖 10 所示的畫面。
圖 10:“Performance”選項卡,示例 2
在圖中,請注意紅色矩形中高亮顯示的量度。您可以看到在 12:20AM 左右有很多與 CPU 相關的等待,這導致在 CPU 中出現龐大的運行隊列。我們需要診斷這一等待。
首先,單擊顯示 CPU 爭用區域的圖形(在圖上標有“Click Here”),以詳細查看該特定等待,如圖 11 所示。
圖 11:活動會話等待
注意在“Active Sessions Working:CPU Used”圖形中帶陰影的框 (1)。您可以使用鼠標拖動它來放置焦點。此操作導致以下的餅形圖(2 和 3)只在該框所包含的時段內進行計算。在這裡我們看到,一個具有 id 8ggw94h7mvxd7 的特定 SQL 正在非常困難地運行 (2)。我們還看到,具有用戶名 ARUP 和 SID 265 的用戶會話是最主要的運行會話 (3)。單擊該會話,查看其詳細信息。此操作調出“Session Details”畫面。單擊選項卡“Wait Events”,調出該會話所經歷的等待事件的詳細信息,其畫面類似於圖 12 所示。
圖 12:等待事件的詳細信息
在該畫面中,請注意在紅色圓圈中高亮顯示的 118 厘秒的最長等待,它在等待庫高速緩存。當您單擊“Latch:Library Cache”的超鏈接時,將會看到類似圖 13 所示的畫面。
圖 13:等待直方圖
該畫面提供了 10g 數據庫之前所沒有提供的一些獨特信息。在診斷這個栓鎖爭用問題時,如何知道這 118 厘秒的等待是由幾個會話中的多個小等待組成,還是只是由一個會話中的一個大等待組成,從而使數據出現偏差呢?
在這裡,直方圖可以幫助我們。從圖上看,您知道大約 250 次會話擁有 1 毫秒的等待(在圓圈中高亮顯示)。會話在 4 與 8 毫秒之間的某處等待了大約 180 次。該畫面顯示,這些等待的時間通常很短,因而它們不是栓鎖爭用的主要症狀。
在數據庫主頁上,您可以通過單擊標為“Advisor Central”的選項卡來訪問 ADDM、SQL Access Advisor 以及其他顧問程序。ADDM 在收集量度時自動運行,並且結果立即發布在 Advisor Central 頁中;當單擊該頁時,將顯示由 ADDM 給出的建議。SQL Tuning Advisor 也檢查這些量度,並在此頁上發布其建議。(我們將在以後的文章中更加詳細地研究 ADDM 和 SQL Tuning Advisor。)
簡化維護
數據庫主頁上標為“Maintenance”的選項卡是常用維護活動 — 如備份和恢復、數據導出或導入(數據泵)、數據庫克隆以及更多活動 — 的啟動控制台。在該畫面上,您還可以對策略驗證警報所基於的最佳實踐的基本原理進行編輯。
結論
如先前所述,這篇文章所涉及的只是巨大冰山的一角。在本文中,我的目的不是為了提供全面的概述;而是希望提供對一些跨多個技能集的特定活動的快速浏覽。