A nova feature do Oracle Health Monitor examina diversos componentes do banco, detecta corrupção, blocos fisicamente e logicamente corrompidos, corrupção do dicionário, entre outras.
Health Monitor procura por diversos erros e pode indicar recomendações, o Health Monitor pode ser executado de forma reativa, quando houver algum problema na base o Oracle automaticamente executa o algum tipo de checagem ou manualmente, através de comandos emitidos pelo DBA.
Há dois metodos para execução do Health Check, DB-online e DB-offline. Todos os tipos de checagem podem ser feitas com o banco on line, exceto Redo Integrity Check e DB Structure Check podem ser usados com o banco off line.
Tipos de Health Check:
DB Structure Integrity Check - Verifica os arquivos do bancos e lista se inacessiveis, corrupção ou incosistente.
Data Block Integrity Check - Checa blocos do banco, quando encontrado blocos com corrupção é refletido na view V$DATABASE_BLOCK_CORRUPTION e pode ser recupedo pelo Block Media Recover.
Redo Integrity Check — Checa redo logs e archives (quando disponiveis), se estão acessiveis ou corruptos.
Undo Segment Integrity - Checa logicamente a undo por corrupções, quando encontrada o banco tenta automaticamente através do pmon e smon recuperar a transação, é refletido na view V$CORRUPT_XID_LIST. A maioria deste tipo de problema pode ser solicitado através de commit ou rollback.
Transaction Integrity Check - Semelhante a Undo Segment Integrity, porém apenas realiza a checagem.
Dictionary Integrity Check - Verifica a integridade do dicionário de dados.
Executando o Health Check manualmente.
O Heath Check é executado através da package DBMS_HM e aceita parametros que podem ser listados pelo seguinte select:
SET LINESIZE 120
COLUMN check_name FORMAT A30
COLUMN parameter_name FORMAT A15
COLUMN type FORMAT A15
COLUMN default_value FORMAT A15
COLUMN description FORMAT A40
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;
CHECK_NAME PARAMETER_NAME TYPE DEFAULT_VALUE DESCRIPTION
------------------------------ --------------- --------------- --------------- ------------------------------------------
Data Block Integrity Check BLC_DF_NUM DBKH_PARAM_UB4 Block Data File number
Data Block Integrity Check BLC_BL_NUM DBKH_PARAM_UB4 Datablock number
Dictionary Integrity Check CHECK_MASK DBKH_PARAM_TEXT ALL Check Mask
Dictionary Integrity Check TABLE_NAME DBKH_PARAM_TEXT ALL_CORE_TABLES Table Name
Redo Integrity Check SCN_TEXT DBKH_PARAM_TEXT 0 SCN of the latest good redo (if known)
Transaction Integrity Check TXN_ID DBKH_PARAM_TEXT Transaction ID
Undo Segment Integrity Check USN NUMBER DBKH_PARAM_TEXT Undo Segment Number
Podemos realizar um health check, como procurar por estruturas danificados no banco através da instrução, onde my_test_run é o nome do HC
BEGIN
DBMS_HM.run_check (
check_name => 'DB Structure Integrity Check',
run_name => 'my_test_run');
END;
/
Exibindo erros encontrados pelo Health Check.
Além de serem populados em dicionários e views dinámicas do dicionário, os problemas encontrados pelo Health Check são gravado dentro da arquitetura de diagnostico da Oracle, Diag, e podem ser acessado através da ferramentas:
- Pela função DBMS_HM.GET_RUN_REPORT;
- Pelo comando list failures do RMAN;
- Realizando consultas nas views V$HM_RUN, V$HM_FINDING, and V$HM_RECOMMENDATION;
- Pelo Enterprise Manager;
- Pelo repositório de diagnóstico ( ADRCI ).
Exemplo
- RMAN
RMAN> list failure;
List of Database Failures
=========================
Failure ID Priority Status Time Detected Summary
---------- -------- --------- ------------- -------
302 HIGH OPEN 30-MAR-11 One or more non-system datafiles are
missing
- DBMS_HM
SQL> BEGIN
2 DBMS_HM.run_check (
3 check_name => 'DB Structure Integrity Check',
4 run_name => 'my_test_run');
5 END;
6 /
PL/SQL procedure successfully completed.
SQL>
SQL> SET LONG 100000
SQL> SET LONGCHUNKSIZE 1000
SQL> SET PAGESIZE 1000
SQL> SET LINESIZE 512
SQL> SELECT DBMS_HM.get_run_report('MY_TEST_RUN') FROM dual;
DBMS_HM.GET_RUN_REPORT('MY_TEST_RUN')
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------
Basic Run Information
Run Name : my_test_run
Run Id : 1079
Check Name : DB Structure Integrity Check
Mode : MANUAL
Status : COMPLETED
Start Time : 2011-03-30 19:36:02.812000 -03:00
End Time : 2011-03-30 19:36:03.296000 -03:00
Error Encountered : 0
Source Incident Id : 0
Number of Incidents Created : 0
Input Paramters for the Run
Run Findings And Recommendations
Finding
Finding Name : Missing datafile
Finding ID : 1083
Type : FAILURE
Status : OPEN
Priority : HIGH
Message : Datafile 4: 'C:\APP\DHNOMURA\ORADATA\SRVDB11\DATAFILE\O1_MF_U
SERS_6S76FLKL_.DBF' is missing
Message : Some objects in tablespace USERS might be unavailable