segunda-feira, 28 de abril de 2014

domingo, 27 de abril de 2014

12c - Statistics During Loads

No Oracle Database 12c, foi introduzida uma nova feature, Online Statistics Gathering for Bulk Loads.

O banco de dados irá coletar estatísticas automaticamente das tabelas durante os seguintes tipos de operações bulk load:

  • CREATE TABLE AS SELECT

  • INSERT INTO ... SELECT into an empty table using a direct path insert

Por padrão, parallel inserts usam direct path insert. Podemos forçar o direct path insert usando o hint  / * + APPEND * /.

Lembrando que ao coletar as estatísticas, o banco de dados não irá gerar histograms e nem coletar estatísticas para índices existentes. Para isso é necessário utilizar o DBMS_STATS.

Para a criação de índices, desde a versão 10G o Oracle automaticamente coleta as estatísticas do índice após a sua criação.

Para voltar a ter o comportamento anterior à release 12c e não coletar as estatísticas, podemos utilizar o hint NO_GATHER_OPTIMIZER_STATISTICS.




SQL> create table tabela_teste
(
coluna1 number,
coluna2 number
);
Table created.

SQL> begin
for i in 1..1000
loop
insert into tabela_teste values(i, i);
end loop;

commit;
end;
/
PL/SQL procedure successfully completed.

SQL> select count(*) from tabela_teste;
COUNT(*)
----------
1000


Podemos verificar que não existem estatísticas, pois foi um insert normal:

SQL> select table_name, num_rows, last_analyzed from user_tables where table_name='TABELA_TESTE';

TABLE_NAME                     NUM_ROWS   LAST_ANALYZED
------------------------------ ---------- -------------
TABELA_TESTE


Agora utilizando CTAS:

SQL> create table tabela_teste2 as select * from tabela_teste;
Table created.

SQL> select table_name, num_rows, last_analyzed from user_tables where table_name='TABELA_TESTE2';

TABLE_NAME                     NUM_ROWS   LAST_ANALYZED
------------------------------ ---------- -------------
TABELA_TESTE2                  1000       16-APR-14




Utilizando direct path insert:

SQL> create table tabela_teste3
(
  coluna1 number,
  coluna2 number
);
Table created.
 
SQL> insert /*+ APPEND */ into tabela_teste3 select object_id,object_id from user_objects where rownum < 30;
25 rows created.
 
SQL> select table_name, num_rows, last_analyzed from user_tables where table_name='TABELA_TESTE3';
 
TABLE_NAME                           NUM_ROWS         LAST_ANALYZED
------------------------------       ----------        -------------
TABELA_TESTE3                               25         16-APR-14 10:20:00
 
 

Quando a tabela não está vazia, as estatísticas não são atualizadas:

SQL> insert /*+ APPEND */ into tabela_teste3 select object_id,object_id from user_objects where rownum < 30;
25 rows created.

SQL> select table_name, num_rows, last_analyzed from user_tables where table_name='TABELA_TESTE3';

TABLE_NAME                     NUM_ROWS   LAST_ANALYZED
------------------------------ ---------- -------------
TABELA_TESTE3 25               16-APR-14  10:20:00


Verificando o plano de execução:

SQL> explain plan for
create table tabela_teste4 as select * from tabela_teste;

Explained.

SQL> select * from table(dbms_xplan.display(null, null, 'BASIC'));

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 1183779688

------------------------------------------------------------------
| Id | Operation | Name |
------------------------------------------------------------------
| 0 | CREATE TABLE STATEMENT | |
| 1 | LOAD AS SELECT | TABELA_TESTE2 |
| 2 | OPTIMIZER STATISTICS GATHERING | |
| 3 | TABLE ACCESS FULL | TABELA_TESTE |
------------------------------------------------------------------

10 rows selected.



Obtendo informações sobre a coleta automática de estatísticas:

SQL> select table_name, column_name, num_distinct, notes from user_tab_col_statistics where table_name = ('TABELA_TESTE3');

TABLE_NAME           COLUMN_NAME          NUM_DISTINCT NOTES
-------------------- -------------------- ------------ ------------------------------
TABELA_TESTE3        COLUNA1              25            STATS_ON_LOAD
TABELA_TESTE3        COLUNA2              25            STATS_ON_LOAD


Para restrições na coleta automática, consultar a referência abaixo.


Referências:



Abraço,


Alex Zaballa

sábado, 19 de abril de 2014

12c - Last Successful Login Time in SQL*Plus

No Oracle Database 12c, foi introduzida uma nova funcionalidade no utilitário SQL*Plus, o Last Successful Login Time in SQL*Plus.

SQL*Plus do Oracle Database 12c adicionou uma informação na tela login, agora por default, é mostrada a última data e hora de login do usuário.


[oracle@oracle01]$ sqlplus scott/tiger
 
SQL*Plus: Release 12.1.0.1.0 Production on Thu Mar 27 16:23:55 2014
 
Copyright (c) 1982, 2013, Oracle.  All rights reserved.
 
Last Successful login time: Wed Mar 26 2014 16:02:23 +01:00
 
Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Advanced Analytics
and Real Application Testing options
 

Essa informação também pode ser obtida na view DBA_USERS:

SQL> select username,last_login
from dba_users
where username = 'SCOTT';

USERNAME        LAST_LOGIN
--------------- -------------------------
SCOTT           27.03.2014 16:23:56




Para inibir isso, basta utilizar a opção nologintime:

[oracle@oracle01 tmp]$ sqlplus -nologintime scott/tiger

SQL*Plus: Release 12.1.0.1.0 Production on Thu Mar 27 16:26:40 2014

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

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

SQL>



Referências:


Abraço

Alex Zaballa

quarta-feira, 16 de abril de 2014

Sql*Plus no Mac OS

http://ronr.blogspot.com/2013/02/oracle-client-11gr2-11203-for-apple-mac.html

segunda-feira, 7 de abril de 2014

Collaborate 14 - Review

Esta semana, estive participando do evento Collaborate 14  que ocorreu em Las Vegas de 07/04 à 11/04.

As opções para inscrição no evento, eram pelo OAUG, IOUG e Quest. Como não encontrei nenhuma diferença, acabei fazendo minha inscrição pelo OAUG. 
Um dia antes do evento, fiquei sabendo que deveria ter feito pelo IOUG, devido as pre-conferences oferecidas pelo IOUG e somente disponíveis para quem estava inscrito por esse user group. 
Felizmente isso não foi um grande problema, pois consegui alterar para o IOUG no credenciamento e consegui participar do Rac Attack 12c.


Chegada no aeroporto de Las Vegas:



Como o hotel do evento estava lotado, fiquei hospedado no "The Mirage", que fica em frete:


The Venetian (Hotel onde ocorre o evento):


No domingo à noite (06/04), fui a um PUB chamado Public House no Venetian com o pessoal do Rac Attack:



Segunda-Feira

Credenciamento:




No primeiro dia (segunda-feira) participei o Rac Attack 12c:




Oracle ACE Dinner :



Terça-Feira

Na terça-feira, meu dia iniciou com o Tom Kyte, falando sobre o in-memory:


A segunda foi sobre o Oracle Database 12c em ambientes Cloud e Big Data:


A terceira foi sobre Data Guard 12c:


A quarta foi novamente com o Tom Kyte falando sobre 24 novas funcionalidades presentes no 12c:




A quinta foi com o Leighton Nelson, falando sobre 10 features para DBAS no EM12c:


A sexta foi com a DbaKevlar sobre ASH e AWR:


A sétima foi um encontro do  Oracle RAC SIG:



Quarta-Feira

Na quarta-feira, comecei meu dia vendo a apresentação do Gustavo Rene Antunez:


A segunda, foi um Keynote da Oracle:



A terceira foi sobre patchs no Exadata:


A quarta sobre Hadoop, NoSQL e RDBMS:


A quinta foi com o Frits Hoogland:



A sexta foi um Keynote da IBM:



E a sétima sobre SSD:



Quinta-Feira

Na quinta-feira, meu dia começou com Dan Hotka, falando sobre algumas New Features do DB12c:


A segunda foi com Gustavo Rene Antunez, falando sobre Exadata:


A terceira foi uma sessão da OakTable com Kyle Haile sobre Agile Data :



A quarta foi sobre Flex ASM e Flex Cluster:



A quinta foi novamente uma sessão da OakTable, agora com Graham Wood falando sobre Real-World Peformance:



A sexta foi sobre New Features de Tuning no 12c:


Uma passada no estande da Pythian:


Sexta-Feira

Na sexta, meu dia iniciou com o Rene falando sobre o que existe de novo no RMAN 12c:

 

A segunda, foi com o Bobby Curtis falando sobre EM12c e Database 12c:



A terceira foi sobre RAC 12c + Multitenant:



Kay Yu:


E a última foi com o Arup Nanda:



E assim terminou minha participação no Collaborate 14.




Abraço
Alex Zaballa

terça-feira, 1 de abril de 2014

Criando um PDB com os Samples Schemas

http://horia-berca-oracledba.blogspot.com/2013/08/create-pdb-with-sample-schemas-in-db12c.html