俗话说 解决一件事往往能有 种办法 那么我们如何按照这些方法去做?
甲骨文公司发布Oracle g时 在被称作为健康监控器的框架下推出了数据库健康检查功能 在这个框架内健康检查运行目的是诊断检查你的Oracle数据库 它将监测数据库的各个不同组成部分—主要是检查损坏 包括物理和逻辑上的 虽然没有 种方式 但甲骨文有的是 正如我们在过去关于自动诊断库(Automatic Diagnostic Repository ADR)的文章上看到的那些 还试图通过ADR执行和接入到健康检查 然而 正如我们将看到 它也许不是最好的办法做到这一点
所以 在你的数据库中有数据文件 块 撤消 重做 字典 或坐标系损坏吗?你实际上可能运行得很好 因此甚至我们不知道这些损坏的存在 正如我们将看到 在下面的例子中 我有一个新安装的Oracle并且有些损坏在其中 我真正地希望搜寻那些错误但那是在另一天 当运行健康检查 你作为一个数据库管理员 可以决定是使用临时模式还是使用完全反应模式运行 当以完全反应模式运行时会有人会抱怨错误讯息或你可能会看到一个Oracle警报警告运行健康检查所出现的错误 你还可以通过使用DBMS_HM PL/SQL软件包进行健康检查 *** 作 依赖于这些是如何运行在你的系统上 他们将花费多久 你如何频繁看到损坏信息 你可能要安排这些作为一个任务 不过 请注意 这是一个新功能 并附带所有其他的新功能 你应该 %相信他们不会造成损坏或锁定你的系统 只要适当低测试和监视那些 *** 作 同样值得注意的是 这些健康检查可以运行在在线和现有的据库上 或者当数据库是离线( NOMOUNT )时 由于有多种类型的健康检查 因此有些健康检查 只能运行在离线数据库的上 举例来说 重做完整性检查只能是脱机运行 当仔细想想就能明白这其中的奥秘 不用进行各个不同的损坏/完整性检查 你可以使用下列SQL查看他们 它可以让你知道那些检查是可以在线进行的 那些检查是要在脱机的情况下进行的
SQL>SELECT name internal_check offline_capable description FROM v$hm_checkNAME I O DESCRIPTION HM Test Check Y Y Check for HM FunctionalityDB Structure Integrity Check N Y Checks integrity of all database filesData Block Integrity Check N Y Checks integrity of a datafile blockRedo Integrity Check N Y Checks integrity of redo log contentLogical Block Check Y N Checks logical content of a blockTransaction Integrity Check N N Checks a transaction for corruptionsUndo Segment Integrity Check N N Checks integrity of an undo segmentAll Control Files Check Y Y Checks all control files in the databaseCF Member Check Y Y Checks a multiplexed copy of the control fileAll Datafiles Check Y Y Check for all datafiles in the databaseSingle Datafile Check Y Y Checks a datafileLog Group Check Y Y Checks all members of a log groupLog Group Member Check Y Y Checks a particular member of a log groupArchived Log Check Y Y Checks an archived logRedo Revalidation Check Y Y Checks redo log contentIO Revalidation Check Y Y Checks file accessabilityBlock IO Revalidation Check Y Y Checks file accessabilityTxn Revalidation Check Y N Revalidate corrupted txnFailure Simulation Check Y Y Creates dummy failuresDictionary Integrity Check N N Checks dictionary integrity 由于一些健康检查需要额外的输入参数 为了简便起见 我决定只演示那里有不需要输入参数的检查 如果你想要看看那些需要输入参数的检查 你可以执行下列SQL中 我在Oracle文件中发现的
SELECT c name check_name p name parameter_name p type p default_value p descriptionFROM v$hm_check_param p v$hm_check cWHERE 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_
BEGINDBMS_HM RUN_CHECK( Dictionary Integrity Check DICTIONARY_CHECK_ )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_runADR Home = /opt/app/oracle/diag/rdbms/db fs/db FS:***************************************************************************************************************HM RUN RECORD **********************************************************RUN_ID RUN_NAME DICTIONARY_CHECK_ CHECK_NAME Dictionary Integrity CheckNAME_ID MODE START_TIME : : : RESUME_TIME END_TIME : : : MODIFIED_TIME : : : TIMEOUT FLAGS STATUS SRC_INCIDENT_ID NUM_INCIDENTS ERR_NUMBER REPORT_FILE
这最显著的信息 或缺失信息 是REPORT_FILE为 此栏只有当报告生成时才能被填充 建立一个报告可以通过DBMS_HM包或通过ADRCI的 CREATE REPORT命令
使用DBMS_HM包
SET LONG SET LONGCHUNKSIZE SET PAGESIZE SET LINESIZE SELECT DBMS_HM GET_RUN_REPORT( DICTIONARY_CHECK_ ) FROM DUAL
使用ADRCI CREATE REPORT命令
CREATE REPORT hm_run DICTIONARY_CHECK_ When using the DBMS_HM package the output looks like:当使用DBMS_HM包时输出结果如下 DBMS_HM GET_RUN_REPORT( DICTIONARY_CHECK_ ) Basic Run InformationRun Name : DICTIONARY_CHECK_ Run Id : Check Name : Dictionary Integrity CheckMode : MANUALStatus : PLETEDStart Time : : : : End Time : : : : Error Encountered : Source Incident Id : Number of Incidents Created : Input Paramters for the RunTABLE_NAME=ALL_CORE_TABLESCHECK_MASK=ALLRun Findings And RemendationsFindingFinding Name : Dictionary InconsistencyFinding ID : Type : FAILUREStatus : OPENPriority : CRITICALMessage : SQL dictionary health check: file$ pk on object FILE$failedMessage : Damaged rowid is AAAAARAABAAAAByAAF description: No furtherdamage description availableFindingFinding Name : Dictionary InconsistencyFinding ID : Type : FAILUREStatus : OPENPriority : CRITICALMessage : SQL dictionary health check: dependency$ dobj# fk onobject DEPENDENCY$ failedMessage : Damaged rowid is AAAABnAABAAAOiHABI description: No furtherdamage description availableFindingFinding Name : Dictionary InconsistencyFinding ID : Type : FAILUREStatus : OPENPriority : CRITICALMessage : SQL dictionary health check: dependency$ dobj# fk onobject DEPENDENCY$ failedMessage : Damaged rowid is AAAABnAABAAAQXqAA description: No furtherdamage description available
运行后DBMS_HM包或ADRCI 的CREATE REPORT命令后 我们可以重新输入ADRCI显示hm_run命令 现在可以看到REPORT_FILE信息被填充了
REPORT_FILE /opt/app/oracle/diag/rdbms/db fs/db FS/hm/HMREPORT_DICTIONARY_CHECK_ hm
当使用ADRCI功能 你必须先运行生成报告文件的命令 如果该文件不存在 那么运行另一个命令 以显示其内容 你还可以查看该报告通过ADRCI输入以下命令 因为输出的结果在XML文档中 因此它不会在这里显示
show report hm_run DICTIONARY_CHECK_
lishixinzhi/Article/program/Oracle/201311/18140数据库健康检查主要涉及以下四个方面:
系统和数据库的可用性
系统和数据库的完整性
系统、数据库和应用的性能
系统备份和恢复方案评估
根据用户需求的不同,健康检查服务可能包含以下内容:
1.日志分析 检查并分析系统日志及跟踪文件,发现并排除数据库系统错误隐患,正常的日志分析对于数据库来说至关重要。
2.数据库性能分析 通过收集信息对数据库进行性能分析,得出数据库的运行状况报告,帮助用户了解数据库的健康状况,为用户的优化、扩容、升级等工作提供有力的支撑。
3.空间检测 检查数据库空间的使用情况,提供空间使用报告,为用户合理规划空间使用、充分利用资源提供建议。
4.检查Oracle/Mysql等数据库的结构、初始化参数、主要配置文件
5.检查系统和数据库判断是否需要应用最新的补丁集
6.检查数据库备份的完整性等
健康检查是数据库稳定运行的保障,业务系统都应当进行例行的健康检查工作。
oracle检测坏块的方式:1、利用oracle的RMAN工具
2、利用dbv工具检测
3、利用 exp/imp工具检测
其中2、3的方式无法彻底检测所有坏块,所以重点介绍下RMAN方式
RMAN>backup check logical validate datafile n
可以检查数据文件是否包含坏块,同时并不产生实际的备份输出。
而且当使用Recovery Manager进行实际的数据库备份时,同时也就进行了坏块
检查。但要注意的是,在线使用Recovery Manager扫描坏块和备份时,需要数
据库运行在归档模式(archive log),否则只能在数据库未打开的情况下进行。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)