Arquivo mensal: fevereiro 2015

Verificando a saúde do Banco de Dados usando a Package DBMS_HM

Neste post abordaremos o uso da package DMBS_HM para checar a Saúde do banco de dados Oracle.

A package DMBS_HM foi introduzida na versão 11g do Oracle Database, ela permite examinar várias camadas e componentes do banco de dados. Com ela é possível detectar corrupções de DATAFILES, corrupções de “blocos lógicos e físicos”, corrupção de segmentos de UNDO ou de REDO e  corrupções no “dicionário de dados”. As análises geram relatórios e em muitos casos, a DBMS_HM  faz recomendações para resolver os problemas encontrados.

As verificações podem ser executadas de duas formas:

Reativa: O diagnóstico pode ser executado de modo automático pelo oracle em resposta a um erro crítico ocorrido.

Manual: Pode ser executado por dba de forma manual usando a package dbms_hm  ou pela interface do Enterprise manager.

As verificações também podem ser executadas com o banco nas seguintes formas:

1) Modo Online: verificação enquanto o banco de dados está no modo aberto ou montado.

2) Modo Desligado: Somente a verificação “Check Redo Integrity” e da “DB Structure Integrity Check” podem ser efetuadas com o banco offline,  as restante devem ser efetuadas no modo online.

As seguintes verificações podem ser feitas:

1) DB Structure Integrity Check: Nesta opção é feita verificação de corrupção nos datafiles. Se o banco de dados estiver aberto ,  e feita verificação nos datafiles, redolog e controlfiles  se o banco estiver no  modo nomount só  o controlfile é verificado.
Esta verificação gera relatórios de falhas se esses arquivos estiverem inacessíveis, corrompidos ou inconsistentes.

2) Data Block Integrity Check: Esta verificação detecta  corrupções nos blocos de disco tais como falhas de checksum e inconsistências lógicas dentro do bloco.

3) Redo Integrity Check: Esta verificação checa se os redolog nao estão corrompidos.

4) Undo Segment Integrity Check: Esta verificação checa se os segmentos de UNDO estão corrompidos.

5) Transaction Integrity Check: Esta verificação é idêntico ao Undo Segment Integrity Check, mas ela verifica apenas uma transação específica.

6) Dictionary Integrity Check: Esta verificação de integridade dos objetos do dicionário de dados.

Abaixo verificaremos os passos necessários para verificação do check no banco de dados usando a package DBMS_HM.

OBS: Neste artigo será abordado somente a execução manual utilizando o SQLPlus.

1 – Verificando a Listagem do que pode ser verificado no banco de dados:

DB Structure Integrity Check
CF Block Integrity Check
Data Block Integrity Check
Redo Integrity Check
Transaction Integrity Check
Undo Segment Integrity Check
Dictionary Integrity Check
ASM Allocation Check

2 – Visualização das informações dos parâmetro para todas as verificações:

SQL>
1  SELECT c.name check_name,
2         p.name parameter_name,
3         p.TYPE,
4         p.DEFAULT_VALUE,
5         p.description
6    FROM v$hm_check_param p, v$hm_check c
7   WHERE p.check_id = c.id AND c.internal_check = ‘N’
8* ORDER BY c.name
SQL> /

Resultado:

CHECK_NAME                                    PARAMETER_NAME            TYPE                 DEFAULT_VALUE        DESCRIPTION
——————————————— ————————- ——————– ——————– ————————————————–
ASM Allocation Check                          ASM_DISK_GRP_NAME         DBKH_PARAM_TEXT                           ASM group name
CF Block Integrity Check                      CF_BL_NUM                 DBKH_PARAM_UB4                            Control file block number
Data Block Integrity Check                    BLC_DF_NUM                DBKH_PARAM_UB4                            File number
Data Block Integrity Check                    BLC_BL_NUM                DBKH_PARAM_UB4                            Block 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

9 rows selected.

3 – Fazendo uma verificação no banco de dados usando a package DBMS_HM.

SQL> BEGIN
DBMS_HM.run_check (
check_name  => ‘DB Structure Integrity Check’,
run_name    => ‘Relat_Verif_Dicionario_integ’);
END;
/  2    3    4    5    6

PL/SQL procedure successfully completed.
SQL>

4 – Visualizando o relatório em formato de texto com a package DBMS_HM (também estão disponíveis relatórios nos formatos HTML e XML):

SQL> SET LONG 100000
SET LONGCHUNKSIZE 1000
SET PAGESIZE 1000
SET LINESIZE 512
SELECT DBMS_HM.get_run_report (‘Relat_Verif_Dicionario_integ’) FROM DUAL;SQL> SQL> SQL> SQL>

DBMS_HM.GET_RUN_REPORT(‘RELAT_VERIF_DICIONARIO_INTEG’)
—————————————————————————————–
Basic Run Information
Run Name                     : Relat_Verif_Dicionario_integ
Run Id                       : 81
Check Name                   : DB Structure Integrity Check
Mode                         : MANUAL
Status                       : COMPLETED
Start Time                   : 2015-02-24 08:56:20.723222 -03:00
End Time                     : 2015-02-24 08:56:21.111159 -03: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

OBS: Para esse exemplo não foram encontrados problemas na base de dados.

No próximo exemplo pegaremos o número de uma transação e usaremos os conceitos mencionados acima:

1 – Criando uma tabela

SQL> create table  demo (nome varchar2(20));
Table created.

2 – Inserido um registro a tabela

SQL>  insert into  demo values(‘yasmin’);
1 row created.

3 – Capturando o id da transação

SQL> select dbms_transaction.local_transaction_id from dual;

LOCAL_TRANSACTION_ID
———————————-
9.25.1257
SQL>

4 – Fazendo uma verificação no banco de dados usando a package DBMS_HM.

SQL> BEGIN
DBMS_HM.RUN_CHECK (
check_name   => ‘Transaction Integrity Check’,
run_name     => ‘check_transacao’,
input_params => ‘TXN_ID=9.25.1257’);
END;  2    3    4    5    6
7  /

PL/SQL procedure successfully completed.
SQL>

5 – Visualizando o relatório  com a package DBMS_HM

SQL> SELECT DBMS_HM.GET_RUN_REPORT(‘check_transacao’) FROM DUAL;

DBMS_HM.GET_RUN_REPORT(‘CHECK_TRANSACAO’)
———————————————————————–
Basic Run Information
Run Name                     : check_transacao
Run Id                       : 101
Check Name                   : Transaction Integrity Check
Mode                         : MANUAL
Status                       : COMPLETED
Start Time                   : 2015-02-24 09:28:17.352833 -03:00
End Time                     : 2015-02-24 09:28:17.391923 -03:00
Error Encountered            : 0
Source Incident Id           : 0
Number of Incidents Created  : 0

Input Paramters for the Run
TXN_ID=9.25.1257

Run Findings And Recommendations
Finding
Finding Name  : TXN not corrupt
Finding ID    : 102
Type          : INFORMATIONAL
Status        : OPEN
Priority      : HIGH
Message       : Transaction 9.25.1257 is not corrupted

6 – Listagem de todas as verificações executadas (Health Monitor View):

SQL>  SELECT run_id,
name,
check_name,
run_mode,
status,
src_incident,
num_incident,
error_number
FROM v$hm_run;  2    3    4    5    6    7    8    9

RUN_ID NAME                             CHECK_NAME                                    RUN_MODE STATUS      SRC_INCIDENT NUM_INCIDENT ERROR_NUMBER
———- ——————————– ——————————————— ——– ———– ———— ———— ————
21 my_run                           Dictionary Integrity Check                    MANUAL   ERROR                  0            0          604
41 report_dictionary_integrity      Dictionary Integrity Check                    MANUAL   ERROR                  0            0          604
61 TESTE_VERIF                      DB Structure Integrity Check                  MANUAL   COMPLETED              0            0            0
81 Relat_Verif_Dicionario_integ     DB Structure Integrity Check                  MANUAL   COMPLETED              0            0            0
101 check_transacao                  Transaction Integrity Check                   MANUAL   COMPLETED              0            0            0
1 HM_RUN_1                         DB Structure Integrity Check                  REACTIVE COMPLETED              0            0            0

6 rows selected.
SQL>

A verificação do banco de dados também podem ser exibidas usando o seguinte comando abaixo na interface ADRCI:

[oracle@lnxorcl ~]$ adrci

ADRCI: Release 11.2.0.3.0 – Production on Tue Feb 24 09:13:05 2015

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

ADR base = “/u01/app/oracle”

1 – Digitar o comando show  hm_rum 

adrci> show hm_run

ADR Home = /u01/app/oracle/diag/asm/+asm/+ASM:
*************************************************************************
0 rows fetched
<ADR_RELATION name=””>
<ADR_HOME name=”/u01/app/oracle/diag/asm/+asm/+ASM”>

ADR Home = /u01/app/oracle/diag/rdbms/orcl/orcl:
*************************************************************************

**********************************************************
HM RUN RECORD 1
**********************************************************
RUN_ID                        1
RUN_NAME                      HM_RUN_1
CHECK_NAME                    DB Structure Integrity Check
NAME_ID                       2
MODE                          2
START_TIME                    2014-12-12 12:48:52.421402 -02:00
RESUME_TIME                   <NULL>
END_TIME                      2014-12-12 12:48:52.492538 -02:00
MODIFIED_TIME                 2014-12-12 12:48:52.492538 -02:00
TIMEOUT                       0
FLAGS                         0
STATUS                        5
SRC_INCIDENT_ID               0
NUM_INCIDENTS                 0
ERR_NUMBER                    0
REPORT_FILE                   <NULL>

**********************************************************
HM RUN RECORD 2
**********************************************************
RUN_ID                        21
RUN_NAME                      my_run
CHECK_NAME                    Dictionary Integrity Check
NAME_ID                       24
MODE                          0
START_TIME                    2015-02-24 08:42:21.593283 -03:00
RESUME_TIME                   <NULL>
END_TIME                      2015-02-24 08:42:26.412276 -03:00
MODIFIED_TIME                 2015-02-24 08:42:26.412276 -03:00
TIMEOUT                       0
FLAGS                         0
STATUS                        6
SRC_INCIDENT_ID               0
NUM_INCIDENTS                 0
ERR_NUMBER                    604
REPORT_FILE                   <NULL>

**********************************************************
HM RUN RECORD 3
**********************************************************
RUN_ID                        41
RUN_NAME                      report_dictionary_integrity
CHECK_NAME                    Dictionary Integrity Check
NAME_ID                       24
MODE                          0
START_TIME                    2015-02-24 08:52:50.133302 -03:00
RESUME_TIME                   <NULL>
END_TIME                      2015-02-24 08:52:51.568297 -03:00
MODIFIED_TIME                 2015-02-24 09:00:29.198992 -03:00
TIMEOUT                       0
FLAGS                         0
STATUS                        6
SRC_INCIDENT_ID               0
NUM_INCIDENTS                 0
ERR_NUMBER                    604
REPORT_FILE                   /u01/app/oracle/diag/rdbms/orcl/orcl/hm/HMREPORT_report_dictionary_integrity.hm

**********************************************************
HM RUN RECORD 4
**********************************************************
RUN_ID                        61
RUN_NAME                      TESTE_VERIF
CHECK_NAME                    DB Structure Integrity Check
NAME_ID                       2
MODE                          0
START_TIME                    2015-02-24 08:53:19.002290 -03:00
RESUME_TIME                   <NULL>
END_TIME                      2015-02-24 08:53:19.545951 -03:00
MODIFIED_TIME                 2015-02-24 08:53:19.545951 -03:00
TIMEOUT                       0
FLAGS                         0
STATUS                        5
SRC_INCIDENT_ID               0
NUM_INCIDENTS                 0
ERR_NUMBER                    0
REPORT_FILE                   <NULL>

**********************************************************
HM RUN RECORD 5
**********************************************************
RUN_ID                        81
RUN_NAME                      Relat_Verif_Dicionario_integ
CHECK_NAME                    DB Structure Integrity Check
NAME_ID                       2
MODE                          0
START_TIME                    2015-02-24 08:56:20.723222 -03:00
RESUME_TIME                   <NULL>
END_TIME                      2015-02-24 08:56:21.111159 -03:00
MODIFIED_TIME                 2015-02-24 09:02:55.840258 -03:00
TIMEOUT                       0
FLAGS                         0
STATUS                        5
SRC_INCIDENT_ID               0
NUM_INCIDENTS                 0
ERR_NUMBER                    0
REPORT_FILE                   /u01/app/oracle/diag/rdbms/orcl/orcl/hm/HMREPORT_Relat_Verif_Dicionario_integ.hm

**********************************************************
HM RUN RECORD 6
**********************************************************
RUN_ID                        101
RUN_NAME                      check_transacao
CHECK_NAME                    Transaction Integrity Check
NAME_ID                       10
MODE                          0
START_TIME                    2015-02-24 09:28:17.352833 -03:00
RESUME_TIME                   <NULL>
END_TIME                      2015-02-24 09:28:17.391923 -03:00
MODIFIED_TIME                 2015-02-24 09:29:22.021116 -03:00
TIMEOUT                       0
FLAGS                         0
STATUS                        5
SRC_INCIDENT_ID               0
NUM_INCIDENTS                 0
ERR_NUMBER                    0
REPORT_FILE                   /u01/app/oracle/diag/rdbms/orcl/orcl/hm/HMREPORT_check_transacao.hm

ADR Home = /u01/app/oracle/diag/clients/user_oracle/host_1193317331_80:
*************************************************************************
0 rows fetched
</ADR_HOME>
<ADR_HOME name=”/u01/app/oracle/diag/clients/user_oracle/host_1193317331_80″>

ADR Home = /u01/app/oracle/diag/tnslsnr/local/listener:
*************************************************************************
0 rows fetched
</ADR_HOME>
<ADR_HOME name=”/u01/app/oracle/diag/tnslsnr/local/listener”>

ADR Home = /u01/app/oracle/diag/tnslsnr/lnxorcl/listener:
*************************************************************************
0 rows fetched
</ADR_HOME>
<ADR_HOME name=”/u01/app/oracle/diag/tnslsnr/lnxorcl/listener”>

ADR Home = /u01/app/oracle/diag/tnslsnr/lnxorcl/listener1:
*************************************************************************
0 rows fetched

adrci>

Para uma recomendação de corrupção, e mesma pode encontrada na v$hm_recommendation;

SQL> select * from V$HM_RECOMMENDATION;
no rows selected

SQL>

OBS: Como não há objetos corrompidos no banco de dados de teste, a consulta não retorna resultados.

Podemos concluir que o “Health Monitor” é mais um mecanismo para ajudar o DBA garantir o pleno funcionamento do banco de dados.

Para melhor compreensão do assunto acima seguem as referências abaixo:

Nota MOS ID 466920.1:  11g New Feature: Health monitor

Oracle 12c  Documentação
Oracle 11G Documentação

Utlizando Expdp e Impdp – Parte 2

Na primeira parte deste post mostrei como efetuar backup do banco de dados Oracle
utilizando o utilitário EXPDP. (Visualizar Parte 1)  Neste post daremos a continuação, utilizando o utilitario IMPDP, para fazer a carga de dados no banco de dados.

Abaixo estão os quatro passos a fazer restore de um esquema utilizando IMPDP.

1. Configurar a variável de Banco de Dados do Ambiente

[oracle@drdb02 ~]$ export ORACLE_SID=orcl
[oracle@drdb02 ~]$ echo $ORACLE_SID orcl

Para este teste irei excluir o usuario scott sa base de dados

2 –  Acessar a base de dados

[oracle@drdb02 ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.2.0 Production on Sun Feb 1 21:09:20 2015

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 – 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

3 – excluir o usuario scott

SQL> drop user scott cascade;

User dropped.

SQL>

4. Sintaxe do comando IMPDP:

Sintaxe:

impdp {user_name}/{Password} dumpfile={Dump file name} directory={Nome do diretorio } logfile={Nome do Logfile } schemas={Nome do schema}

Detalhe dos parâmetros utilizados no comando IMPDP:

Existem vários parâmetros utilizados com o comando IMPDP, devemos ter um conhecimento sobre estes para que uma operação de restore
seja backup bem-sucedida:

Nome de Usuário/Senha: Nome do usuário Oracle com privilégio de importação,
Dumpfile: Nome do arquivo de exportação criado.
Logfile: Nome do arquivo de log do processo que será criado.
Directory: Este é o caminho pelo qual o arquivo dump de  backup  será utilizado.
Schemas: Nome do esquema para o qual restore sera feito.

Para o teste de restore via IMPDP utilizaremos a mesma estrutura utilizada na parte 1 deste post.

O dump esta no diretório /opt/oracle

ls -l /opt/oracle
total 232
-rw-r—– 1 oracle oinstall 229376 Dec  8 10:58 remote_dba.dmp
-rw-r–r– 1 oracle oinstall   1710 Dec  8 10:58 remote_dba_imp.log

na base de dados o nome desse diretorio á backup

SQL>  select * from dba_directories;

OWNER DIRECTORY_NAME                 DIRECTORY_PATH
—– —————————— ————————————————–
SYS   ORACLE_OCM_CONFIG_DIR          /u01/app/oracle/product/11.2.0/db_1/ccr/state
SYS   DATA_PUMP_DIR                  /u01/app/oracle/admin/orcl/dpdump/
SYS   XMLDIR                         /u01/app/oracle/product/11.2.0/db_1/rdbms/xml
SYS   BACKUP                         /opt/oracle

SQL>

Execute o comando IMPDP : Uma vez executado, o comando de restore vai gerar esse tipo de saída na sua tela.

[oracle@drdb02 oracle]$ impdp system/xxxxxx dumpfile=remote_dba.dmp logfile=impdp_scott.log directory=BACKUP schemas=scott

Import: Release 11.2.0.2.0 – Production on Sun Feb 1 21:25:11 2015

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 – 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Master table “SYSTEM”.”SYS_IMPORT_SCHEMA_01″ successfully loaded/unloaded
Starting “SYSTEM”.”SYS_IMPORT_SCHEMA_01″:  system/******** dumpfile=remote_dba.dmp logfile=impdp_scott.log directory=BACKUP schemas=scott
Processing object type SCHEMA_EXPORT/USER
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/ROLE_GRANT
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
. . imported “SCOTT”.”DEPT”                              5.937 KB       4 rows
. . imported “SCOTT”.”EMP”                               8.570 KB      14 rows
. . imported “SCOTT”.”SALGRADE”                          5.867 KB       5 rows
. . imported “SCOTT”.”BONUS”                                 0 KB       0 rows
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
Job “SYSTEM”.”SYS_IMPORT_SCHEMA_01″ successfully completed at 21:25:23

[oracle@drdb02 oracle]$

Você pode restaurar todo o banco de dados, tablespaces, usuários específicos (schemas), espaços de tabelas ou tabelas especificas.
O arquivo export  gravado pelo Data Pump conterá os comandos necessários para recriar completamente todos os objetos e dados escolhidos.
Caso deseje se aprofundar mais no conhecimento desta ferramenta Oracle acesse o link da documentação oficial.

Um abraço