segunda-feira, 10 de novembro de 2014

Connect 2014 - SAOUG - Review


De 09/11 à 11/11 participei do evento Connect 2014 do SAOUG (Grupo de Usuários Oracle da África do Sul).

O evento ocorreu no CHAMPAGNE SPORTS RESORT, que fica a cerca de 5 horas de carro do aeroporto OR Tambo.


Entrada do Hotel:





Chalets (os quartos do hotel já estavam lotados e a opção dada, foi ficar nos chalets) :




Montagem dos expositores:


Credenciamento:


 Material:


Domingo

Abertura:


Cocktail de abertura:


Segunda

Keynote - Digital Disruption:


New Innovations in 12C:


Living with Exadata:


Why SQL Server customers are migration to Oracle:


Want to secure your database? Ask me HOW!


Oracle Database Cloud:


 Keynote - Big Data:




Terça

Keynote - How BIG technology trends are being leveraged by large companies to achieve “Digital Transformation”


Upgrade, Migrate & Consolidate to Oracle Database 12c: WHY?


AutoCloning Without Dataguard:


Nossa sessão sobre Flex Cluster and Flex ASM:


ODA Experience:


Keynote - Oracle Database 12c innovations - Demonstration challenge!




Encerramento:


Até 2015 :)

Presentation Download

sexta-feira, 7 de novembro de 2014

Como remover um SQL Statement da Shared Pool

Imaginem um cenário onde é necessário limpar da shared pool um comando SQL, para que na próxima execução seja realizado um hard parse deste SQL.

Sabemos que para limpar toda a shared pool, podemos utilizar o comando ALTER SYSTEM FLUSH SHARED_POOL. Porém, ao executar este comando em um ambiente de produção haverá um impacto significativo.


SQL> ALTER SYSTEM FLUSH SHARED_POOL;
System altered.

Para resolver este problema, no Oracle11G, foi introduzida a procedure PURGE na package DBMS_SHARED_POOL.


De acordo com a documentação, para limpar um SQL Statement, o parâmetro name, que é  obrigatório, é a concatenação das colunas address e hash_value da view V$SQL_AREA. O parâmetro flag deve ser setado para um valor diferente de P, T ,R ou Q. Então, nesse caso vamos utilizar ‘C‘.

SQL> select ADDRESS, HASH_VALUE from V$SQLAREA where SQL_ID like '9uay37ag292zh';

ADDRESS HASH_    VALUE
---------------- ----------
00000000DA8B10F0 2653195248

SQL> exec DBMS_SHARED_POOL.PURGE ('00000000DA8B10F0, 2653195248','C');

PL/SQL procedure successfully completed.

SQL> select ADDRESS, HASH_VALUE from V$SQLAREA where SQL_ID like '9uay37ag292zh'; 

no rows selected

Mudando o parâmetro flag, também podemos remover outros tipos de objetos, como packages, procedures, functions, types, triggers e sequences.

O  valor default para o parâmetro flag é 'P', mas podemos utilizar:

  • P - nome da package/procedure/function
  • T - nome do type
  • R - nome da trigger
  • Q - nome da sequence


Limpando uma procedure da shared pool:

CREATE OR REPLACE PROCEDURE procedure_teste IS
BEGIN
NULL;
END;
/
Procedure created.


SQL> exec procedure_teste;
PL/SQL procedure successfully completed.

SQL> exec dbms_shared_pool.purge('PROCEDURE_TESTE');
PL/SQL procedure successfully completed.


Para algumas versões do banco 10GR2, isto está disponível através do Patch 5614566.


Referências:



Abraço,

Alex Zaballa.

domingo, 2 de novembro de 2014

12c - Partial Indexes for Partitioned Table

Um novo recurso chamado Partial Indexes for Partitioned Tables foi introduzido no Oracle 12c.

Agora, você pode criar os índices (globais ou locais) para partições ou sub-partições específicas, isto é,  os índices serão criados apenas para partições/sub-partições que você deseja.

Este recurso não é suportado para índices únicos, ou seja, para índices utilizados para impor restrições exclusivas.

Novos atributos para o comando CREATE TABLE:
  • INDEXING ON (default)
  • INDEXING OFF

Novos atributos para o comando CREATE INDEX:
  • INDEXING FULL (default)
  • INDEXING PARTIAL

Como este assunto é muito extenso e com diversas variações, irei mostrar apenas alguns exemplos de como iniciar a utilização desta nova funcionalidade.


Criando a tabela para testes:

create table tabela_teste
(
coluna1 number,
coluna2 number
)
indexing on
partition by range(coluna1)
(
partition part1 values less than(100) indexing off,
partition part2 values less than(200) indexing on,
partition part3 values less than(300),
partition part4 values less than(400)
);
Table created.

Verificando o atributo indexing:

SQL> select table_name, def_indexing

       from dba_part_tables

      where table_name='TABELA_TESTE';
 
TABLE_NAME           DEF
-------------------- ---
TABELA_TESTE         ON

Verificando o atributo indexing por partição:

SQL> select table_name, partition_name, indexing
       from dba_tab_partitions
      where table_name='TABELA_TESTE'
   order by partition_position;

TABLE_NAME           PARTITION_NAME       INDEXING

-------------------- -------------------- --------

TABELA_TESTE         PART1                 OFF

TABELA_TESTE         PART2                 ON

TABELA_TESTE         PART3                 ON

TABELA_TESTE         PART4                 ON

Alterando o atributo indexing após a tabela criada:

SQL> alter table TABELA_TESTE modify default attributes indexing off;

Table altered.


SQL>select table_name, def_indexing
      from dba_part_tables
     where table_name='TABELA_TESTE';

TABLE_NAME           DEF
-------------------- ---
TABELA_TESTE         OFF



Alterando o atributo indexing da partição após a tabela criada:


SQL> alter table TABELA_TESTE modify partition part3 indexing off;
Table altered.


SQL> select table_name, partition_name, indexing
       from dba_tab_partitions
      where table_name='TABELA_TESTE'
   order by partition_position;


TABLE_NAME           PARTITION_NAME       INDEXING

-------------------- -------------------- --------

TABELA_TESTE         PART1 
               OFF

TABELA_TESTE 
        PART2                ON

TABELA_TESTE 
        PART3                OFF

TABELA_TESTE 
        PART4                ON



Criando um índice:

SQL> create index TABELA_TESTE_INDEX01 on TABELA_TESTE(coluna1) local indexing partial;
Index created.

SQL> select index_name, partition_name, status
       from dba_ind_partitions 
      where index_name='TABELA_TESTE_INDEX01'
   order by partition_position;


INDEX_NAME           PARTITION_NAME       STATUS
-------------------- -------------------- --------

TABELA_TESTE_INDEX01 PART1                UNUSABLE

TABELA_TESTE_INDEX01 PART2       
         USABLE

TABELA_TESTE_INDEX01 PART3       
         UNUSABLE

TABELA_TESTE_INDEX01 PART4       
         USABLE


Efeito no plano de execução:





Referências:




Abraço,
Alex Zaballa.

segunda-feira, 20 de outubro de 2014

Oracle Open World 2014 - Review

Participei do OOW14 que ocorreu em San Francisco de 28/09 à 02/10.

Gostaria de agradecer a Victoria e a Jennifer do Oracle ACE Program pelo convite para participar do evento.

Minha jornada de ida a San Francisco iniciou na sexta, dia 26/09, de Luanda a São Paulo, em um voo da TAAG de 8,5 horas. Após 8 horas de espera no aeroporto, peguei o voo United com destino a Houston e duração de 10 horas. A última etapa foi o voo de Houston para San Francisco, com duração de 3,5 horas.

Descrevi o meu itinerário para enfatizar o quanto vale a pena estar presente neste evento.

Para quem quiser ir no próximo ano, a dica principal é fazer a reserva do hotel com bastante antecedência, eu fiz a minha reserva em Junho e já não haviam muitas opções disponíveis próximas ao local do evento.


Cheguei no sábado e já fiz o registro para o evento, para evitar filas:



Uma dica importante, é participar das palestras dos grupos de usuários que ocorre no domingo.


Segue a lista do que eu vi no domingo:


  • Oracle RAC, Oracle Data Guard, and Pluggable Databases: When MAA Meets Oracle Multitenant - Ludovico Caldara

  • 24/7 Availability with Oracle Database Application Continuity - Jeremiah Wilton e Marc Fielding

  • Demystifying Cache Buffer Chains - Arup Nanda

  • Oracle Database 11g and 12c New Features and Best Practices for DBAs and Developers - Ami Aharonovich
  • The Best Oracle Database 12c Tuning Features - Rich Niemiec
  • 12 Looks at Oracle Database 12c: EOUC Short Talks
  • Expert Oracle Exadata: Then and Now - Andy Colvin,Martin Bach,Tanel Poder e Kerry Osborne

  • Opening Keynote - Larry Ellison --> em 5 anos de OOW, foi a primeira vez que eu vi lotar um keynote, a ponto de fecharem a entrada

  • Oracle ACE DINNER




  • RAC Attack:





Segunda:


  • Keynote - The Business Value of the Cloud


  • Oracle Database Directions for Big Data and the Cloud - Andy Mendelsohn
  • What’s New in Oracle Database 12c Release 12.1.0.2? - Thomas Kyte

  • Oracle Database In-Memory: The Next Big Thing - Juan Loaiza

  • Oracle Exalogic Roadmap: Hardware, Software, and Platform News

  • Kevin Closson:SLOB – For More Than I/O!

  • Oracle Exadata: What’s New and What’s Coming - Juan Loaiza

  • Introducing Oracle Key Vault: Centralized Keys, Wallets, and Java Keystores 

  • YesSQL! A Celebration of SQL and PL/SQL - Steven Feuerstein e Thomas Kyte

  • OTN Tech Fest





Terça:

  • Carlos Sierra: introducing edb360 tool - OakTable

  • Tanel Poder: Hacking Oracle 12c - OakTable

  • Top Five Things to Know About Oracle Database In-Memory - Maria Colgan


  • Oracle OpenWorld Tuesday Afternoon Keynote - Larry Ellison

  • Zero Data Loss Recovery Appliance: Deployment Best Practices 

  • Oracle Multitenant Meets Oracle Database In-Memory - Maria Colgan e Patrick Wheeler



Quarta:


  • Keynote - The Real-Time Enterprise

  • Resource Manager: Best Practices

  • Oracle Recovery Manager (Oracle RMAN) in Oracle Database 12c: Best Practices

  • Oracle Automatic Storage Management: What’s New and Best Practices.

  • Oracle Exadata Technical Deep Dive: Architecture and Internals
  • Oracle Exadata Database Machine Administration and Monitoring Made Easy - Kellyn Pot'vin


Outro evento imperdível durante o OOW, é o Oracle Bloggers Meetup, organizado pela Pythian e pelo OTN:


Show do Aerosmith:




Quinta:

  • Best Practices for Zero Downtime: When Outages Are Not an Option

  • Oracle Database In-Memory in Action - Tanel Poder e Kerry Osborne

  • Oracle Database In-Memory Meets Oracle Optimizer

  • Internals of the Oracle Database 12c Multitenant Architecture



O que mais se falou ?

 1 - Cloud
 2 - Database In-Memory --> já era esperado
 3 - Software on Silicon --> Oracle SPARC
 4 - Zero Data Loss Recovery Appliance (ZDLRA)


Até 2015 :)