domingo, 15 de novembro de 2015

GUORS 2015 - Review

No dia 12/11 tive o prazer de participar do evento do Grupo de Usuários Oracle do Rio Grande do Sul (GUORS). 

Durante muitos anos participei deste grupo, que agora está retomando a sua agenda de eventos.


Abertura do evento foi feita pelo Fábio Miguel Blasak da Fonseca,  que é um dos coordenadores do GUORS:



Primeira palestra do dia: Oracle 12c New features - Alex Zaballa - Accenture Enkitec Group




Segunda Palestra: SQL Tuning e Melhores Práticas – Gustavo Braga – DELL





Terceira palestra: Oracle Maximum Availability Architecture – Carlos Pimentel – DELL




Quarta e última palestra do dia: Oracle Data Redaction - Alex Zaballa - Accenture Enkitec Group







Encerramento:

Fábio Miguel Blasak da Fonseca
Alex Zaballa
Anderson Haertel Rodrigues
Carlos Pimentel 



Obrigado ao pessoal do GUORS pelo convite e fico à disposição para ajudar o grupo no que for necessário.


Abs
Alex Zaballa

segunda-feira, 2 de novembro de 2015

Oracle Open World 2015 - Review

Participei do evento Oracle Open World 2015 pela sexta vez consecutiva. O evento ocorre em San Francisco e este ano foi de 25 à 29 de Outubro.
Neste ano, tive o prazer de se palestrante em 3 sessões e mais um painel de discussões sobre os grupos de usuários da América Latina.



Na minha primeira sessao sobre "Oracle Database 12c - Data Redaction", fiquei surpreso com o número de participantes, por se tratar da primeira sessão do evento às 8 horas da manhã. Foram mais de 100 pessoas.




Oracle Database 12c - Data Redaction

Minha segunda sessão, apresentei em conjunto com o Deiby Gómez, Oracle Ace Director da Guatemala. Nesta sessão, falamos sobre as New Features do Oracle Database 12c - 12.1.0.2. Tivemos mais de 150 participantes.



Oracle Database 12.1.0.2 New Features


A minha terceira sessão, foi em conjunto com outros 15 Oracle Ace Directors, onde cada um teve 7 minutos para falar sobre uma funcionalidade do Oracle Database 12c. Nesta sessão, tivemos mais de 300 participantes.



Oracle Data Redaction - EOUC


Também participei de um painel sobre os grupos de usuários na América Latina.




Foto oficial com os Oracle Aces que participaram do evento:



Abertura oficial do evento no Domingo:



Oracle ACE Dinner.



A Accenture Ekitec Group esteve presente na área de expositores.



No evento é possível conseguir alguns adevisos legais para o Laptop.



Para quem é Oracle Partner, existe a possibilidade de fazer uma prova de certificação sem custo durante o evento.



Oracle Appreciation Event - Shows que ocorrem na quarta-feira à noite.



Algumas sessões interessantes que participei:



  General Session: Next-Generation Data Management Architecture [GEN6765]



  Upgrade and Migrate to Oracle Database 12c: Live and Uncensored!



  Oracle Exadata: What’s New and What’s Coming [CON6788]


  Oracle Real Application Clusters Best Practices [CON8780]


  Oracle RMAN in Oracle Database 12c: Best Practices [CON6786]


  Real-Time SQL Monitoring in Oracle Database 12c [CON7871]



  Private Cloud Appliance and Oracle Exadata for High-Volume Financial Services Systems [CON5175]



  SQL Tuning Without Trying [CON3632]



  Jantar na quinta-feira após o evento.



Gostaria de agradecer ao ORACLE ACE PROGRAM pela oportunidade em participar desse evento e por todo cuidado que tiveram conosco.



Até 2016 :)


sábado, 24 de outubro de 2015

Meu primeiro Oracle ACE Director "briefing"

Participo do Oracle Open World desde 2010, mas este é o meu primeiro ano que participo como um Oracle ACE Director.

Antes do OOW, podemos participar do Oracle ACE Director briefing, que é um evento de 2 dias dentro da Oracle Head Quarters. Neste evento, recebemos informações sobre nova features e mudanças que acontecerão nos produtos. Como tudo isto tudo é parte do NDA (Non-Disclosure Agreement ), não posso dar detalhes sobre o que foi visto.

Vista do Oracle HQ:



Na correria do dia-a-dia, muitas vezes não paramos para pensar nos detalhes. Durante o evento, um grande amigo meu me fez pensar em algo importante ao me dizer o seguinte: "O Brasil é um país tão grande e você é o primeiro Brasileiro a participar do Oracle ACE Director Briefing".

Isso é o tipo de coisa que deixa a família toda orgulhosa, mas principalmente que me fez pensar em toda jornada para chegar até aqui, das noites e noites de estudo, fins de semana "perdidos", nas coisas que tive que "abrir mão", dos anos longe de casa e o que posso dizer é "Tudo valeu a pena".

Obviamente que tudo se torna mais fácil quando você tem Deus no coração e, encontra uma pessoa que te entende e te dá forças para continuar nos momentos mais difícies. Te amo minha "malinha" :)

"A tua palavra é lâmpada
que ilumina os meus passos
e luz que clareia o meu caminho." Salmos 119:105


Meu primeiro presente como Oracle ACE Director :)


Gostaria de agradecer a Vikki e a Jennifer do Oracle ACE Program pela ótima organização e por todo cuidado conosco.

Agora é hora de rever os slides e me preparar para as 3 apresentações no domingo.


Abs
Alex Zaballa

domingo, 11 de outubro de 2015

Recuperação de blocos corrompidos com o RMAN

No dia-dia de um DBA, um usuário do sistema pode reportar que ocorreu o erro ORA-01578.

Ao saber disso, o DBA deve dar uma olhada no alert.log e procurar por um erro similar a este:

Corrupt block relative dba: 0x01c00083 (file 7, block 131)
Bad header found during buffer read
Data in bad block:
type: 116 format: 5 rdba: 0x20676e69
last change scn: 0x7075.72726f63 seq: 0x74 flg: 0x69
spare1: 0x73 spare2: 0x74 spare3: 0xa
consistency value in tail: 0xea160602
check value in block header: 0x6e6f
block checksum disabled

Reading datafile '/u01/oradata/users_teste.dbf' for corruption at rdba: 0x01c00083 (file 7, block 131)
Reread (file 7, block 131) found same corrupt data (no logical check)
Mon Oct 05 23:56:56 2015
Corrupt Block Found
CONT = 0, TSN = 8, TSNAME = USERS_TESTE
RFN = 7, BLK = 131, RDBA = 29360259
OBJN = 93473, OBJD = 93473, OBJECT = EMP_TESTE, SUBOBJECT =
SEGMENT OWNER = SCOTT, SEGMENT TYPE = Table Segment
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_6232.trc (incident=289009):
ORA-01578: ORACLE data block corrupted (file # 7, block # 131)
ORA-01110: data file 7: '/u01/oradata/users_teste.dbf'
Incident details in: /u01/app/oracle/diag/rdbms/orcl/orcl/incident/incdir_289009/orcl_ora_6232_i289009.trc
Mon Oct 05 23:56:57 2015
Sweep [inc][289009]: completed
Mon Oct 05 23:56:57 2015
Hex dump of (file 7, block 131) in trace file /u01/app/oracle/diag/rdbms/orcl/orcl/incident/incdir_289009/orcl_m000_6320_i289009_a.trc



Levando em conta que você é um bom DBA e está com o seu backup em dia J, podemos utilizar o RMAN para fazer a recuperação deste bloco corrompido.


Validando a tablespace para popular a V$DATABASE_BLOCK_CORRUPTION com a lista de blocos corrompidos:

RMAN> validate tablespace users_teste;

Starting validate at 06-OCT-15
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=12 device type=DISK
channel ORA_DISK_1: starting validation of datafile
channel ORA_DISK_1: specifying datafile(s) for validation
input datafile file number=00007 name=/u01/oradata/users_teste.dbf
channel ORA_DISK_1: validation complete, elapsed time: 00:00:01
List of Datafiles
=================
File Status Marked Corrupt Empty Blocks Blocks Examined High SCN
---- ------ -------------- ------------ --------------- ----------
7 FAILED 0 61 1281 2550298
File Name: /u01/oradata/users_teste.dbf
Block Type Blocks Failing Blocks Processed
---------- -------------- ----------------
Data 0 0
Index 0 0
Other 2 1219

validate found one or more corrupt blocks
See trace file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_6422.trc for details
Finished validate at 06-OCT-15



Verificando a lista de blocos que estão corrompidos:

RMAN> select * from v$database_block_corruption order by 1,2,3,4;

FILE#      BLOCK#     BLOCKS     CORRUPTION_CHANGE# CORRUPTIO CON_ID
---------- ---------- ---------- ------------------ --------- ----------
7          131        1          0                  CORRUPT   0



Verificando qual objeto está corrompido:

RMAN> SELECT SEGMENT_TYPE,OWNER||'.'||SEGMENT_NAME
FROM DBA_EXTENTS
WHERE FILE_ID = 7 AND 131 BETWEEN BLOCK_ID
AND BLOCK_ID+BLOCKS -1;


SEGMENT_TYPE OWNER||'.'||SEGMENT_NAME
---------------

------------------------------------------------------------------------
TABLE
SCOTT.EMP_TESTE




Recuperando os blocos do backup


Como é um bloco só, podemos recuperar da seguinte forma:

blockrecover datafile 7 block 131;

Outra forma seria:

blockrecover corruption list;


RMAN> blockrecover datafile 7 block 131;

Starting recover at 06-OCT-15
using channel ORA_DISK_1

channel ORA_DISK_1: restoring block(s)
channel ORA_DISK_1: specifying block(s) to restore from backup set
restoring blocks of datafile 00007
channel ORA_DISK_1: reading from backup piece +FRA01/ORCL/BACKUPSET/2015_10_05/nnndf0_tag20151005t234117_0.334.892338095
channel ORA_DISK_1: piece handle=+FRA01/ORCL/BACKUPSET/2015_10_05/nnndf0_tag20151005t234117_0.334.892338095 tag=TAG20151005T234117
channel ORA_DISK_1: restored block(s) from backup piece 1
channel ORA_DISK_1: block restore complete, elapsed time: 00:00:01

starting media recovery
media recovery complete, elapsed time: 00:00:03

Finished recover at 06-OCT-15


Validando a tablespace após a recuperação:

RMAN> validate tablespace users_teste;

Starting validate at 06-OCT-15
using channel ORA_DISK_1
channel ORA_DISK_1: starting validation of datafile
channel ORA_DISK_1: specifying datafile(s) for validation
input datafile file number=00007 name=/u01/oradata/users_teste.dbf
channel ORA_DISK_1: validation complete, elapsed time: 00:00:01
List of Datafiles
=================
File Status Marked Corrupt Empty Blocks Blocks Examined High SCN
---- ------ -------------- ------------ --------------- ----------
7 OK 0 61 1281 2550298
File Name: /u01/oradata/users_teste.dbf
Block Type Blocks Failing Blocks Processed
---------- -------------- ----------------
Data 0 1
Index 0 0
Other 0 1218

Finished validate at 06-OCT-15

Utilizando o DBVerify para validar o datafile após a recuperação:

[oracle@oracle01 trace]$ dbv file=/u01/oradata/users_teste.dbf blocksize=8192 feedback=10000

DBVERIFY: Release 12.1.0.1.0 - Production on Tue Oct 6 00:24:50 2015

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

DBVERIFY - Verification starting : FILE = /u01/oradata/users_teste.dbf
DBVERIFY - Verification complete
Total Pages Examined : 1280
Total Pages Processed (Data) : 1
Total Pages Failing (Data) : 0
Total Pages Processed (Index): 0
Total Pages Failing (Index): 0
Total Pages Processed (Other): 1218
Total Pages Processed (Seg) : 0
Total Pages Failing (Seg) : 0
Total Pages Empty : 61
Total Pages Marked Corrupt : 0
Total Pages Influx : 0
Total Pages Encrypted : 0
Highest block SCN : 2550298 (0.2550298)



Alguns pontos:

  • Caso você tenha um Active Data Guard, existe o auto-block media recovery, que tentará fazer a recuperação automática do bloco corrompido.
  • Caso seja um índice, é possível apenas fazer o rebuild deste índice.
  • É possível utilizar a package DBMS_REPAIR para reparar e recuperar blocos corrompidos.



Scripts utilizados para realizar os testes:

CREATE TABLESPACE "USERS_TESTE" DATAFILE '/u01/oradata/users_teste.dbf'
SIZE 10M
AUTOEXTEND ON NEXT 1M MAXSIZE 32767M
LOGGING ONLINE PERMANENT BLOCKSIZE 8192
EXTENT MANAGEMENT LOCAL AUTOALLOCATE DEFAULT
NOCOMPRESS SEGMENT SPACE MANAGEMENT AUTO;

CREATE TABLESPACE "USERS_TESTE_IDX" DATAFILE '/u01/oradata/users_teste_idx.dbf'
SIZE 10M
AUTOEXTEND ON NEXT 1M MAXSIZE 32767M
LOGGING ONLINE PERMANENT BLOCKSIZE 8192
EXTENT MANAGEMENT LOCAL AUTOALLOCATE DEFAULT
NOCOMPRESS SEGMENT SPACE MANAGEMENT AUTO;

create table scott.emp_teste tablespace users_teste as select * from scott.emp;

CREATE index "SCOTT"."EMP_TESTE_IDX01" on scott.emp_teste("EMPNO") tablespace users_teste_idx;

SELECT header_block FROM dba_segments WHERE segment_name=’EMP_TESTE’;

dd of=/u01/oradata/users_teste.dbf bs=8192 conv=notrunc seek=131 << EOF
forcando corrupcao
EOF

alter system flush buffer_cache;

SQL> select * from scott.emp_teste;
select * from scott.emp_teste
*
ERROR at line 1:
ORA-01578: ORACLE data block corrupted (file # 7, block # 131)
ORA-01110: data file 7: '/u01/oradata/users_teste.dbf'



domingo, 27 de setembro de 2015

More Than Another 12 on Oracle Database 12c [UGF3190]

Este ano estarei participando de uma sessão no Oracle Open World, na qual representarei o EOUC, através do Grupo de Usuários Oracle de Angola (GUOA).

More Than Another 12 on Oracle Database 12c [UGF3190]
October 25, 1:30 pm - 3:15 pm | Moscone South—306

Palestrantes confirmados e tópicos:

Jonathan Lewis                     Less well-known enhancements of the 12c Optimizer
Julian Dontcheff                   Oracle Database 12c In-Memory Advisor
Gurcan Orhan                       Adapting DB 12C In-Memory to ODI 12c
Osama Mustafa                     How to plugin a non-CDB database to a Container Database (CDB)
Bjoern Rost                           How ASM has reached maturity in 12c
Alex Nuijten                         Security Enhancements in PL/SQL or "JSON in the database”
Brendan Tierney                   Running R in the Database using Oracle R Enterprise
Douwe Pieter van den Bos     Maximum security architecture
Christian Antognini               Real-time Monitoring of Composite Database Operations
Martin Widlake                     12C - Clustered Data aware TABLE_CACHED_BLOCKS          
Heli Helskyaho                      Design your 12c Databases using Oracle SQL Dev Data Modeler
Oded Raz                              Oracle 12c Privileges Analysis
Tim Hall                                a definir
Alex Zaballa                          Oracle Data Redaction
Maria Colgan                         a definir
Lucas Jemella                       a definir


Two minute tech tip video from Debra


Esta sessão será muito concorrida, por isso certifique-se de colocá-la em sua programação :)

Abs



sábado, 26 de setembro de 2015

12c - Partial Indexes for Partitioned Tables

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.

sábado, 19 de setembro de 2015

O Oracle Open World está quase aí....

Olá pessoal,

O Oracle Open World 2015 está quase aí e terei o prazer de participar pela 6a vez consecutiva.

Este ano serei palestrante em 2 sessões, uma representando os grupos de usuários Oracle da America Latina, através do Grupo de Usuários Oracle Brasil( GUOB)  e outra representando o EMEA, através do Grupo de Usuários Oracle de Angola (GUOA).

Oracle Database 12c—Data Redaction [UGF1513]
October 25, 8:00 am - 8:45 am | Moscone West—3011

More Than Another 12 on Oracle Database 12c [UGF3190]
October 25, 1:30 pm - 3:15 pm | Moscone South—306

Pela primeira vez, irei participar do ACE Director Product Briefing no Oracle Conference Center, que irá ocorrer antes do OOW, nos dias 22 e 23 de Outubro.


Algumas dicas para que vai pela primeira vez:

  • Tome cuidado com a roupa, pois em São Francisco costuma fazer as 4 estaçoes do ano no mesmo dia --> Use roupas que você possa colocar e tirar facilmente.
  • Utilize o Schedule Builder, pois as melhores sessões são concorridas e as salas possuem espaço limitado.
  • Procure atender o maior número de palestras que conseguir, porque você irá absorver mais informações em 5 dias do que no resto do ano.
  • Vá até a área de expositores e converse com os gerentes de produtos.
  • Participe do LAD Reception--> Nesse envento, você terá a oportunidade de conhecer diversos profissionais da América Latina. 
  • Aproveite e faça uma certificação no Test Fest @ OPN Central
  • Participe do Bloggers Meet Up no dia 29/10 às 5:30 --> Nesse evento, você terá a oportunidade de conhecer pessoalmente muitas pessoas das quais já deve ter lido o blog. 
  • Visite o OTN Lounge
  • Participe das sessões dos grupos de usuários no domingo
  • No final do domingo , vá cedo para a sala principal para assistir a primeira palestra do Larry Ellison--> É a palestra mais concorrida do evento e as chances de você ficar de fora são grandes.
Será fácil de me achar na área de expositores, no estande da Accenture Enkitec Group

Abs e até lá...