如何对Oracle进行健康检查

发表于:2008-12-08 14:50

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:IT168

  通过健康检查让你的Oracle数据库远离损坏。

  俗话说,解决一件事往往能有100种办法....那么我们如何按照这些方法去做?

  甲骨文公司发布Oracle 11g时,在被称作为健康监控器的框架下推出了数据库健康检查功能。在这个框架内健康检查运行目的是诊断检查你的Oracle数据库。它将监测数据库的各个不同组成部分—主要是检查损坏,包括物理和逻辑上的。虽然没有100种方式... ,但甲骨文有的是,正如我们在过去关于自动诊断库(Automatic Diagnostic Repository-ADR)的文章上看到的那些,还试图通过ADR执行和接入到健康检查。然而,正如我们将看到,它也许不是最好的办法做到这一点。

  所以,在你的数据库中有数据文件,块,撤消,重做,字典,或坐标系损坏吗?你实际上可能运行得很好,因此甚至我们不知道这些损坏的存在。正如我们将看到,在下面的例子中,我有一个新安装的Oracle并且有些损坏在其中。我真正地希望搜寻那些错误; 但那是在另一天。当运行健康检查,你作为一个数据库管理员,可以决定是使用临时模式还是使用完全反应模式运行,当以完全反应模式运行时会有人会抱怨错误讯息或你可能会看到一个Oracle警报警告运行健康检查所出现的错误。你还可以通过使用DBMS_HM PL/SQL软件包进行健康检查操作。依赖于这些是如何运行在你的系统上,他们将花费多久,你如何频繁看到损坏信息,你可能要安排这些作为一个任务。不过,请注意,这是一个新功能,并附带所有其他的新功能,你应该100 %相信他们不会造成损坏或锁定你的系统。只要适当低测试和监视那些操作。同样值得注意的是,这些健康检查可以运行在在线和现有的据库上,或者当数据库是离线( NOMOUNT )时。由于有多种类型的健康检查,因此有些健康检查,只能运行在离线数据库的上。举例来说,重做完整性检查只能是脱机运行,当仔细想想就能明白这其中的奥秘。不用进行各个不同的损坏/完整性检查,你可以使用下列SQL查看他们。它可以让你知道那些检查是可以在线进行的,那些检查是要在脱机的情况下进行的。

  SQL> SELECT name,internal_check,offline_capable,description FROM v$hm_check;

  NAME I O DESCRIPTION

  ------------------------------ - - ----------------------------------------------

  HM Test Check Y Y Check for HM Functionality

  DB Structure Integrity Check N Y Checks integrity of all database files

  Data Block Integrity Check N Y Checks integrity of a datafile block

  Redo Integrity Check N Y Checks integrity of redo log content

  Logical Block Check Y N Checks logical content of a block

  Transaction Integrity Check N N Checks a transaction for corruptions

  Undo Segment Integrity Check N N Checks integrity of an undo segment

  All Control Files Check Y Y Checks all control files in the database

  CF Member Check Y Y Checks a multiplexed copy of the control file

  All Datafiles Check Y Y Check for all datafiles in the database

  Single Datafile Check Y Y Checks a datafile

  Log Group Check Y Y Checks all members of a log group

  Log Group Member Check Y Y Checks a particular member of a log group

  Archived Log Check Y Y Checks an archived log

  Redo Revalidation Check Y Y Checks redo log content

  IO Revalidation Check Y Y Checks file accessability

  Block IO Revalidation Check Y Y Checks file accessability

  Txn Revalidation Check Y N Revalidate corrupted txn

  Failure Simulation Check Y Y Creates dummy failures

  Dictionary Integrity Check N N Checks dictionary integrity

  由于一些健康检查需要额外的输入参数,为了简便起见,我决定只演示那里有不需要输入参数的检查。如果你想要看看那些需要输入参数的检查,你可以执行下列SQL中,我在Oracle文件中发现的:

  SELECT c.name check_name, p.name parameter_name,

  p.type, p.default_value, p.description

  FROM v$hm_check_param p, v$hm_check c

  WHERE p.check_id = c.id and c.internal_check = 'N'

  ORDER BY c.name;

  我不知道我已经遭遇多少次字典问题-从字典表的错误信息到锁定问题-所以我对字典完整性检查比较兴奋。字典完整性检查将检查字典的核心对象完整性,包括:tab$, clu$, fet$, uet$, seg$, undo$, ts$, file$, obj$, ind$, icol$, col$, user$, con$, cdef$, ccol$, bootstrap$, objauth$, ugroup$, tsq$, syn$, view$, typed_view$, superobj$, seq$, lob$, coltype$, subcoltype$, ntab$, refcon$, opqtype$, dependency$, access$, viewcon$, icoldep$, dual$, sysauth$, objpriv$, defrole$, 和 ecol$。这是我很关心的一个很好很长的列表,以及检查应该看看字典的条目内容,制约因素和参照完整性。

  通过手动运行字典完整性检查,我们需要分配下列DBMS_HM.RUN_CHECK PL/SQL软件包—给予该操作额外的名称。在这个例子中,我将命名我的操作为DICTIONARY_CHECK_11032008。

  BEGIN

  DBMS_HM.RUN_CHECK('Dictionary Integrity Check',

  'DICTIONARY_CHECK_11032008');

  END;

  /

  现在,这是它得到一些有趣的。DBMS_HM.RUN_CHECK在ADR存贮其相关信息,因此使用DBMS_HM PL/SQL软件包或ADRCI功能生成的报告。对我来说,当DBMS_HM PL/SQL软件包将以HTML , XML或文本格式输出报告时,我们已经没有多少选择。 因为ADRCI功能只以XML的形式输出报告。然而,我们通过对比这两种方法能使我们看到ADR存在的不足以及知道ADR和DBMS_HM在什么地方功能有重叠。

  由于DBMS_HM.RUN_CHECK将其信息存储在ADR中,我们可以很容易地看到HM_RUN ,通过输入下列ADRCI命令。

  adrci> show hm_run

  ADR Home = /opt/app/oracle/diag/rdbms/db11fs/db11FS:

  *****************************************************

  **********************************************************

  HM RUN RECORD 3

  **********************************************************

  RUN_ID 41

  RUN_NAME DICTIONARY_CHECK_11032008

  CHECK_NAME Dictionary Integrity Check

  NAME_ID 24

  MODE 0

  START_TIME 2008-11-03 18:32:10.819805 -07:00

  RESUME_TIME

  END_TIME 2008-11-03 18:32:18.827387 -07:00

  MODIFIED_TIME 2008-11-03 18:32:18.827387 -07:00

  TIMEOUT 0

  FLAGS 0

  STATUS 5

  SRC_INCIDENT_ID 0

  NUM_INCIDENTS 0

  ERR_NUMBER 0

  REPORT_FILE

  这最显著的信息,或缺失信息,是REPORT_FILE为 。此栏只有当报告生成时才能被填充。建立一个报告可以通过DBMS_HM包或通过ADRCI的 CREATE REPORT命令。

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号