程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> 使用Oracle官方巡檢工具ORAchk巡檢數據庫,oracleorachk

使用Oracle官方巡檢工具ORAchk巡檢數據庫,oracleorachk

編輯:Oracle教程

使用Oracle官方巡檢工具ORAchk巡檢數據庫,oracleorachk


ORAchk概述

ORAchk是Oracle官方出品的Oracle產品健康檢查工具,可以從MOS(My Oracle Support)網站上下載,免費使用。這個工具可以檢查Oracle數據庫,GoldenGate,Oracle Enterprise Manager 12c、13c等Oracle產品,具體支持的產品和相關資料可以參考MOS文檔:ORAchk - Health Checks for the Oracle Stack (Doc ID 1268927.2)。

ORAchk支持所有主流平台,當然,對有些平台的支持並不是很完美,比如,對windows平台的支持是限定版本,而且需要安裝Cygwin這樣的軟件。最新版本的ORAchk對Oracle數據庫的版本支持是:10gR2,11gR1,11gR2,12cR1,12cR2。

ORAchk是一個命令行工具,運行後收集系統配置信息,同時按照預定義的規則,評估配置是否符合Oracle的最佳實踐,評估結果輸出為一份html格式的健康檢查報告,報告中會有所有檢查項的細節數據,以及根據規則給被檢查系統的一個綜合評分。雖然這個評分規則比較“簡單粗暴”,(所有檢查項的分值都一樣),但這個分數還是有一定意義的,起碼給領導或甲方看的時候,可以給出一個量化指標了,而且可以在不同的系統之間,或不同時間的同一個系統之間進行比較。

ORAchk執行及報告樣例

(ORAchk目前最新的版本是12.2.0.1.1,後續的例子裡都是這個版本)

ORAchk的執行比較簡單,下載軟件包(鏈接在上面提到的MOS文檔中),上傳到服務器,解壓縮,然後直接以root身份執行orachk,也可以用oracle軟件安裝用戶執行,在運行時會提問root口令,也可以選擇使用sudo或者略過需要使用root身份的檢查。

以檢查一套linux平台上的oracle 11.2.0.4 RAC為例:

clip_image001

ORAchk會自動識別CRS HOME,請用戶確認(當然,檢查單實例就沒有這個問題了),還會提問是檢查集群中的哪個數據庫。因為RAC的所有實例的主機都會執行檢查,如果以前沒有配置過root用戶的用戶等效性,還會自動幫你配置,也都比較簡單,跟著提示做就可以。檢查完成後,會生成一個打包文件,裡面包含最終的html格式的報告,以及相關的細節數據,報告的例子:

clip_image002

以上面的檢查為例,報告分5部分。Database Server章節主要是OS,ASM和數據據的檢查項,我們只要關注fail和warning的檢查項就可以了:

clip_image003

可以點擊“view”,查看檢查項的具體細節:

clip_image004

Patch Recommendation 是補丁建議:

clip_image005

Cluster Wide的檢查主要是檢查RAC節點之間的配置是否一致,比如時間、目錄屬主之類的

clip_image006

MAA 記分卡主要是檢查系統是否符合Oracle推薦的最大可用性架構:(什麼是最大可用性架構,不是本文的重點)

clip_image007

另外最耗時的10個檢查什麼的,我覺得沒什麼意義。

ORAchk以後台進程的方式定時運行

ORAchk可以配置成以後台進程模式,按照用戶定義的時間間隔,自動運行,同時把結果通過email的方式發送給用戶。

Daemon Mode配置方法

1. 配置orachk

使用orachk設置自動運行參數,有兩個參數是必須設置的:AUTORUN_SCHEDULE 和NOTIFICATION_EMAIL,設置的例子:

# ./orachk –set “AUTORUN_SCHEDULE=3 * * 0 ;[email protected]

其中AUTORUN_SCHEDULE是運行的時間,含義是:AUTORUN_SCHEDULE=hour day month day_of_week

用*代表所有值,比如上面例子中“3 * * 0” 代表每個星期天的3點執行(0代表星期天,6代表星期六)

NOTIFICATION_EMAIL參數的值就是接受報告的郵箱地址。

2. 啟動後台進程

# ./orachk –d start

這種模式需要工具expect來處理root口令,避免多次交互輸入口令,這個工具的下載地址:http://expect.sourceforge.net/

Expect 安裝是源碼安裝,在linux平台上,需要tcl-devel 這個rpm包,安裝expect和tcl-devel 包的過程略。

郵件相關配置

ORAchk支持使用mailx和sendmail兩種方式發送郵件,為了外部郵箱能夠收到郵件,我使用了mailx的方式,在我的測試機上,安裝的是Oracle Linux 6.5,系統自帶mailx 12.4,為了保證能夠讓ORAchk使用mailx,需要保證系統上安裝了uuencode,sharutils rpm包裡面有這個工具。

另外,在/etc/mail.rc,增加下列配置行,主要是目前大部分外部smtp服務器都是需要認證才能發郵件,所以要給出認證信息:

clip_image008

如果一切正常,在orachk目錄下的orachk_daemon.log會有類似的字樣:

clip_image009

郵件樣例

第一次的郵件報告就是一份html格式的報告,後續的報告會包含上一次的報告和本次報告,以及兩份報告的不同之處。

clip_image010

Collection Manager

ORAchk的軟件包裡面還提供了一個web應用,用於管理健康檢查的結果,應用的名字叫Collection Manager(CM),在這個應用中,一次檢查被稱為一個Collection。

CM是一個Oracle APEX應用,Oracle APEX顯然不是這篇文章討論的問題,關於APEX的介紹及安裝部署會在其他文章介紹。

CM在導入APEX後,運行應用,登錄的界面是這個樣子的:

clip_image011

在系統中應用包含兩個樣例Collection,是在一個sample系統上運行的2次檢查。可以很直觀地看到最新一次的檢查,FAIL的檢查項31%,WARNING的檢查項31%,PASS的檢查項38%。

我們把我們實際的Collection上傳兩個:

clip_image012

直接上傳zip包,系統會自動在後台解壓縮並處理,需要花幾分鐘時間。

clip_image013

查看我們上傳的兩個不同系統的Collection:

clip_image014

點擊圖表,可以轉到具體信息頁面,比如我們點擊4%的紅色區域,會轉向這個頁面,除了能查看具體的檢查項信息外,還可以針對問題創建Ticket:

clip_image015

CM應用中應該算是自帶了一個事件管理系統,可以將檢查後發現的配置缺陷,當作一個事件,通過CM中的事件管理功能,進行追蹤管理:

clip_image016

另外這個應用還可以進行不同Collection的比較,也很方便。

從這個應用的內容看,官方希望的系統健康檢查流程應該是這樣的:

1. 客戶自助或服務商現場工程師運行orachk,生成Collection

2. 上傳Collection到CM應用,CM是部署在雲(公有或私有)上的

3. 客戶登錄系統查看、管理自己系統的檢查報告,不再需要服務人員提供檢查結果

4. 檢查出的問題可以使用CM應用來進行跟蹤管理

其實要真能這樣也不錯,但是個人覺得目前可能實現起來還有一些障礙:

1. Orachk和CM系統都沒有中文版,估計還得有服務商翻譯,可能最後還是要轉變成傳統的交付物。

2. Orachk目前檢查的內容還不能算全面,比如性能方面的數據

使用自定義檢查項

ORAchk支持自定義檢查項,用戶只要按照一定的規則,創建對應的XML配置文件,就可以讓ORAchk進行自定義檢查。

ORAchk的軟件包裡面提供了一個sample_user_defined_checks.xml,給出了幾個例子,而且有詳細的注釋,只要按照這個規則,生成user_defined_checks.xml,放在orachk所在的目錄,就可以讓orachk進行自定義檢查了。自定義檢查項目前支持兩種類型:OS 命令和SQL語句。下面我看一個SQL語句的自定義檢查:

這個檢查返回空閒空間比例小於10%的表空間的個數,為0是檢查通過,不為0是FAIL。

<?xml version="1.0" encoding="UTF-8"?>

<UserDefinedChecks

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:noNamespaceSchemaLocation="user_defined_checks.xsd"> <!-- Main Tag (root element)-->

<CHECK AUDIT_CHECK_NAME="Tablespace Utilization">

<!-- This check should run on all supported platforms and versions given the platform and version specs below -->

<ORACLE_VERSION>*</ORACLE_VERSION>

<PLATFORMS>

<PLATFORM TYPE="*">

<FLAVOR>*</FLAVOR>

</PLATFORM>

</PLATFORMS>

<PARAM_PATH>tbs_ut</PARAM_PATH> <!—注意這裡參數值需要和SQL_COMMAND中的返回字符串匹配-->

<SQL_COMMAND> <!—這個SQL返回空閒空間比例小於10的表空間的個數-->

<![CDATA[ select 'tbs_ut = '||count(*) from (select a.tablespace_name,

trunc(sum(a.tots) / 1024 / 1024, 2) Tot_Size_mb,

round(sum(a.sumb) / 1024 / 1024, 2) Tot_Free_mb,

round(sum(a.sumb) * 100 / sum(a.tots), 2) Pct_Free,

round(sum(a.largest) / 1024 / 1024, 2) Max_Free_mb,

sum(a.chunks) Chunks_Free

from (select tablespace_name,

0 tots,

sum(bytes) sumb,

max(bytes) largest,

count(*) chunks

from dba_free_space a

group by tablespace_name

union

select tablespace_name, sum(bytes) tots, 0, 0, 0

from dba_data_files

group by tablespace_name) a

group by a.tablespace_name)

where PCT_FREE &lt; 10;]]> <!—注意大於號,小於號,等號都需要替換為XML能夠處理的字符-->

</SQL_COMMAND>

<SQL_COMMAND_REPORT>

<![CDATA[select 'Free PCT less 10% TBS = '||count(*) from (select a.tablespace_name,

trunc(sum(a.tots) / 1024 / 1024, 2) Tot_Size_mb,

round(sum(a.sumb) / 1024 / 1024, 2) Tot_Free_mb,

round(sum(a.sumb) * 100 / sum(a.tots), 2) Pct_Free,

round(sum(a.largest) / 1024 / 1024, 2) Max_Free_mb,

sum(a.chunks) Chunks_Free

from (select tablespace_name,

0 tots,

sum(bytes) sumb,

max(bytes) largest,

count(*) chunks

from dba_free_space a

group by tablespace_name

union

select tablespace_name, sum(bytes) tots, 0, 0, 0

from dba_data_files

group by tablespace_name) a

group by a.tablespace_name)

where PCT_FREE &lt; 10;]]>

</SQL_COMMAND_REPORT>

<OPERATOR>=</OPERATOR>

<COMPARE_VALUE>0</COMPARE_VALUE> <!—操作符是等號,比較值是0,也就是說SQL返回0,代表pass,否則fail-->

<CANDIDATE_SYSTEMS>*</CANDIDATE_SYSTEMS>

<COMPONENT_DEPENDENCY>RDBMS</COMPONENT_DEPENDENCY>

<DATABASE_MODE>3</DATABASE_MODE> <!— 3代表open,2代表mount,1代表nomount-->

<DATABASE_TYPE>CDB:PDB:NORMAL</DATABASE_TYPE>

<DATABASE_ROLE>PRIMARY</DATABASE_ROLE>

<ALERT_LEVEL>FAIL</ALERT_LEVEL>

<PASS_MSG>The number of Tablespaces which free PCT less 10% is zero</PASS_MSG>

<FAIL_MSG>The number of Tablespaces which free PCT less 10% is not zero</FAIL_MSG>

<BENEFIT_IMPACT>

<![CDATA[ tablespace free pct should be more than 10% ]]>

</BENEFIT_IMPACT>

<RISK>

<![CDATA[ leak of space ]]>

</RISK>

<ACTION_REPAIR>

<![CDATA[ add datafile or resize datafile ]]>

</ACTION_REPAIR>

<LINKS>

<LINK></LINK>

</LINKS>

</CHECK>

<!-- END USER DEFINED CHECKS -->

</UserDefinedChecks>

自定義檢查項,可以和其他檢查項一起執行,也可以單獨執行,單獨執行自定義檢查項的語法是:

# ./orachk –profile user_defined_checks

下面是自定義檢查項報告樣例:

clip_image017

如果你覺得這樣寫XML麻煩,還可以使用CM應用來生成自定義檢查項的XML文件,菜單路徑:Administration -> “+ Add New User Defined Checks”

clip_image018

定義好後,可以生成XML文件並下載:

clip_image019

不過這個功能並不完善,缺乏必要得有效性檢查,如果想不出錯,還是要把XML得規則搞清楚,我個人還是比較喜歡手工寫XML。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved