terça-feira, 27 de dezembro de 2016

A triste batalha entre um EXADATA X5 e a SHARED POOL

Olá pessoal,

Esta semana investiguei um problema em um cliente, onde ocorreu a queda de um dos bancos do Exadata por 2 vezes.

O Exadata em questão é um X5-2 quarter rack.

Essa foi a imagem que recebi da área de monitoramento com o ocorrido:


Apenas uma suspeita gerado no alert.log de uma das instances:



Analisando os principais eventos de contenção dos ultimos dias, encontrei:

Apesar de existirem diversos WAITS de ROW LOCK CONTENTION, resolvi partir direto para o problema de library cache lock, seguindo a pista do erro no alert.log.

Algo que me chamou a atenção, foi o banco ter 65GB como limite mínimo de SHARED POOL, apesar de ser uma base pequena de 700GB:


Usei esse seguinte script para verificar o uso da shared pool.

Para minha surpresa, 98% dos 65GB estavam em uso:



Para confirmar qual sub-pool da shared estava sendo mais utilizado, utilizei este script do Tanel.


Confirmado que é a área responsável por guardar os SQLs.


Dentro do eDB360 existe um script que coleta os SQLs que não estão usando BIND:

WITH
lit AS (
SELECT /*+ MATERIALIZE NO_MERGE */ /* 2a.152 */
       force_matching_signature, COUNT(*) cnt, MIN(sql_id) min_sql_id, MAX(SQL_ID) max_sql_id
  FROM gv$sql
 WHERE force_matching_signature > 0
   AND UPPER(sql_text) NOT LIKE '%EDB360%'
 GROUP BY
       force_matching_signature
HAVING COUNT(*) > 99
)
SELECT /*+ NO_MERGE */ /* 2a.152 */
       DISTINCT lit.cnt, s.force_matching_signature, s.parsing_schema_name owner,
       CASE WHEN o.object_name IS NOT NULL THEN o.object_name||'('||s.program_line#||')' END source,
       s.sql_text
  FROM lit, gv$sql s, dba_objects o
 WHERE s.force_matching_signature = lit.force_matching_signature
   AND s.sql_id = lit.min_sql_id
   AND o.object_id(+) = s.program_id
 ORDER BY
       1 DESC, 2;


Confirmadas minhas primeiras suspeitas, a aplicação não utliza variáveis BIND:


Nesse caso temos 2 alternativas:

 1 - Corrigir a aplicação :)
 2 - Utilizar o cursor_sharing=force (sim, podemos ter problemas de performance)


Como a solução 1 não é rápida, optei pela 2 para resolver emergencialmente o problema.
Para não afetar todo banco, criei uma trigger de logon para alterar o parâmetro em 2 usuários específicos:

CREATE OR REPLACE TRIGGER SYSTEM.LOGIN_SHARED
AFTER LOGON ON DATABASE
BEGIN
  IF USER in ('USUARIO_1','USUARIO_2')  
  THEN
    EXECUTE IMMEDIATE ('ALTER SESSION SET CURSOR_SHARING=''FORCE''');
  END IF;
EXCEPTION
WHEN OTHERS THEN
NULL;
END;

-->
/

Para o USUARIO_1, o problema foi resolvido. Porém para o USUARIO_2, começaram a ocorrer problemas de performance em queries devido a mudança nos planos de execução.

Possíveis soluções:

 1 - Utilizar SQL PLAN BASELINES --> Demorado

 2 - Fazer FLUSH da SHARED POOL de tempos em tempos --> Fora de cogitação

 3 - Criar uma rotina para fazer o FLUSH de SQLs específicos --> Essa opção que eu utilizei


Utilizei como base esse script do Carlos Sierra:


Problema resolvido e o cliente feliz :)

P.S. Lembrei de um artigo que publiquei no GPO :)



segunda-feira, 14 de novembro de 2016

InteropMix 2016 - São Paulo

Olá pessoal,

No próximo sábado (19/11/2016) irei palestrar no evento InteropMix 2016 sobre Oracle Database 12c Release 2.


O evento será realizado na
Faculdade BandTec
Rua Estela, 268 | São Paulo - SP | Tel: (11) 5574-6844



sábado, 27 de agosto de 2016

Migrando Informix 11.70 para Oracle 12c

Olá pessoal,

Estive trabalhando em uma proposta de migração de Informix para Oracle e vou compartilhar o caminho das pedras.

Banco de Origem:

IBM Informix Dynamic Server Version 11.70.FC5
5TB
7.000 Tabelas
Média de 30 colunas por tabela

Banco de Destino:

Oracle Database Enterprise Edition 12.1.0.2


Algumas opções para migração:

1 - Usar ferramentas Informix para gerar arquivos e depois usar o SQL*Loader ou external tables: viável, porém extremamente trabalhoso para o elevado número de tabelas.

2 - Oracle Database Gateways: Requer licença adicional.

3 - SQL Developer's migration tools: Não suporta o Informix 11.70

4 - Oracle Migration Workbench : Não suporta o Informix 11.70

5 - Criar uma ferramenta para fazer a migração: Custo elevado e a demanda não justifica.

6 - Comprar uma ferramenta pronta.


Minha primeira opção foi em testar uma ferramenta pronta e escolhi duas:

http://www.sqlines.com/informix-to-oracle
http://www.ispirer.com/products/informix-to-oracle-migration

A que eu mais gostei, foi a SQLines Data. Porém tive alguns percalços com relação a versão do windows, drivers odbc e oracle client.

A ferramenta da Ispirer funciona bem, mas um ponto negativo é que ela gera um arquivo texto e depois importa para o Oracle. Tudo de forma automatizada, mas poderia ter a opção de fazer isso via insert direto.


Preparando o ambiente para os testes:

Criei 2 VMs, uma com Windows 7 - 32 bits (Sim, 32 bits, pois foi a única forma da SQLines Data funcionar) e outra com Oracle Linux 6.5 64 bits, onde instalei o Informix Developer Edition e o Oracle para testes.

Preparando o ambiente Windows:

  Instalar o Oracle Database 11g Release 2 Client (11.2.0.1.0) for Microsoft Windows (32-bit) 

  Configurar o tnsnames.ora apontando para o banco Oracle:



 Instalar o Java:



 Instalar Driver JDBC do Informix:


Instalar o Informix Client SDK Developer Edition for Windows x86, 32-bit:



Testando o SQLines Data


Instalar o SQLines Data:



Verificando a conexão com o Oracle:



Executar o setnet32 para configurar a conexão com o Informix:




Verificando a conexão com o Informix:


Para testes, vou deixar o default (todas as tabelas):



Log de transferência das tabelas:



Validação após a transferência:


Log da transferência:


Testando o Ispirer SQL Ways


 Instalar o Ispirer:


Criar uma conexão ODBC para o Informix no Windows e selecioná-la na ferramenta:



Informar os dados de conexão com o Oracle:


Agora é possível escolher os objetos que serão migrados:


Definir o mapeamento dos objetos:


Selecionando algumas opções para o Export dos dados:


Selecionando algumas opções para o Import dos dados:


Sumário:


Execução da migração:


Resumo da migração:


Como foi dito anteriormente, essa ferramenta gera arquivos para serem importados pelo SQL*Loader:



sexta-feira, 22 de julho de 2016

OTN TOUR LA - Costa Rica

OTN TOUR LA - Costa Rica - 3 de Agosto


OTN TOUR LA - Guatemala







segunda-feira, 20 de junho de 2016

OTN TOUR LA - México

México - 5 de Agosto - OTN Tour LA


GUOB TECH DAY 2016 - OTN TOUR LA - Brasil

GUOB TECH DAY 2016 - OTN TOUR LA

quarta-feira, 15 de junho de 2016

OCM 12c - Upgrade

Olá pessoal,

Estou escrevendo uma série de artigos para o OTN enquanto me preparo para o exame de atualização do OCM para a versão 12c. Estes artigos serão criados antes da prova e serão baseados apenas nos tópicos do exame:

Parte 1:

Parte 2:


#12cOCMU
#12cOCM
#OCM
#12c

terça-feira, 14 de junho de 2016

Oracle Open World Brasil - 2016

Olá pessoal,

Serei palestrante no Oracle Open World Brasil:

Quando: Terça - 28/06/2016 - 18:45

Sessão: The Best Oracle Database 12c New Features for Developers and DBAs



Nos vemos lá!
Abs

GUOB Tech Day 2016 - OTN TOUR LA - Brasil



Com grande sucesso, o GUOB prepara mais uma edição de seu evento nacional no dia 30/07/2016 em São Paulo, no Hotel Blue Tree Morumbi, com palestrantes nacionais e internacionais.

Nos vemos lá!
Abs

domingo, 22 de maio de 2016

Unable to create file QOpatch - qopiprep.bat - Permission denied


Me deparei com o seguinte erro ao tentar criar uma standby database utilizando o EM12c:












A solução foi utilizar CHMOD 777 neste arquivo no standby host.

Host - The Cloud Control database plug-in must be deployed on the Agent monitoring the selected host.

Me deparei com o seguinte erro ao tentar criar uma standby database utilizando o EM12c:

Host - The Cloud Control database plug-in must be deployed on the Agent monitoring the selected host.

Para resolver o problema, basta ir em Setup-->Extensibility>Plug-ins e fazer o deploy do Oracle Database Plugin no host.


sábado, 21 de maio de 2016

ORA-3113 - Convert to Physical Standby - Data Guard Broker

Hoje me deparei com um BUG ao tentar converter um snapshot standby para physical standby.

Bug 20838453

O bug está documentado no Doc ID 20838453.8


O Workaround é re-executar o comando conectado na Prymary.


Lembrando que o serviço deve estar registrado de forma estática no LISTENER do standby.

Exemplo:


SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = CDB1_STD.localdomain)
      (ORACLE_HOME = /u01/app/oracle/product/12.1.0/dbhome_2)
      (SID_NAME = CDB1)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = CDB1_STD_DGMGRL.localdomain)
      (ORACLE_HOME = /u01/app/oracle/product/12.1.0/dbhome_2)
      (SID_NAME = CDB1)
    )

  )


sexta-feira, 20 de maio de 2016

Device eth0 does not seem to be present

Ao clonar uma VM (Virtualbox) com Oracle Linux, encontrei o seguinte erro ao tentar subir a interface de rede:

"device eth0 does not seem to be present".

A solução é simple e foi encontrada nesse blog:

http://www.thesqlreport.com/?p=510

domingo, 15 de maio de 2016

OCM 12c Disponível - Oracle Database 12c Certified Master Exam

Olá pessoal,

Hoje vi no Oracle Education que a prova para o OCM 12c está disponível:

https://education.oracle.com/pls/web_prod-plq-dad/db_pages.getpage?
page_id=5001&get_params=p_exam_id:12COCM

Alguns tópicos desse exame são os mesmo da prova de upgrade para o OCM 12c - Oracle Database 12c Certified Master Upgrade Exam. Com isso, os artigos que estou escrevendo para o OTN, podem ser utilizados por quem vai fazer a prova pela primeira vez.

Além de passar na prova de 2 dias, são necessários 2 cursos oficiais Oracle para obter essa certificação, conforma a lista abaixo:

https://blogs.oracle.com/certification/entry/0856_25


Infelizmente a lista de datas e locais com a prova ainda não está atualizada.

http://education.oracle.co.uk/html/oracle/28US/SCHED_SP_OCM.htm



#12cOCM
#OCM
#12c

domingo, 1 de maio de 2016

Oracle Enterprise Manager Total Cloud Control 12c - Error: "perl: warning: Setting locale failed."

Ao tentar inicializar o Oracle Enterprise Manager Total Cloud Control 12c ocorreu o seguinte erro:

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_CTYPE = "UTF-8",
LANG = "en_US.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").


Ao executar o comando locale, pude verificar que a variável LC_ALL não estava setada:

$ locale
LANG=en_US.UTF-8
LC_CTYPE=UTF-8
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

Para resolver o problema, basta adicionar no .bash_profile:

export LC_ALL="en_US.UTF-8"