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为例:

ORAchk会自动识别CRS HOME,请用户确认(当然,检查单实例就没有这个问题了),还会提问是检查集群中的哪个数据库。因为RAC的所有实例的主机都会执行检查,如果以前没有配置过root用户的用户等效性,还会自动帮你配置,也都比较简单,跟着提示做就可以。检查完成后,会生成一个打包文件,里面包含最终的html格式的报告,以及相关的细节数据,报告的例子:

以上面的检查为例,报告分5部分。Database Server章节主要是OS,ASM和数据据的检查项,我们只要关注fail和warning的检查项就可以了:

可以点击“view”,查看检查项的具体细节:

Patch Recommendation 是补丁建议:

Cluster Wide的检查主要是检查RAC节点之间的配置是否一致,比如时间、目录属主之类的

MAA 记分卡主要是检查系统是否符合Oracle推荐的最大可用性架构:(什么是最大可用性架构,不是本文的重点)

另外最耗时的10个检查什么的,我觉得没什么意义。

ORAchk以后台进程的方式定时运行

ORAchk可以配置成以后台进程模式,按照用户定义的时间间隔,自动运行,同时把结果通过email的方式发送给用户。

Daemon Mode配置方法

1. 配置orachk

使用orachk设置自动运行参数,有两个参数是必须设置的:AUTORUN_SCHEDULE 和NOTIFICATION_EMAIL,设置的例子:

# ./orachk –set “AUTORUN_SCHEDULE=3 * * 0 ;NOTIFICATION_EMAIL=raobing@hthorizon.com”

其中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服务器都是需要认证才能发邮件,所以要给出认证信息:

如果一切正常,在orachk目录下的orachk_daemon.log会有类似的字样:

邮件样例

第一次的邮件报告就是一份html格式的报告,后续的报告会包含上一次的报告和本次报告,以及两份报告的不同之处。

Collection Manager

ORAchk的软件包里面还提供了一个web应用,用于管理健康检查的结果,应用的名字叫Collection Manager(CM),在这个应用中,一次检查被称为一个Collection。

CM是一个Oracle APEX应用,Oracle APEX显然不是这篇文章讨论的问题,关于APEX的介绍及安装部署会在其他文章介绍。

CM在导入APEX后,运行应用,登录的界面是这个样子的:

在系统中应用包含两个样例Collection,是在一个sample系统上运行的2次检查。可以很直观地看到最新一次的检查,FAIL的检查项31%,WARNING的检查项31%,PASS的检查项38%。

我们把我们实际的Collection上传两个:

直接上传zip包,系统会自动在后台解压缩并处理,需要花几分钟时间。

查看我们上传的两个不同系统的Collection:

点击图表,可以转到具体信息页面,比如我们点击4%的红色区域,会转向这个页面,除了能查看具体的检查项信息外,还可以针对问题创建Ticket:

CM应用中应该算是自带了一个事件管理系统,可以将检查后发现的配置缺陷,当作一个事件,通过CM中的事件管理功能,进行追踪管理:

另外这个应用还可以进行不同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

下面是自定义检查项报告样例:

如果你觉得这样写XML麻烦,还可以使用CM应用来生成自定义检查项的XML文件,菜单路径:Administration -> “+ Add New User Defined Checks”

定义好后,可以生成XML文件并下载:

不过这个功能并不完善,缺乏必要得有效性检查,如果想不出错,还是要把XML得规则搞清楚,我个人还是比较喜欢手工写XML。

使用Oracle官方巡检工具ORAchk巡检数据库的更多相关文章

  1. python:GUI图形化数据库巡检工具

    问题描述:时间过得真快,一眨眼又一个月过去,2022又过去大半,7月的尾巴,终于稍微做出来点 东西,本人也不是开发,也是在不断学习的一枚小白.这次使用tkinter制作了一个mysql的巡检工具,使用 ...

  2. Oracle 第三方管理工具整理

    Oracle 第三方管理工具整理 1.OB(SI Object Browser) 官方网址: http://www.ctdw.com.cn说明:小软件大功能,个人最爱它的数据库导入.导出功能,一键导入 ...

  3. PL/SQL工具连接ORALCE数据库的方法

    http://www.cnblogs.com/dongzhiquan/archive/2011/11/21/2257629.html 1.利用ORACLE NET MANAGER工具 1)打开 ORA ...

  4. 如何进行oracle capability i/o(压力测试数据库服务器i/o性能)

    一 .oracle 有关 IO 信息的相关统计函数 Oracle i/o stack包含hbas,存储相关的交换机.存储物理磁盘.那么oracle建议在应用程序部署的时候,建议去验证i/o避免存在问题 ...

  5. Oracle官方版Entity Framework

    千呼萬喚始出來! Oracle官方版Entity Framework問市,邁入開發新時代 自從我得了一種"不用LINQ就不會寫資料庫程式"的病,為了滿足工作上要搭配Oracle(雖 ...

  6. 采用oracle官方文件(11G)——初步Concept

    采用oracle官方文件(11G)示例 这里是oracle官方文档界面,想了解oracle,阅读官方文档是唯一的方法,大致了解官方文档的使用,对官方文档有一个更直观的认识.文档可通过文章关联的链接查看 ...

  7. Oracle日常运维操作总结-数据库的启动和关闭

    下面是工作中对Oracle日常管理操作的一些总结,都是一些基本的oracle操作和SQL语句写法,在此梳理成手册,希望能帮助到初学者(如有梳理不准确之处,希望指出). 一.数据库的启动和关闭 1.1 ...

  8. DBeaver数据库管理工具连接Sybase数据库

    DBeaver数据库管理工具连接Sybase数据库 1. 下载DBeaver 官方网站:http://dbeaver.jkiss.org/ DBeaver5.3.1解压缩版(不用安装和配置):http ...

  9. oracle基础开发工具及常用命令

    oracle自带用户的讲解 1,oracle安装完毕创建数据库实例的时候会自动生成sys,system,scott 2,sys用户超级管理员,具有oracle的最高权限,具有sysdba角色,具有cr ...

随机推荐

  1. 网页提交中文到WEB容器的经历了些什么过程....

    先准备一个网页 <html><meta http-equiv="Content-Type" content="text/html; charset=gb ...

  2. win7安装时,避免产生100m系统保留分区的办法

    在通过光盘或者U盘安装Win7操作系统时,在对新硬盘进行分区时,会自动产生100m的系统保留分区.对于有洁癖的人来说,这个不可见又删不掉的分区是个苦恼.下面介绍通过diskpart消灭保留分区的办法: ...

  3. html5标签canvas函数drawImage使用方法

    html5中标签canvas,函数drawImage(): 使用drawImage()方法绘制图像.绘图环境提供了该方法的三个不同版本.参数传递三种形式: drawImage(image,x,y):在 ...

  4. iOS开发之ReactiveCocoa下的MVVM(干货分享)

    最近工作比较忙,但还是出来更新博客了,今天给大家分享一些ReactiveCocoa以及MVVM的一些东西,干活还是比较足的.在之前发表过一篇博文,名字叫做<iOS开发之浅谈MVVM的架构设计与团 ...

  5. Xamarin与Visual stuido2015离线安装包分享

    最近看见大伙留言才知道国内安装Xamarin开发原来这么艰辛啊! 第一:网速不快 第二:Android SDK下载受限 等等... 鉴于这些原因,特写下这篇文章以及分享打包好的离线包以帮助大家尽快体验 ...

  6. 代码的坏味道(18)——依恋情结(Feature Envy)

    坏味道--依恋情结(Feature Envy) 特征 一个函数访问其它对象的数据比访问自己的数据更多. 问题原因 这种气味可能发生在字段移动到数据类之后.如果是这种情况,你可能想将数据类的操作移动到这 ...

  7. js attribute 和 jquery attr 方法

    attribute 是原生js dom 对象上的一个属性,这个属性有很多子属性,比如 isId(判断属性是否是Id) , name (获取属性名称) , value (获取属性值),attribute ...

  8. 深入理解 Android 之 View 的绘制流程

    概述 本篇文章会从源码(基于Android 6.0)角度分析Android中View的绘制流程,侧重于对整体流程的分析,对一些难以理解的点加以重点阐述,目的是把View绘制的整个流程把握好,而对于特定 ...

  9. https 安全验证问题

    最近为了满足苹果的 https 要求, 经过努力终于写出了方法 验证 SSL 证书是否满足 ATS 要求 nscurl --ats-diagnostics --verbose https://你的域名 ...

  10. 用SecureCRT连接虚拟机中的Linux系统(Ubuntu)

    今天突然练习linux命令行的时候,想在window中联系linux命令行.经过一番dudu找到了一个不错的的工具(SecureCRT--意思安全)就是用SSH链接linux主机.推荐大家使用.毕竟w ...