Instalação e Uso PK_ABSTRATOS Introdução
Transcrição
Instalação e Uso PK_ABSTRATOS Introdução
Introdução O pacote PK_ABSTRATOS fornece um conjunto de funções que auxiliam na administração do banco de dados Oracle. Entre os principais podemos destacar : • Verificar o consumo de CPU das sessões • Verificar o consumo de I/O das sessões ( físico e lógico ) • Verificar espaços livre, total e usado das tablespaces • Coletar informações de consumo de espaço em disco • Verificar Consumo de Tempo das Sessões Ativas • Analisar Perfil de Carga do Banco de Dados ( STATSPACK Requerido ) • Verificar a data da Coleta de estatísticas do CBO • Verificar Jobs do Banco de Dados • Verificar Informações sobre os Segmentos • Eliminar Sessões dos Usuários ( INATIVAS ou ATIVAS ) com exceções • Realizar a Engenharia Reversa de Objetos do Banco • Monitoramento de Eventos do Banco de Dados ( Com notificações via email ) o Tablespaces com Pouco Espaço o Número Processos Ativos o Verificar Sucesso do Backup do RMAN (Dados e Archives) o Verificar Percentual de Segmentos de Undo Ativos o Configuração de Novos Eventos com limites parametrizáveis 1 - Instalar a Package de Instalação Instalar como usuário SYS ou como usuário DBA privilegiado, usando o SQLPlus. A versão 9i pode ser instalada no Oracle 10g ou 11g. Caso algum problema seja encontrado, então recomendamos utilizar a versão correspondente ao banco de dados. Para o Oracle 9i SQL>@d:\abstratos\pk_abs_adm_9i.pksw SQL>@d:\abstratos\ pk_abs_adm_9i.pkbw Para o Oracle 10g ou 11g SQL>@d:\abstratos\pk_abs_adm.pksw SQL>@d:\abstratos\ pk_abs_adm.pkbw 1.1 - Criar a Tablespace Basta criar apenas uma tablespace para os DADOS. Caso a tablespace desejada já exista, continuar a partir do passo 1.2. execute pk_abstratos_admin.pr_criar_tablespace('TS_ABSTRATOS_D','D:\ORACLE\PRODUCT\10.2.0\ ORADATA\ABSTRA', 'TS_ABSTRATOS_D01.DBF',50); Requisito O usuário deverá ter o privilégio CREATE TABLESPACE; GRANT CREATE TABLESPACE TO <USUARIO DBA USADO PARA REALIZAR A INSTALAÇÃO>; 1.2 - Criar os Objetos Requisito Importante ( Porém opcional ) O pacote STATSPACK deve ser instalado previamente, para dar suporte a algumas funcionalidades adicionais. execute pk_abstratos_admin.pr_instalar_objetos ('ABSTRATOS','DB1234AB', 'TS_ABSTRATOS_D', 'TEMP'); Caso o usuário no qual está sendo feita a instalação já exista, é possível apenas conceder os privilégios necessários ao mesmo com o seguinte procedimento. SQL>execute pk_abstratos_admin.pr_conceder_privilegios('ABSTRATOS'); 1.3 – Importar o DUMP padrão imp file=exp_abstratos.dmp log=imp_abstratos.log fromuser=abstratos userid=abstratos/db1234ab buffer=50000000 ignore=y commit=y 1.4 – Ajustar as Configurações Ajustar a tabela TB_PARMETROS com o servidor SMTP correto. Ajustar a tabela de CONTATOS e GRUPOS de Notificação com os emails pertinentes Ajustar a tabela TB_EVENTOS com os parâmetros pertinentes ao banco de dados do cliente, como nomes de tablespaces, valores limites, etc.. 1.5 - Instalar os Pacotes de Administração do Banco Para o Oracle 9i SQL>@d:\abstratos\pk_abs_9i.pksw SQL>@d:\abstratos\pk_abs_9i.pkbw Para o Oracle 10g ou 11g SQL>@d:\abstratos\pk_abs.pksw SQL>@d:\abstratos\pk_abs.pkbw 2 – Utilização da PK Abstratos 2.1 – Monitoramento de Espaço das Tablespaces Função Objetivo Parâmetros pnm_tablespace Sintaxe Observações fu_ver_espaco_tablespace Mostrar o espaço livre, usado e total das tablespaces, bem como o percentual de utilização. Valor Valor Padrão Nome da Tablespace % pk_abstratos.fu_ver_espaco_tablespace(<pnm_tablespace>) Os valores são apresentados em mega bytes (MB) 2.1.1 - Mostrar os espaços da Tablespace SYSAUX SQL>select * from table(pk_ABSTRATOS.fu_ver_espaco_tablespace('SYSAUX')) ; NM_TABLESPACE VL_TOTAL SYSAUX 280 VL_USADO 263,62 VL_LIVRE 16,38 PC_USADO 94,15 2.1.2 - Mostrar os espaços de todas as tablespaces SQL>select * from table(pk_ABSTRATOS.fu_ver_espaco_tablespace()) ; NM_TABLESPACE VL_TOTAL SYSAUX 280 USERS 272,5 EXAMPLE 143,75 SYSTEM 610 TS_ABSTRATOS_D 50 UNDOTBS1 215 VL_USADO 263,62 175,19 140,81 606,31 0,69 47,19 VL_LIVRE 16,38 97,31 2,94 3,69 49,31 167,81 PC_USADO 94,15 64,29 97,95 99,4 1,38 21,95 2.2 – Processos com maior consumo de CPU Função Objetivo Parâmetros pqt_segundos pqt_registros Sintaxe Observações ver_consumo_cpu Mostrar as sessões que estão consumindo mais CPU Valor Valor Padrão Quantidade de Segundos para analisar 5 Quantidade de Registros a Mostrar 20 ver_consumo_cpu(<pqt_segundos>,<pqt_registros>) Os valores apresentados estão em segundos consumidos pelas sessões. 2.2.1 - Mostrar as sessões que consumirão mais cpu nos próximos 5 segundos SQL> select * from table(pk_ABSTRATOS.fu_ver_consumo_cpu); NU_SID NU_SERIAL NM_USUARIO_DB NM_USUARIO_SO VL_ESTATISTICA 136 170 141 150 63 1 5 SYS 1 SYSTEM SYSTEM ESTWIN01\Abstra SYSTEM 10 10 0 0 PC_PCT_ TOTAL 50 50 0 0 2.2.2 - Mostrar as 10 sessões que consumirão mais cpu nos próximos 20 segundos SQL>select * from table(pk_ABSTRATOS.fu_ver_consumo_cpu(20,5)) ; NU_SID NU_SERIAL NM_USUARIO_DB NM_USUARIO_SO VL_ESTATISTICA 136 170 141 150 13 63 1 5 SYS 1 20 SYSTEM SYSTEM ESTWIN01\Abstra SYSTEM ESTWIN01\Test 20 20 15 15 0 PC_PCT_ TOTAL 28,57 28,57 21,43 21,43 0 2.3 – Processos com maior consumo de IO Função Objetivo Parâmetros pqt_segundos pqt_registros Sintaxe Exemplos ver_consumo_io Mostrar as sessões que estão consumindo mais I/O, físico e lógico. Valor Valor Padrão Quantidade de Segundos para analisar 5 Quantidade de Registros a Mostrar 20 ver_consumo_io (<pqt_segundos>,<pqt_registros>) 1) Mostrar as sessões que consumirão mais I/O nos próximos 5 segundos select * from table(pk_ABSTRATOS.fu_ver_consumo_io); 2) Mostrar as 30 sessões que consumirão mais I/O nos próximos 15 segundos select * from table(pk_ABSTRATOS.fu_ver_consumo_io(15,30)) ; 2.4 – Ver Sessões Função Objetivo Parâmetros pnm_usuario_db pnm_usuario_so pnm_maquina Sintaxe fu_ver_sessoes Mostrar informações as sessões e o tempo de ATIVIDADE e INATIVIDADE Valor Valor Padrão Filtro por usuário do banco que está % conectado Filtro por usuário do S.O. que está % conectado Filtro por máquina que está conectada % pk_abstratos.ver_consumo_io (<pnm_usuario_db>,< pnm_usuario_so>,< pnm_maquina>) 2.4.1 - Mostrar as sessões de todos os usuários SQL>select * from table(pk_ABSTRATOS.fu_ver_sessoes()) ; NU_SID NM_USUARIO_DB NM_USUARIO_SO DS_SITUACAO VL_DURACAO_SITUACAO 136 ORACLE 139 SYS SYSTEM Altemir ACTIVE ACTIVE 15 0 141 SYS 150 ORACLE 152 ORACLE ESTWIN01\Altemir SYSTEM SYSTEM INACTIVE ACTIVE ACTIVE 3429 4182 2097 154 ORACLE 159 ORACLE SYSTEM SYSTEM ACTIVE ACTIVE 4191 3871 2.4.2 - Mostrar as sessões do usuário de banco chamado ABSTRATOS. SQL>select * from table(pk_ABSTRATOS.fu_ver_sessoes('ABSTRATOS','%','%')) ; NU_SID NU_SERIAL NM_USUARIO_DB NM_PROGRAMA DS_SITUACAO 141 7 ABSTRATOS sqlplusw.exe INACTIVE VL_DURACAO_ SITUACAO 0 2.5 – Ver Tamanhos dos Segmentos Função Objetivo Parâmetros pnm_grupo pfl_tipo Sintaxe Observações fu_ver_tamanho_segmentos Mostrar o tamanho dos segmentos agrupados por Esquema ou Tablespace e Tipo de Segmento Valor Valor Padrão Nome do Esquema ou Tablespace % Tipo de Consulta 1 1 – Esquema 2 – Tablespace pk_abstratos.fu_ver_tamanho_segmentos (<pnm_grupo>,<pfl_tipo>) Os tamanhos são apresentados em Mega Bytes (MB) 2.5.1 – Tamanhos dos Segmentos Agrupando por Esquema Permite ver tamanhos dos segmentos agrupados por esquema e tipo de segmento : DADOS, INDICES SQL>select * from table(pk_ABSTRATOS. fu_ver_tamanho_segmentos('ABSTRATOS',1)); NM_ESQUEMA DS_TIPO VL_TAMANHO NM_TABLESPACE ABSTRATOS ABSTRATOS ABSTRATOS CLUSTER TABLE INDEX 0,13 15,94 32,31 2.5.2 – Tamanhos dos Segmentos Agrupando por Tablespace Permite ver tamanhos dos segmentos agrupados por tablespace e tipo de segmento : USERS2, TOOLS SQL>select * from table(pk_ABSTRATOS.fu_ver_segmentos('USERS2',2)); NM_ESQUEMA DS_TIPO NESTED TABLE CLUSTER LOBINDEX LOBSEGMENT INDEX TABLE VL_TAMANHO 0,13 0,13 0,63 0,63 80,69 92,94 NM_TABLESPACE USERS2 USERS2 USERS2 USERS2 USERS2 USERS2 2.6 – Ver Coleta de Estatísticas de Segmentos ( Tabelas e Índices ) Função Objetivo Parâmetros pnm_esquema pfl_tipo Sintaxe Observações fu_ver_coleta_estatisticas Mostrar o tamanho as datas de coleta de estatísticas dos segmentos agrupados por tipo de segmento e por data de coleta, e mostrar também um resumo sobre o percentual de estatísticas já coletadas de um determinado esquema. Valor Valor Padrão Nome do Esquema ou Tablespace % Tipo de Consulta 1 1 – Agrupada por Esquema 2 – % já Coletado pk_abstratos.fu_ver_coleta_estatisticas (<pnm_esquema>,<pfl_tipo>) O tipo de consulta 2 ajuda a acompanhar a execução do processo de coleta de estatísticas. 2.6.1 – Ver Coleta Agrupando por Tipo de Segmento select * from table(pk_ABSTRATOS.fu_ver_coleta_estatisticas('ABSTRATOS',1)); DS_TIPO Tabelas Tabelas Tabelas Tabelas Tabelas Índice Índice DT_ANALISE 25/7/2008 27/7/2008 24/7/2008 4/8/2008 24/7/2008 QT_OBJETOS PC_ANALISADO 6 1 2 9 1 1 6 2.6.1 – Ver percentual já coletado de um determinado esquema select * from table(pk_ABSTRATOS.fu_ver_coleta_estatisticas( 'ABSTRATOS',2)); DS_TIPO TABELA INDICE DT_ANALISE QT_OBJETOS PC_ANALISADO 68,42 85,71 2.7 – Ver Jobs do Banco de Dados Função Objetivo Parâmetros pnm_usuario Sintaxe fu_ver_jobs Mostrar os jobs agendados no banco de dados. Valor Valor Padrão Nome do Usuário dono do JOB % pk_abstratos.fu_ver_jobs(<pnm_usuario>) 2.7.1 – Mostrando Jobs de Todos os Usuários SQL>select * from table(pk_ABSTRATOS.fu_ver_jobs()) ; NU_JOB DS_ACAO NM_USUARIO EMD_MAINTENANCE.EX ECUTE_EM_DBMS_JOB 1 _PROCS(); SYSMAN wb_rti_service_job.check 322 _service(1); OWBREP DT_PROXIMA DS_INTERVALO FL_QUEBRADO sysdate + 1 / (24 27/8/2008 * 60) N sysdate + 27/8/2008 (6/1440) N 2.8 – Ver Compressão de Índices Função Objetivo Parâmetros pnm_grupo pfl_tipo Sintaxe fu_ver_compressao_indices Mostrar a quantidade de índices que estão com compressão de chave ativada por agrupando a informação por esquema ou por tablespace Valor Valor Padrão Nome do Esquema ou Tablespace % Tipo de Consulta 1 1 – Agrupada por Esquema 2 – Agrupada por Tablespace pk_abstratos. fu_ver_compressao_indices(<pnm_esquema>,<pfl_tipo>) 2.8.1 – Mostrando compressão de índices de todos os esquemas SQL>select * from table(abstratos.pk_ABSTRATOS.fu_ver_compressao_indices('%',1)) ; NM_GRUPO DS_SITUACAO QT_SEGMENTOS SH OWBREP PERFSTAT OWBRT_SYS SH PM Desativado Ativado Desativado Desativado Ativado Desativado 28 77 68 2 1 20 2.9 – Observar Outras Estatísticas de Funcionamento do Banco de Dados SQL>select * from table(pk_ABSTRATOS.fu_ver_estatistica(<Código Estatística>,<tempo>,<qtd registros>)) ; SQL>select * from table(pk_ABSTRATOS.fu_ver_estatistica(12,5,10)) ; Obs: 12 = CPU Usada pela sessão 3 – Operações de Manutenção no Banco de Dados 3.1 – Coletar de Estatísticas do Otimizador execute pk_abstratos.pr_coletar_estatisticas( 'OE' ) 3.2 – Coletar consumo de espaço SQL> execute abstratos.pk_abstratos.pr_coletar_espaco Instalação do JOB SQL>variable job number; SQL>execute dbms_job.submit(job=>:job, what=>'abstratos.pk_abstratos.coletar_espaco(''OBOECARD'',''S'');',next_date=>trunc(sysdate)+22/24,interval=>'trunc(sysdate+1)+22/24'); 4 – Monitoramento do Banco de Dados 2.1 – Monitoramento de Eventos - ( pr_avaliar_eventos ) Avaliará, executará, os eventos configurados no banco de dados e enviará um email de notificação caso seja necessário, caso um dos limites AVISO ou CRÍTICO seja atingido. SQL> execute pr_avaliar_eventos. Obs : É importante criar um JOB de banco de dados com execução a cada 5 minutos da rotina acima. 2.1.1 - Instalação do JOB para monitorar eventos de 5 em 5 minutos. SQL>variable job number; SQL>execute dbms_job.submit(job=>:job, what=>'abstratos.pk_abstratos.pr_avaliar_eventos;',next_date=>sysdate+5/1440,interval=>'sysdate+5/1440'; 2.2 – Executar Consultas Dinamicamente - ( fu_executar_consulta ) Usada para executar sentenças SELECT dinamicamente, onde o retorno da função será um resultset que deverá ser manipulado com a instrução OPEN-FOR do PL/SQL ou por alguma estrutura equivalente em outras linguagens de programação. Exemplo : Manipular o resultado de uma consulta dinâmica que mostre os 10 primeiros objetos da tabela DBA_OBJECTS. set serveroutput on declare cr_sql pk_abstratos.ty_rf_geral; aux varchar2(100); begin cr_sql := pk_abstratos.fu_executar_consulta('select OBJECT_NAME from DBA_OBJECTS WHERE ROWNUM <=10'); loop fetch cr_sql into aux; exit when cr_sql%notfound; dbms_output.put_line('Dados ...:'||aux); end loop; end; / 5 – Geração de Scripts 6 – Operações Auxiliares 6.1 – Montar a Sentença SQL a partir do HASH_VALUE da Consulta Sintaxe fu_montar_sql(<hash_value da v$session>) Exemplo select fu_montar_sql(1218005246) from dual; ANEXO I – Detalhes Monitoramento de Eventos 1 – Objetivo O objetivo deste documento é descrever o funcionamento e a estrutura do aplicação de monitoramento de ambiente de banco de dados e sistema operacional da Abstratos tecnologia. 2. – Funcionamento 2.1 Descrição do Funcionamento A aplicação rodará como um JOB no banco de dados e a cada execução fará a avaliação/execução dos que eventos estão ativos, observando a freqüência de avaliação do mesmo. O resultado da avaliação do evento podem estar em três situações : N – Normal – Significa que não ultrapassou os valores limites A – Alerta – Significa que ultrapassou o limite de aviso. C – Crítico – Significa que ultrapassou o limite de crítico e uma ação de reparo deve ser realizada com urgência. Pode ser configurado um intervalo mais freqüente de avaliação do evento, quando atinge o nível crítico ou de alerta. O evento com estado NORMAL pode ter uma freqüência de notificação diferente da freqüência de avaliação. Normalmente a freqüência de notificação será menor do que a freqüência de avaliação. A aplicação permite que se criem grupos de notificação os quais podem ter várias pessoas de contato associadas. Cada evento fica associado a um grupo de notificação. Quando uma notificação se fizer necessária, as pessoas do grupo receberão o email com a mensagem adequada. 2.2 Trabalho Agendado Ação : pk_monitora.pr_avaliar_eventos Freqüência : 1 vez a cada minuto 3 – Tabelas da Aplicação Tabela TB_PARAMETROS Nome Campo Descrição DS_SERVIDOR_SMTP Endereço IP ou nome do servidor SMTP para envio de mensagens CD_CONTATO_ORIGEM Código do contato que será usado como origem, “from” das mensagens enviadas. Tabela TB_CONTATOS Nome Campo Descrição CD_CONTATO Código seqüencial do pessoa/contato. NM_CONTATO Nome da pessoa/contato. DS_EMAIL Email da pessoa/contato. Tabela TB_GRUPO_NOTIFICACAO Nome Campo Descrição CD_GRUPO Código seqüencial do grupo de notificação. NM_GRUPO Nome do grupo de notificação. Tabela TB_GRUPO_NOTIF_CONTATO Nome Campo Descrição CD_GRUPO Código do grupo de notificação. CD_CONTATO Código do pessoa/contato. Tabela TB_EVENTO Nome Campo Descrição CD_EVENTO Código seqüencial do evento NM_EVENTO Nome do evento. DT_EVENTO Data de criação do evento. FL_TIPO_RESULTADO Tipo de dados do resultado. (NUMBER, VARCHAR2, DATE) FL_TIPO_OPERADOR Operador usado na comparação do resultado : <, <=,>,>=,BETWEEN, NOT BETWEEN, LIKE, NOT LIKE, IS NULL, IS NOT NULL VL_LIMITE_AVISO1 Valor limite, ou limite inferior, para envio de mensagens de aviso VL_LIMITE_AVISO2 Valor limite superior para envio de mensagens de aviso. Usado quando o operador for BETWEEN ou NOT BETWEEN VL_LIMITE_CRITICO1 Valor limite, ou limite inferior, para envio de mensagens críticas VL_LIMITE_CRITICO2 Valor limite superior para envio de mensagens críticas. Usado quando o operador for BETWEEN ou NOT BETWEEN DS_CONSULTA Consulta a ser realizada para obter o valor atual do evento. Deve retornar somente uma única linha e uma única coluna cujo cabeçalho obrigatoriamente deve ser chamado de “valor”. Ex: Select count(*) valor from v$sesssion where username is NOT NULL. FL_CONSULTA_CRIPTO Indica se a consulta está criptografada ou não. DS_OBSERVACAO Observação sobre o evento. FL_EVENTO_ATIVO Flag que indica se o evento está ativo. (A para Ativo, I para Inativo ) DS_ACAO Script ou sentença SQL que deve ser realizada em resposta a atuação do evento em nível crítico. FL_TIPO_ACAO Tipo de ação a ser executada. 1-'SQL',2-'PL/SQL',3-'SCRIPT' CD_GRUPO_NOTIFICACAO Código do grupo de notificação a ser notificado quando o evento acontecer. VL_INTERVALO Intervalo de tempo entre as execuções para avaliações do evento. FL_UNIDADE_INTERVALO Unidade de medida do intervalo de tempo. 'D' Dia,'H' Hora,'M' Minuto,'S' Segundo FL_SITUACAO_EVENTO Situação apresentada pelo evento na última execução. 'N' Normal,'A' Aviso,'C' Crítico DT_ULTIMA_EXECUCAO Data da última execução do evento. VL_ULTIMA_EXECUCAO Valor apresentado na última execução. DS_UNIDADE_MEDIDA Unidade de medida do evento monitorado. Exemplo : '%', Seg, Min, Mega, Giga, etc. VL_INTERVALO_NOTIFICA_NO RMAL Intervalo de notificação do evento normal VL_INTERVALO_AVISO Intervalo de avaliação do evento em nível de aviso VL_INTERVALO_CRITICO Intervalo de avaliação do evento em nível crítico DT_ULTIMA _NOTIFICACAO Data em que foi realizada a última notificação QT_ATUAL_OCORRENCIA_CRI TICO Quantidade atual de ocorrências críticas do evento. QT_MAXIMA_OCORRENCIA_C RITICO Máximo de ocorrências do evento crítico antes de executar a ação corretiva.