如何对Oracle进行健康检查-性能调优
2011-04-25 16:20
686 查看
如何对Oracle进行健康检查-性能调优
通过健康检查让你的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' 54com.cn
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 feedom.net
MODIFIED_TIME 2008-11-03 18:32:18.827387 -07:00 54com.cn
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命令。
使用DBMS_HM包
SET LONG 100000
SET LONGCHUNKSIZE 1000
SET PAGESIZE 1000
SET LINESIZE 512
SELECT DBMS_HM.GET_RUN_REPORT('DICTIONARY_CHECK_11032008') FROM DUAL;
feedom.net
使用ADRCI CREATE REPORT命令
CREATE REPORT hm_run DICTIONARY_CHECK_11032008
When using the DBMS_HM package the output looks like:
当使用DBMS_HM包时输出结果如下:
DBMS_HM.GET_RUN_REPORT('DICTIONARY_CHECK_11032008')
------------------------------------------------------------------
Basic Run Information
Run Name : DICTIONARY_CHECK_11032008
Run Id : 41
Check Name : Dictionary Integrity Check
Mode : MANUAL
Status : COMPLETED
Start Time : 2008-11-03 18:32:10.819805 -07:00
End Time : 2008-11-03 18:32:18.827387 -07:00
Error Encountered : 0
Source Incident Id : 0
Number of Incidents Created : 0
Input Paramters for the Run
TABLE_NAME=ALL_CORE_TABLES
CHECK_MASK=ALL
Run Findings And Recommendations
Finding
Finding Name : Dictionary Inconsistency
Finding ID : 42
Type : FAILURE
Status : OPEN
Priority : CRITICAL
Message : SQL dictionary health check: file$ pk 42 on object FILE$ failed
Message : Damaged rowid is AAAAARAABAAAAByAAF - description: No further
damage description available
Finding
Finding Name : Dictionary Inconsistency
Finding ID : 45
Type : FAILURE
Status : OPEN
Priority : CRITICAL
Message : SQL dictionary health check: dependency$.dobj# fk 126 on object DEPENDENCY$ failed
Message : Damaged rowid is AAAABnAABAAAOiHABI - description: No further
damage description available
Finding
Finding Name : Dictionary Inconsistency
Finding ID : 48
Type : FAILURE
Status : OPEN
Priority : CRITICAL
Message : SQL dictionary health check: dependency$.dobj# fk 126 on object DEPENDENCY$ failed
Message : Damaged rowid is AAAABnAABAAAQXqAA6 - description: No further
damage description available
运行后DBMS_HM包或ADRCI 的CREATE REPORT命令后,我们可以重新输入ADRCI显示hm_run命令,现在可以看到REPORT_FILE信息被填充了。
REPORT_FILE
/opt/app/oracle/diag/rdbms/db11fs/db11FS/hm/HMREPORT_DICTIONARY_CHECK_110320
08.hm
当使用ADRCI功能,你必须先运行生成报告文件的命令,如果该文件不存在,那么
运行另一个命令,以显示其内容。你还可以查看该报告通过ADRCI输入以下命令。因为
输出的结果在XML文档中,因此它不会在这里显示。
show report hm_run DICTIONARY_CHECK_11032008
不管用什么方法,这些检查结果对调查Oracle数据库的损坏将是一个重要的信息。
虽然我还没有进行任何详细的测试,包括时机,锁定,或性能等问题,对此应该谨慎使
用。任何时候执行损坏检查,必须有某种形式的对象锁定。这将只需要时间来观看这些
程序在一个数据库上操作的步骤和实际效果。其实我知道事情会是怎样,如果你有问
题,你不希望找到他们吗?这对DBA来说只不过是另一个值得骄傲的成就。
通过健康检查让你的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' 54com.cn
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 feedom.net
MODIFIED_TIME 2008-11-03 18:32:18.827387 -07:00 54com.cn
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命令。
使用DBMS_HM包
SET LONG 100000
SET LONGCHUNKSIZE 1000
SET PAGESIZE 1000
SET LINESIZE 512
SELECT DBMS_HM.GET_RUN_REPORT('DICTIONARY_CHECK_11032008') FROM DUAL;
feedom.net
使用ADRCI CREATE REPORT命令
CREATE REPORT hm_run DICTIONARY_CHECK_11032008
When using the DBMS_HM package the output looks like:
当使用DBMS_HM包时输出结果如下:
DBMS_HM.GET_RUN_REPORT('DICTIONARY_CHECK_11032008')
------------------------------------------------------------------
Basic Run Information
Run Name : DICTIONARY_CHECK_11032008
Run Id : 41
Check Name : Dictionary Integrity Check
Mode : MANUAL
Status : COMPLETED
Start Time : 2008-11-03 18:32:10.819805 -07:00
End Time : 2008-11-03 18:32:18.827387 -07:00
Error Encountered : 0
Source Incident Id : 0
Number of Incidents Created : 0
Input Paramters for the Run
TABLE_NAME=ALL_CORE_TABLES
CHECK_MASK=ALL
Run Findings And Recommendations
Finding
Finding Name : Dictionary Inconsistency
Finding ID : 42
Type : FAILURE
Status : OPEN
Priority : CRITICAL
Message : SQL dictionary health check: file$ pk 42 on object FILE$ failed
Message : Damaged rowid is AAAAARAABAAAAByAAF - description: No further
damage description available
Finding
Finding Name : Dictionary Inconsistency
Finding ID : 45
Type : FAILURE
Status : OPEN
Priority : CRITICAL
Message : SQL dictionary health check: dependency$.dobj# fk 126 on object DEPENDENCY$ failed
Message : Damaged rowid is AAAABnAABAAAOiHABI - description: No further
damage description available
Finding
Finding Name : Dictionary Inconsistency
Finding ID : 48
Type : FAILURE
Status : OPEN
Priority : CRITICAL
Message : SQL dictionary health check: dependency$.dobj# fk 126 on object DEPENDENCY$ failed
Message : Damaged rowid is AAAABnAABAAAQXqAA6 - description: No further
damage description available
运行后DBMS_HM包或ADRCI 的CREATE REPORT命令后,我们可以重新输入ADRCI显示hm_run命令,现在可以看到REPORT_FILE信息被填充了。
REPORT_FILE
/opt/app/oracle/diag/rdbms/db11fs/db11FS/hm/HMREPORT_DICTIONARY_CHECK_110320
08.hm
当使用ADRCI功能,你必须先运行生成报告文件的命令,如果该文件不存在,那么
运行另一个命令,以显示其内容。你还可以查看该报告通过ADRCI输入以下命令。因为
输出的结果在XML文档中,因此它不会在这里显示。
show report hm_run DICTIONARY_CHECK_11032008
不管用什么方法,这些检查结果对调查Oracle数据库的损坏将是一个重要的信息。
虽然我还没有进行任何详细的测试,包括时机,锁定,或性能等问题,对此应该谨慎使
用。任何时候执行损坏检查,必须有某种形式的对象锁定。这将只需要时间来观看这些
程序在一个数据库上操作的步骤和实际效果。其实我知道事情会是怎样,如果你有问
题,你不希望找到他们吗?这对DBA来说只不过是另一个值得骄傲的成就。
相关文章推荐
- Oracle PLSQL Procedure 如何进行性能调优分析
- 如何进行Java EE性能测试与调优
- oracle性能调优:管理oracle日志之调整检查点
- 进程、检查-oracle 性能调优 解决CPU问题-by小雨
- 如何利用nginx_upstream_check_module-master对nginx的后端机器进行健康状态检查
- oracle 数据库性能健康检查脚本[转帖]
- 如何进行oracle capability i/o(压力测试数据库服务器i/o性能)
- Oracle SQL 调优健康检查脚本
- 如何进行Java EE性能测试与调优
- 如何对汽车动力转向油压开关的具体性能进行检查
- 如何用vc6自带功能进行c/c++代码性能调优
- Oracle SQL 性能健康检查脚本 (SQLHC) (文档 ID 1626277.1)
- 如何进行Java EE性能测试与调优
- 如何使用oracle 的DBMS_SQLTUNE package 来运行 Sql Tuning Advisor 进行sql 自动调优
- 使用JAVA如何对图片进行格式检查以及安全检查处理
- ORACLE如何检查找出损坏索引(Corrupt Indexes)
- oracle性能调优-执行计划
- 使用JMeter进行Web 性能测试 - 检查点、关联和参数化
- Oracle 性能调优心得
- oracle性能调优公式