segunda-feira, 25 de agosto de 2014

Ice Bucket Challenge

Fui desafiado pelos meus amigos Kai Yu (Oracle ACE Director) e Deiby Gómez (Oracle ACE) para o desafio do balde de gelo.
I was challenged by my friends Kai Yu (Oracle ACE Director) and Deiby Gómez (Oracle ACE)  for the ice bucket challenge.


Como sabem, eu moro na África e aqui existe uma campanha de conscientização sobre o uso da água.
As you know, I am currently living in Africa, and here, there is an awareness campaign on the use of water.





Com isso resolvi fazer a minha parte e ajudar os dois lados. Ao invés de gravar o video utilizando a água e gelo, fiz apenas a doação em dinheiro para a ALS (Associação Pró-Cura Da Esclerose Lateral Amiotrófica) e faço um alerta com relação a utilização dos recursos hídricos.
With this in mind, I have decided to change the challenge a bit. With the intention of being helpful on both fronts,  instead of posting a video of me taking a bucket of ice water over my head, I am posting a a print of a cash donation made directly to LSA. At the same time, I would like to take this opportunity to remind everyone about the importance of our natural resources and most importantly, water.


Eu espero que entendam o meu ponto de vista :)
I am sure you will all understand where I am coming from when I decided to make a slight change in the way I am delivering the challenge.

Obrigado
Many Thanks.





domingo, 10 de agosto de 2014

12c - Approximate Count Distinct

A função APPROX_COUNT_DISTINCT proporciona uma alternativa para a função COUNT (DISTINCT expr).

Esta função processa grandes quantidades de dados de uma forma muito mais rápida que o COUNT, com um desvio insignificante do resultado exato.

Ela não pode ser utilizada com os seguintes tipos de dados:

  • BFILE
  • BLOB
  • CLOB
  • LONG
  • LONG RAW
  • NCLOB


A forma comum de utilização:

SQL> SELECT count (distinct manager_id) AS "Gerentes Ativos"
FROM hr.employees_big;

Gerentes Ativos
---------------
18

Elapsed: 00:00:03.02


Utilizando a função APPROX_COUNT_DISTINCT:

SQL> SELECT APPROX_COUNT_DISTINCT(manager_id) AS "Gerentes Ativos"
FROM hr.employees_big;

Gerentes Ativos
---------------
18

Elapsed: 00:00:00.62


Para quem quiser se aprofundar no assunto, indico o seguinte post:



Abraço,

Alex Zaballa.

domingo, 3 de agosto de 2014

GUOB TECH DAY 2014 - OTN TOUR LA - Brasil

No sábado(02/08) estive no Brasil participando do evento GUOB TECH DAY 2014 - OTN TOUR LA - Brasil que ocorreu em São Paulo.


Credenciamento:





Abertura:







Roland Smart falando sobre o OTN:


Francisco Munoz em sua primeira apresentação "Making Magic with Oracle":


Minha primeira apresentação "How to Become an Oracle Certified Master":


Almoço dos Speakers:


Deiby Gómez em sua apresentação "ASM Secrets":


Rene em sua apresentação "Getting Started with Database 12c as a service with EM12c":


Eduardo Hahn na mediação do Exadata SIG:



Roy Swonger na apresentação "Guide to Upgrade Databases":



Deiby Gómez em sua segunda apresentação "Differences Between RAC11G and RAC12c":


Roy Swonger em sua apresentação "Oracle Multitenant in the Real World":


Minha segunda apresentação "Flex ASM e Flex Cluster":


Encerramento do evento:




Link para download das minhas apresentações.

Link para a principal dúvida da palestra sobre Flex Cluster e Flex ASM.

Fotos oficiais do evento

Flex ASM - Acesso ao storage

Bom dia pessoal,

Ontem durante a palestra de Flex Cluster e Flex ASM, o que gerou mais dúvida foi a forma como a instance de banco de dados irá acessar os dados do storage após a queda do ASM.

Segue o diagrama da documentação oficial:



Oracle Flex ASM clients with direct access to Oracle ASM disks:
With this mode, database clients that are running on Hub nodes of the Oracle ASM cluster access Oracle ASM remotely for metadata, but perform block I/O operations directly to Oracle ASM disks. 

Como a instance roda em um HUB node, e este HUB node tem acesso ao storage, a instance continua acessando os dados diretamente do storage. A não ser que este bloco já esteja na SGA de outro node, neste caso o bloco será solicitado ao Cache Fusion e transmitido via interconnect.


Abs
Alex Zaballa

sábado, 2 de agosto de 2014

Apresentações - GUOB Tech Day - OTN TOUR LA Brazil 2014

Boa noite pessoal,

Conforme prometido, seguem as apresentações de hoje no GUOB Tech Day - OTN TOUR LA Brazil 2014.

How to become an Oracle Certified Master

Flex Cluster e Flex ASM

domingo, 27 de julho de 2014

12c - Oracle Database In-Memory – Primeiros Passos

In-Memory Column Store

In-Memory Column Store possibilita que os objetos (tabelas ou partições) sejam armazenados na memória utilizando o formato columnar. Este formato possibilita que scans, joins e aggregates sejam mais rápidos que no formato tradicional (row format). Esta feature não substitui o buffer cache, ela apenas mantém um cópia adicional e consistente do objeto.
Não são necessárias alterações na aplicação para começar a utilizar esta feature, basta apenas alterar algumas configurações do banco de dados.

O In-Memory Column Store é um novo componente da SGA, chamado In-Memory Area.

Ilustração dos 2 formatos:





Pela tabela oficial de preços da Oracle, a sua utilização implica em um custo extra de 23K USD por processador.

Para ativar essa feature, tudo que você tem a fazer é verificar se o parâmetro compatible está setado para 12.1.0.2 e alterar o parâmetro inmemory_size para um valor maior que 0.


[oracle@oracle01 ~]$ sqlplus / as sysdba

SQL*Plus: Release 12.1.0.2.0 Production on Thu Jul 24 10:24:11 2014

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


Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Advanced Analytics
and Real Application Testing options

SQL> show parameter inmemory

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
inmemory_clause_default              string
inmemory_force 
                      string      DEFAULT
inmemory_max_populate_servers 
       integer     1
inmemory_query 
                      string      ENABLE
inmemory_size 
                       big integer 1G
inmemory_trickle_repopulate_servers_ integer     1
percent
optimizer_inmemory_aware 
            boolean     TRUE


Para verificar os segmentos que estão em memória, podemos utilizar a view V$IM_SEGMENTS.

SQL> Select owner, segment_name name, populate_status status From v$im_segments;
no rows selected


SQL> Select table_name, cache, inmemory_priority, inmemory_distribute, inmemory_compression from dba_tables where table_name='EMPLOYEES';

TABLE_NAME        CACHE        INMEMORY INMEMORY_DISTRI INMEMORY_COMPRESS
----------------- ------------ -------- --------------- -----------------
EMPLOYEES         N

Vamos alterar a tabela para utilizar o in-memory:

SQL> Alter table hr.EMPLOYEES inmemory;

Table altered.


SQL> Select table_name, cache, inmemory_priority, inmemory_distribute, inmemory_compression from dba_tables where table_name='EMPLOYEES';
TABLE_NAME        CACHE        INMEMORY INMEMORY_DISTRI INMEMORY_COMPRESS
----------------- ------------ -------- --------------- -----------------
EMPLOYEES         N            NONE     AUTO            FOR QUERY LOW


Executando um select na tabela:

SQL> select /*+ full(EMPLOYEES) */ count(*) from hr.EMPLOYEES;

COUNT(*)
----------
1807872


Verificando os segmentos carregados em memória:

SQL> Select owner, segment_name name, populate_status status From v$im_segments;

OWNER                NAME                           STATUS    BYTES_NOT_POPULATED
-------------------- ------------------------------ --------- -------------------
HR                   EMPLOYEES                      COMPLETED 0


Mais uma view útil:

SQL> select * from V$INMEMORY_AREA;

POOL                ALLOC_BYTES USED_BYTES POPULATE_STATUS            CON_ID
------------------- ----------- ---------- -------------------------- ----------
1MB POOL            854589440   22020096   DONE                       0
64KB POOL           201326592   327680     DONE                       0

Neste post você viu uma pequena introdução sobre in-memory. Irei trabalhar na publicação em breve de artigos mais completos e com exemplos práticos.


Referência:


Abraço,


Alex Zaballa.

domingo, 13 de julho de 2014

DEFERRED SEGMENT CREATION

Esta funcionalidade foi introduzida no Oracle 11G R2 e permite que os segmentos para tabelas e seus objetos dependentes (LOBs, índices) não sejam criados até que a primeira linha seja inserida na tabela.

Esta funcionalidade pode ser controlada pelo parâmetro de inicialização DEFERRED_SEGMENT_CREATION, que é definido como TRUE por padrão. Este valor também pode ser alterado somente para a sessão, utilizando o ALTER SESSION.


SQL> show parameter DEFERRED_SEGMENT_CREATION

NAME                                 TYPE                VALUE
------------------------------------ ------------------- -----
deferred_segment_creation            boolean             TRUE

SQL> create table TABELA_TESTE(coluna1 number);
Table created.

SQL> SELECT segment_name,
segment_type
FROM user_segments
WHERE segment_name='TABELA_TESTE';

no rows selected

SQL> insert into TABELA_TESTE values(1);

1 row created.

SQL> SELECT segment_name,
segment_type
FROM user_segments
WHERE segment_name='TABELA_TESTE';

no rows selected

SEGMENT_NAME                     SEGMENT_TYPE
-------------------------------- ------------
TABELA_TESTE                     TABLE

1 linha seleccionada.


Podemos especificar isso na criação da tabela, utilizando SEGMENT CREATION DEFERRED ou SEGMENT CREATION IMMEDIATE.

SQL> create table TABELA_TESTE2(coluna1 number) SEGMENT CREATION IMMEDIATE;

Table created.

SQL> SELECT segment_name,
segment_type
FROM user_segments
WHERE segment_name='TABELA_TESTE2';

no rows selected

SEGMENT_NAME                     SEGMENT_TYPE
-------------------------------- ------------
TABELA_TESTE2                    TABLE

1 linha seleccionada.

Para apagar os segmentos associados a tabela, foi adicionado a cláusula  DROP ALL STORAGE ao TRUNCATE TABLE (disponível no 11.2.0.2).

SQL> TRUNCATE TABLE tabela_teste DROP ALL STORAGE;

Table truncated.

SQL> SELECT segment_name,
segment_type
FROM user_segments
WHERE segment_name='TABELA_TESTE';

no rows selected


Abraço,


Alex Zaballa.

quarta-feira, 25 de junho de 2014

KSCOPE14 - Review

Esta semana, estive participando do evento KSCOPE14  que ocorreu em Seattle de 22/06 à 26/06.

Os 2 hotéis indicados pela organização do evento estavam lotados, então fiquei em outro próximo, o Hyatt At Olive 8:



Local do Evento - Washington State Convention Center:






Registro:



Monitores com os Tweets sobre o evento:




Domingo:

Como não poderia ser diferente, escolhi participar da trilha sobre DATABASE


Oracle Database Cloud Service:



RESTful Access to Your Data:


Best PL/SQL Features You Never Heard Of (or certainly don’t use):


Storing and Querying JSON Data in Oracle Database 12c:


Oracle SQL Developer and Oracle Database 12c:


Applications HA Solutions for Planned and Unplanned Database Outages:


Fiquei surpreso com os itens da mochila, com certeza foram os mais criativos que eu já vi:



Segunda:

General Session and KeyNote:


Encontrei o Yury Velikanov logo na saída do keynote:


Durante o keynote, anunciaram a data e o local do evento do próximo ano:


A primeira do dia foi com o Carlos Sierra, falando sobre SPM:


Após tivemos o almoço com os ACEs:



Durante o evento era possível assistir aos jogos da copa:


A segunda do dia foi com o Alex Gorbachev da Pythian, sobre Hadoop:


A terceira foi com a Michelle Malcher, presidente do IOUG sobre Segurança no 12c:


A última do dia foi com o Yury Velikanov sobre AWR:


Terça:

A primeira do dia foi sobre New Features do Banco 12c:


A hora foi almoço foi um "Lunch and Learn" com Oracle ACEs:



Logo após o almoço foi sobre índices no Exadata com o Richard Foote :


A próxima foi sobre NoSQL e Big Data:


E a última do dia  foi com o Jeff Smith falando sobre as dicas e truques do SQL Developer:


Na terça ocorreu o ORACLE ACE Dinner ( obrigado a Vikki Lira pelo convite):




Quarta:

A primeira do dia foi com o Carlos Sierra, falando sobre Adaptive Cursor Sharing:


A segunda foi com a Kellyn Pot'Vin falando sobre EM12c:


A terceira foi com o Dominic Delmolino falando sobre Database Refactoring:


A quarta foi com a Heli Helskyaho falando sobre o SQL Developer Data Modeler:


A quinta foi com o Jeremiah Wilton falando sobre AWS:


E a última foi com o Galo Balda falando sobre SQL Pattern Matching: