terça-feira, 10 de outubro de 2017

ODC Appreciation Day: Dois novos recursos do Oracle Data Pump 12c


This article is part of series that used to be called OTN Appreciation Day. Now, it is Oracle Developer Community Appreciation Day.


The ODC Appreciation Day was proposed by Tim Hall and you can find more information here:

https://oracle-base.com/blog/2017/09/25/odc-appreciation-day-2017-thanksodc/


Change Table Compression at Import


Em versões anteriores ao 12c, o Data Pump sempre realizava as importações utilizando as mesmas configurações de compressão que estavam presentes no processo de exportação. No 12c, ele foi aprimorado para permitir que você especifique um método de compressão no momento da importação, independentemente do método de compressão usado quando os dados foram exportados. Com isso, você pode comprimir ou descomprimir a tabela durante a importação.
Isto é possível devido à introdução de um novo parâmetro da cláusula TRANSFORM, chamado TABLE_COMPRESSION_CLAUSE.
Alguns valores permitidos:
  • NONE : Se for omitido, a tabela assume as características da tablespace.
  • NOCOMPRESS : Desativa a compressão da tabela.
  • COMPRESS : Habilita a compressão básica.
  • ROW STORE COMPRESS BASIC : O mesmo que o COMPRESS.
  • ROW STORE COMPRESS ADVANCED :  Habilita a compressão avançada, conhecida como OLTP compression.
  • COLUMN STORE COMPRESS FOR QUERY : Hybrid Columnar Compression (HCC) disponível no Exadata, ZFS storage appliances e Pillar Axiom Storage Systems.
  • COLUMN STORE COMPRESS FOR ARCHIVE : Hybrid Columnar Compression (HCC) disponível no Exadata, ZFS storage appliances e Pillar Axiom Storage Systems.
*Opções que contenham espaços em branco devem ser colocadas entre aspas simples ou duplas.
Iremos confirmar se a tabela de origem está com a compressão desativada:
[oracle@oracle01 ~]$ sqlplus / as sysdba
SQL*Plus: Release 12.1.0.2.0 Production on Fri Aug 8 11:26:52 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 owner,table_name,compression from dba_Tables where owner='HR' and table_name = 'EMPLOYEES';

OWNER                TABLE_NAME           COMPRESS
-------------------- -------------------- --------
HR                   EMPLOYEES            DISABLED 


Criando o diretório no banco de dados para realizar o export:
SQL> create directory dir_teste as '/tmp/zaballa';
 
Directory created.

Exportando a tabela que será usada para o import com transform=table_compression_clause:compress:
[oracle@oracle01 ~]$ expdp alex_zaballa dumpfile=hr_employees.dmp directory=dir_teste tables=hr.employees
 
Export: Release 12.1.0.2.0 - Production on Fri Aug 8 11:33:05 2014
 
Copyright (c) 1982, 2014, Oracle and/or its affiliates.  All rights reserved.
Password:
 
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
Starting "ALEX_ZABALLA"."SYS_EXPORT_TABLE_01": 
alex_zaballa/******** dumpfile=hr_employees.dmp directory=dir_teste tables=hr.employees
Estimate in progress using BLOCKS method...
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 64 KB
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/GRANT/OWNER_GRANT/OBJECT_GRANT
Processing object type TABLE_EXPORT/TABLE/COMMENT
Processing object type TABLE_EXPORT/TABLE/INDEX/INDEX
Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type TABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
Processing object type TABLE_EXPORT/TABLE/TRIGGER
Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Processing object type TABLE_EXPORT/TABLE/STATISTICS/MARKER
. . exported "HR"."EMPLOYEES"                            17.08 KB     107 rows
Master table "ALEX_ZABALLA"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded
******************************************************************************
Dump file set for ALEX_ZABALLA.SYS_EXPORT_TABLE_01 is:
  /tmp/zaballa/hr_employees.dmp
Job "ALEX_ZABALLA"."SYS_EXPORT_TABLE_01" successfully completed at Fri Aug 8 11:33:40 2014 elapsed 0 00:00:32

Importando a tabela e habilitando a compressão:
[oracle@oracle01 ~]$ impdp alex_zaballa directory=dir_teste dumpfile=hr_employees.dmp remap_schema=hr:alex_zaballa 
transform=table_compression_clause:compress
 
Import: Release 12.1.0.2.0 - Production on Fri Aug 8 12:07:48 2014
 
Copyright (c) 1982, 2014, Oracle and/or its affiliates.  All rights reserved.
Password:
 
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
Master table "ALEX_ZABALLA"."SYS_IMPORT_FULL_01" successfully loaded/unloaded
Starting "ALEX_ZABALLA"."SYS_IMPORT_FULL_01":  alex_zaballa/******** directory=dir_teste dumpfile=hr_employees.dmp 
remap_schema=hr:alex_zaballa transform=table_compression_clause:compress
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
. . imported "ALEX_ZABALLA"."EMPLOYEES"                  17.08 KB     107 rows
Processing object type TABLE_EXPORT/TABLE/GRANT/OWNER_GRANT/OBJECT_GRANT
Processing object type TABLE_EXPORT/TABLE/COMMENT
Processing object type TABLE_EXPORT/TABLE/INDEX/INDEX
Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type TABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
Processing object type TABLE_EXPORT/TABLE/TRIGGER
Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Processing object type TABLE_EXPORT/TABLE/STATISTICS/MARKER
Job "ALEX_ZABALLA"."SYS_IMPORT_FULL_01" successfully completed at Fri Aug 8 12:08:23 2014 elapsed 0 00:00:32

Podemos verificar que agora a tabela está com a compressão ativada:
SQL> select owner,table_name,compression from dba_Tables where owner='ALEX_ZABALLA' and table_name = 'EMPLOYEES';
 
OWNER                 TABLE_NAME           COMPRESS
-------------------- -------------------- --------
ALEX_ZABALLA          EMPLOYEES            ENABLED 


Change Table LOB Storage at Import


No 12c, podemos especificar o método de armazenamento de LOBs que será usado no Data Pump durante o processo de importação, independente de como foi realizado o export. Isto fornece um método simples que permite aos usuários migrar facilmente de BasicFile LOBs para SecureFile LOBs.
Isto é possível devido à introdução de um novo parâmetro da cláusula TRANSFORM, chamado LOB_STORAGE.
Alguns valores permitidos:
  • SECUREFILE : Os LOBS serão armazenados como SecureFiles.
  • BASICFILE : Os LOBS serão armazenados como BasicFiles.
  • DEFAULT : O armazenamento do LOB é determinado pelo banco de dados.
  • NO_CHANGE : O processo de importação irá utilizar as configurações criadas durante o processo de exportação.
Iremos criar uma tabela com um LOB do tipo BASICFILE:
SQL> CREATE TABLE HR.TABELA_TESTE
(coluna1 number(10),
coluna2  clob)
LOB (coluna2) STORE as BASICFILE TABLESPACE EXAMPLE;
 
Table created.


Iremos confirmar se o LOB da tabela de origem está como BASICFILE:
[oracle@oracle01 ~]$ sqlplus / as sysdba
 
SQL*Plus: Release 12.1.0.2.0 Production on Fri Aug 8 12:38:25 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 owner,table_name,tablespace_name,securefile from dba_lobs where 
owner='HR' and table_name='TABELA_TESTE';
 
OWNER                TABLE_NAME         TABLESPACE_NAME     SEC
-------------------- ------------------ ------------------- ---
HR                   TABELA_TESTE       EXAMPLE             NO 

Exportando a tabela que será usada para o import com transform=lob_storage:securefile:
[oracle@oracle01 ~]$ expdp alex_zaballa dumpfile=hr_tabela_teste.dmp directory=dir_teste tables=hr.tabela_teste
 
Export: Release 12.1.0.2.0 - Production on Fri Aug 8 12:33:03 2014
 
Copyright (c) 1982, 2014, Oracle and/or its affiliates.  All rights reserved.
Password:
 
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
Starting "ALEX_ZABALLA"."SYS_EXPORT_TABLE_01":  alex_zaballa/******** dumpfile=hr_tabela_teste.dmp 
directory=dir_teste tables=hr.tabela_teste
Estimate in progress using BLOCKS method...
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 0 KB
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Processing object type TABLE_EXPORT/TABLE/STATISTICS/MARKER
. . exported "HR"."TABELA_TESTE"                             0 KB       0 rows
Master table "ALEX_ZABALLA"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded
******************************************************************************
Dump file set for ALEX_ZABALLA.SYS_EXPORT_TABLE_01 is:
  /tmp/zaballa/hr_tabela_teste.dmp
Job "ALEX_ZABALLA"."SYS_EXPORT_TABLE_01" successfully completed at Fri Aug 8 12:33:51 2014 elapsed 0 00:00:43


Importando a tabela e habilitando o armazenamento do LOB em SECUREFILE:
[oracle@oracle01 ~]$ impdp alex_zaballa directory=dir_teste dumpfile=hr_tabela_teste.dmp 
remap_schema=hr:alex_zaballa transform=lob_storage:securefile
 
Import: Release 12.1.0.2.0 - Production on Fri Aug 8 12:41:09 2014
 
Copyright (c) 1982, 2014, Oracle and/or its affiliates.  All rights reserved.
Password:
 
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
Master table "ALEX_ZABALLA"."SYS_IMPORT_FULL_01" successfully loaded/unloaded
Starting "ALEX_ZABALLA"."SYS_IMPORT_FULL_01":  alex_zaballa/******** directory=dir_teste 
dumpfile=hr_tabela_teste.dmp remap_schema=hr:alex_zaballa transform=lob_storage:securefile
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
. . imported "ALEX_ZABALLA"."TABELA_TESTE"                   0 KB       0 rows
Processing object type TABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Processing object type TABLE_EXPORT/TABLE/STATISTICS/MARKER
Job "ALEX_ZABALLA"."SYS_IMPORT_FULL_01" successfully completed at Fri Aug 8 12:41:36 2014 elapsed 0 00:00:22


Podemos verificar que agora o LOB da tabela está armazenado como SECUREFILE:
SQL> select owner,table_name,tablespace_name,securefile from dba_lobs where 
owner='ALEX_ZABALLA' and table_name='TABELA_TESTE';
 
OWNER                TABLE_NAME          TABLESPACE_NAME      SEC
-------------------- ------------------- -------------------- ---
ALEX_ZABALLA         TABELA_TESTE        EXAMPLE              YES 

terça-feira, 1 de agosto de 2017

How to force a sql_id to use a plan_hash_value using SQL Baselines

Olá pessoal,

Hoje pela manhã um cliente me ligou dizendo que estava com uma carga anormal no banco de dados.

Após verificar, vi que o SQL ID b6hd1bvsg59wr era responsável por 80% da carga do banco.

A primeira coisa foi verificar se ocorreu alguma mudança no plano de execução e quando ocorreu:



Usando o SQL abaixo, verifiquei que o novo plano foi criado no dia 31/7 às 16:45hrs:


O tempo médio de execuçao do PLAN_HASH_VALUE 2669208802 é de 63 segundos:


Enquanto o plano antigo era de apenas 4s.

Como as estatísticas estavam atualizadas, minha idéia inicial foi utilizar um SQL PLAN BASELINE e fixar o melhor plano de execução até ter tempo de otimizar e analisar melhor o SQL em questão.

Para fazer isso, segue o script utilizado:

BEGIN
  DBMS_SQLTUNE.DROP_SQLSET(
    sqlset_name => 'MySTS');
END;
/

BEGIN
  DBMS_SQLTUNE.CREATE_SQLSET(
    sqlset_name => 'MySTS',
    description => 'SQL Tuning Set SQL I_ID b6hd1bvsg59wr');
END;
/

DECLARE
  cur sys_refcursor;
BEGIN
  OPEN cur FOR
    SELECT VALUE(P)
    FROM TABLE(
       dbms_sqltune.select_workload_repository(begin_snap=>13089, end_snap=>13090,basic_filter=>'sql_id = ''b6hd1bvsg59wr''',attribute_list=>'ALL')
              ) p;
     DBMS_SQLTUNE.LOAD_SQLSET( sqlset_name=> 'MySTS', populate_cursor=>cur);
  CLOSE cur;
END;
/

DECLARE
my_plans pls_integer;
BEGIN
  my_plans := DBMS_SPM.LOAD_PLANS_FROM_SQLSET(
    sqlset_name => 'MySTS', 
    basic_filter=>'plan_hash_value = ''368739152'''
    );
END;

SELECT * FROM dba_sql_plan_baselines order by created desc;


Após isso é necessário fazer o FLUSH do plano antigo da shared pool em todos nós do RAC:

select inst_id,ADDRESS, HASH_VALUE from gV$SQLAREA where SQL_ID like 'b6hd1bvsg59wr%';

exec dbms_shared_pool.purge('0000001C39C45688, 4042434455','C');
exec dbms_shared_pool.purge('0000001D0F7769C0, 4042434455','C');


quarta-feira, 26 de julho de 2017

ENQ: JS - WDW OP

Olá pessoal,

Um cliente reclamou que alguns relatórios não haviam sido gerados na madrugada.

Ao verificar o banco, vi que nenhum sheduler job havia sido disparado durante a noite.

O banco estava com diversos eventos "ENQ: JS - WDW OP"

Achei no My Oracle Support a seguinte nota: Jobs are not being executed by DBMS_SCHEDULER, CJQ WAITING FOR 'ENQ: JS - WDW OP' (Doc ID 564957.1)

Porém fala que afeta apenas a versão 10g: "Oracle Database - Enterprise Edition - Version 10.2.0.1 to 10.2.0.3"

Resolvi seguir mesmo assim o procedimento: "Kill the CJQ0 process at the operating system level."

ps -aef |grep -i CJQ0
kill -9 PID

Problema resolvido :)

quinta-feira, 22 de junho de 2017

GUOB TECH DAY 2017 - LAD OTN TOUR - BRASIL - Cupom de Desconto

Aproveite o cupom de desconto de 15% sobre o valor da inscrição. 
Código do Cupom: EU_VOU_GUOB
Valido até 23/06 para as primeiras 30 inscrições pagas.

https://guobtechday2017.eventize.com.br/index.php?pagina=1



terça-feira, 13 de junho de 2017

Oracle Code São Paulo - 2017 - I'm speaking


   O Oracle Code é um evento gratuito para que desenvolvedores tenham acesso e aprendam sobre as últimas tecnologias, práticas e tendências de desenvolvimento. Assista a palestras e ouça novidades de especialistas e líderes do mercado em keynotes e sessões especializadas de conteúdo, e pratique o que há de mais inovador em workshops! Experimente a tecnologia de desenvolvimento na nuvem da Oracle no Code Lounge e participe de demonstrações e experimentações ao vivo.

Minha sessão será às 14:10hrs:


**Apesar de possuir o mesmo título de uma palestra que fiz no DBA BRASIL 1.0 e no GUOB de 2016, essa é a versão 2 e foi completamente reestruturada.


Inscreva-se: https://developer.oracle.com/code/sao-paulo

quinta-feira, 8 de junho de 2017

GUOB TECH DAY 2017: veja quem vai estar no evento. Inscreva ainda hoje. 05/08 em São Paulo



Serão 5 salas simultâneas, mais um Auditório, com algumas das maiores referências do planeta em diversas tecnologias Oracle, mais aquele belo Café e Networking que você respeita.

Arup Nanda, Mike Dietrich (Blog Upgrade), Craig Shallahamer (do OraPub), Alex Gorbachev (CTO da Pythian), Alex Zaballa (da Enkitec, tem umas certificações!!!), Wagner Bianchi (MySQL), Airton Lastori (MySQL), entre muitos outros estarão no maior GUOB Tech Day realizado até hoje.

Este também será o GUOB com a maior quantidade de Palestras feitas por brasileiros. Muitos palestrantes conhecidos na grade. Confere na agenda pois é muita gente.


Não perca tempo. Inscreva-se ainda hoje.


domingo, 14 de maio de 2017

DBA Brasil 2.0 – Review

Olá pessoal,

Participei do evento DBA Brasil 2.0, que ocorreu em São Paulo no dia 06 Maio de 2017.

Local do Evento:




A primeira pelestra que assisti foi com o Matheus Boesing "Oracle Database Backup Service: Backup de Banco de Dados On-Premise para Cloud"


A segunda foi com o Rodrigo de Araujo Jorge "Protegendo o seu BD Oracle com autenticação em 2 etapas"



A terceira foi com o Ricardo Rezende "Big Data: A nova onda"


Após o almoço palestrei sobre Oracle SQL Tuning


A úiltima do dia "Tibero 6, maximizando desempenho e eficiência através de arquitetura Hyper Thread" 


Encerramento:



Album de fotos do evento: https://www.facebook.com/pg/DBABrasil2.0/photos/

Download da minha palestra: https://www.slideshare.net/AlexZaballa1/oracle-sql-tuning-75754947













sexta-feira, 14 de abril de 2017

Collaborate 17 - Review

Olá pessoal,

Participei do evento Collaborate17, que ocorreu em Las Vegas de 02 à 06/04.

Hotel do Evento:


Credenciamento:




Domingo

 SQL Tunning workshop com Mauro Pagano e Dimas Chbane:



Segunda

Oracle Real Application Clusters 12c Release 2 Best Practices



Transforming Data Management with Oracle Database 12c Release 2





The Best Oracle Database 12c & 12cR2 New Features



Uma das melhores palestras do evento com o Mike Dietrich "Best Practice to Ensure Performance Stability after a Database Upgrade"






Cardinality Feedback: What is it? Friend or Foe?


Oracle ACE Dinner



Terça

Minha sessão foi a primeira da manhã "Moving your Oracle Databases to the Oracle Cloud"




Stop Guessing, Start Analyzing: New Analytic View Features in Oracle Database 12cR2


 Laugh Your Way To Understanding Oracle, Queuing Theory & Performance


Full Table Scan: Friend or Foe? (#IOUGeniusPerformance)


Uma das melhores palestras do evento, com Markus Michalewicz "Under the Hood of Oracle Real Application Clusters (RAC) 12c Release 2"



Quarta

RMAN in Oracle Database 12c - Top New Features


Adapting to Adaptive Plans on 12c



Tips and Best Practices for DBAs (#IOUGeniusPerformance)


OakTable World - Chasing the Optimizer



Quinta

Oracle Maximum Availability Architecture for the Cloud


Innovation, the Oracle Cloud, Big Data and the Internet of Things 


Sexta

Na sexta-feira estive em Dallas, no escritório da Enkitec



Abraço

Alex Zaballa