domingo, 21 de setembro de 2014

12c - Full Database Caching Mode

Um novo recurso chamado Full database caching foi introduzido na versão 12.1.0.2. Este novo recurso permite armazenar todos os segmentos do banco de dados em memória (quando os segmentos forem acessados). Ele deve ser usado quando o tamanho do buffer cache do banco de dados da instância for maior do que o tamanho total do banco de dados.

Com esta opção ativa, Full scans e NOCACHE LOBs, também serão carregados e armazenados no buffer cache.  Nas versões anteriores não era garantido que os segmentos seriam mantidos em cache, ao menos que fosse usado o KEEP.

Habilitando o recurso:

[oracle@oracle01 ~]$ sqlplus / as sysdba
SQL*Plus: Release 12.1.0.2.0 Production on Wed Sep 17 16:59:56 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> startup mount
ORACLE instance started.

Total System Global Area 2499805184 bytes
Fixed Size 2927480 bytes
Variable Size 486540424 bytes
Database Buffers 922746880 bytes
Redo Buffers 13848576 bytes
In-Memory Area 1073741824 bytes
Database mounted.

SQL> ALTER DATABASE FORCE FULL DATABASE CACHING;

Database altered.

SQL> SELECT force_full_db_caching FROM v$database;

FOR
---
YES


Referências:




Abraço,

sábado, 20 de setembro de 2014

Oracle Open World 2014

De 28/9 à 02/10 acontece o Oracle Open World em San Francisco.

Felizmente já estou com visto, inscrição, passagens, hotel e scheduler prontos.


Quem for, não deixe de participar também dos eventos abaixo:

Oracle User Groups  - domingo - 8:00 –16:30hrs

OOW 2014 RAC ATTACK - domingo - 9:00hrs

#CloneAttack and #RepAttack

Oracle Technology Network's Tech Fest - segunda - 19:00 - 21:00 hrs

Oracle OpenWorld 2014 – Bloggers Meetup - quarta - 17:30hrs

domingo, 14 de setembro de 2014

12c - Preserving or Discarding the Open Mode of PDBs When the CDB Restarts

Antes do 12.1.0.2, quando um CDB era inicializado, todos PDBs permaneciam em modo mount, exceto o PDB$SEED, que deve ficar em Read only.

Para resolver isso, era necessário criar uma trigger para abrir os PDBs.

CREATE OR REPLACE TRIGGER ABRIR_TODOS_PDBS
AFTER STARTUP ON DATABASE
BEGIN
EXECUTE IMMEDIATE 'ALTER PLUGGABLE DATABASE ALL OPEN';
END;
/


No patchset 12.1.0.2, foi introduzida a capacidade de preservar o estado de inicialização dos PDBs.

[oracle@oracle01 ~]$ sqlplus / as sysdba

SQL*Plus: Release 12.1.0.2.0 Production on Mon Sep 8 16:26:37 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> SELECT name, open_mode FROM v$pdbs;

NAME                           OPEN_MODE
------------------------------ ----------
PDB$SEED                       READ ONLY
PDB1                           READ WRITE
PDB2                           MOUNTED
PDB3                           MOUNTED

Agora vamos salvar o estado atual:

ALTER PLUGGABLE DATABASE pdb1 SAVE STATE;


Verificando os estados salvos:

[oracle@oracle01 ~]$ sqlplus / as sysdba

SQL*Plus: Release 12.1.0.2.0 Production on Mon Sep 8 16:32:37 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> SELECT con_name, instance_name, state FROM dba_pdb_saved_states;

CON_NAME             INSTANCE_NAME        STATE
-------------------- -------------------- --------------
PDB1                 cdb1                 OPEN


Restartando o CDB:

[oracle@oracle01 ~]$ sqlplus / as sysdba

SQL*Plus: Release 12.1.0.2.0 Production on Mon Sep 8 16:36:35 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> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> startup
ORACLE instance started.

Total System Global Area 626327552 bytes
Fixed Size 2291472 bytes
Variable Size 276826352 bytes
Database Buffers 339738624 bytes
Redo Buffers 7471104 bytes
Database mounted.
Database opened.

SQL> SELECT name, open_mode FROM v$pdbs;

NAME                           OPEN_MODE
------------------------------ ----------
PDB$SEED                       READ ONLY
PDB1 
                          READ WRITE
PDB2 
                          MOUNTED
PDB3 
                          MOUNTED

Para descartar o estado atual:

ALTER PLUGGABLE DATABASE pdb1 DISCARD STATE;

[oracle@oracle01 ~]$ sqlplus / as sysdba

SQL*Plus: Release 12.1.0.2.0 Production on Mon Sep 8 16:38:37 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> SELECT con_name, instance_name, state FROM dba_pdb_saved_states;

no rows selected


Referências:



Abraço,

Alex Zaballa.

quinta-feira, 4 de setembro de 2014

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.