Olá pessoal,
Neste post vou mostrar como utilizar a compressão de dados BASIC no Data Pump, utilizando um parâmetro novo no Oracle 12c, suas vantagens e desvantagens, e os cuidados que precisamos tomar com licenciamento antes de usá-lo.
Na empresa em que trabalho, recentemente migramos os ambientes de Bancos de Dados de homologação e desenvolvimento para a versão 12cR2, e desde então comecei a estudar mais a fundo alguns recursos novos que parecem ser interessantes para nós. Entre eles fui entender melhor o que são os algoritmos de compressão do Data Pump, que nasceram na versão 12c, e que podem ser utilizados através do novo parâmetro COMPRESSION_ALGORTHM.
Compressão no Data Pump está presente no Oracle desde a versão 10G, porém ela efetuava compressão somente de metadados (COMPRESSION=METADATA_ONLY). No 11G foi criada a opção para compressão também de dados e o parâmero COMPRESSION que passou a aceitar os seguintes valores: NONE (desabilita compressão), METADATA_ONLY (somente metadados, valor padrão), DATA_ONLY (somente dados, requer option Advanced Compression) e ALL (dados + metadados, requer option Advanced Compression). No 12C a compressão foi estendida para permitir escolher 1 entre 4 opções de compressão:
- Compressão básica (COMPRESSION_ALGORITHM=BASIC), que é o algoritmo padrão.
- Compressão baixa (COMPRESSION_ALGORITHM=LOW);
- Compressão média (COMPRESSION_ALGORITHM=MEDIUM);
- Compressão alta (COMPRESSION_ALGORITHM=HIGH).
- Compressão baixa (COMPRESSION_ALGORITHM=LOW);
- Compressão média (COMPRESSION_ALGORITHM=MEDIUM);
- Compressão alta (COMPRESSION_ALGORITHM=HIGH).
Quando li nos docs oficiais da Oracle que foi criada uma opção de compressão com o nome BASIC, fiquei contente, pois de início imaginei que ela pudesse ser gratuita (sem a necessidade de pagar pelo uso de uma option adicional) para uso no Oracle Database, visto que, já existem opções de compressão com o nome BASIC no nível de tabelas e também no nível de backups, e ambas não exigem licenciamento adicional da option "Advanced Compression". Pesquisei nos docs oficiais da option "Advanced Compression" no Oracle 12cR2 e não encontrei informações muito esclarecedoras sobre as questões de uso da compressão BASIC no Data Pump e a necessidade de licenciamento da referida option, mas isso ficou mais claro quando encontrei o link https://docs.oracle.com/database/121/SUTIL/GUID-F81B5F5F-9F40-4EB0-99B8-47C45179DE5E.htm#SUTIL4051 contendo informações sobre o uso do parâmetro COMPRESSION_ALGORITHM e a seguinte frase: "This feature requires that the Oracle Advanced Compression option be enabled" (ver Imagem 01).
Não fiquei muito contente ao ler a frase acima e achei muito estranho e confuso a Oracle começar a cobrar, somente na compressão do Data Pump, por um algoritmo com nome BASIC, então abri um SR no MOS e também entrei em contato por telefone/e-mail com o pessoal da Oracle que cuida dos contratos de licenciamento da empresa em que trabalho. Em ambos tive a mesma resposta, informando que era realmente necessário adquirir a option "Advanced Compression" para usar a compressão básica no Data Pump. Apesar das respostas não serem muito agradáveis, fiquei muito satisfeito com os esclarecimentos do Eder Couto (Consultor da Oracle), que me forneceu muitos detalhes sobre o assunto, cujos detalhes me fizeram tirar as minhas próprias conclusões do porquê da Oracle começar a cobrar somente agora pelo algoritmo BASIC. Quando ele foi criado para efetuar compressão de tabelas (a partir da versão 9iR2) e compressão de backups (a partir da versão 10G), não existia ainda uma option que cobrava por recursos de compressão de dados.
A option "Advanced Compression" foi criada a partir do Oracle 11GR1, então o que foi criado antes dela (ainda) permanece gratuito, mas a Oracle já está cobrando pelo que foi criado depois, como neste caso, a compressão BASIC no Data Pump! - É meu amigo, a Oracle está cada vez mais agressiva com relação aos preços e cobrança de seus produtos!
Para finalizar este artigo, seguem abaixo os resultados e conclusão de alguns testes que fiz utilizando paralelismo e a compressão BASIC para gerar o dump de um schema de testes que tinha 3 pequenas tabelas:
1- Gerando o dump com paralelismo e sem compressão:
expdp fabio@bd directory=DADOS dumpfile=expdp_fabio_sc_%u.dmp
logfile=expdp_fabio.log parallel=4
Export: Release 12.2.0.1.0 - Production on Mon Feb 26 13:51:31 2018
Copyright (c) 1982, 2017, Oracle and/or its affiliates. All rights reserved.
Password:
Connected to: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
Starting "FABIO"."SYS_EXPORT_SCHEMA_01": fabio/********@bd directory=DADOS dumpfile=expdp_fabio_sc_%u.dmp logfile=expdp_fabio_sc.log parallel=4
Processing object type SCHEMA_EXPORT/USER
Processing object type SCHEMA_EXPORT/ROLE_GRANT
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/PACKAGE/PACKAGE_BODY
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/SEQUENCE/SEQUENCE
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
. estimated "FABIO"."TAB1" 8.185 KB
. estimated "FABIO"."TAB2" 6.216 KB
. estimated "FABIO"."TAB3" 5.087 KB
Processing object type SCHEMA_EXPORT/STATISTICS/MARKER
Processing object type SCHEMA_EXPORT/TABLE/COMMENT
Processing object type SCHEMA_EXPORT/PACKAGE/PACKAGE_SPEC
Processing object type SCHEMA_EXPORT/FUNCTION/FUNCTION
Processing object type SCHEMA_EXPORT/PACKAGE/COMPILE_PACKAGE/PACKAGE_SPEC/ALTER_PACKAGE_SPEC
Processing object type SCHEMA_EXPORT/FUNCTION/ALTER_FUNCTION
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/DOMAIN_INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
. . exported "FABIO"."TAB1" 8.585 KB 50 rows
. . exported "FABIO"."TAB2" 6.429 KB 2 rows
. . exported "FABIO"."TAB3" 5.101 KB 1 rows
Master table "FABIO"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded
******************************************************************************
Dump file set for FABIO.SYS_EXPORT_SCHEMA_01 is:
/u01/dumps/expdp_fabio_sc_01.dmp
/u01/dumps/expdp_fabio_sc_02.dmp
/u01/dumps/expdp_fabio_sc_03.dmp
/u01/dumps/expdp_fabio_sc_04.dmp
Job "FABIO"."SYS_EXPORT_SCHEMA_01" successfully completed at Mon Feb 26 23:52:53 2018 elapsed 0 00:01:17
2- Gerando o dump com paralelismo e compressão BASIC:
expdp fabio@bd directory=DADOS dumpfile=expdp_fabio_%u.dmp
logfile=expdp_fabio.log parallel=4 COMPRESSION=ALL COMPRESSION_ALGORITHM=BASIC
Connected to: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
Starting "FABIO"."SYS_EXPORT_SCHEMA_01": fabio/********@bd directory=DADOS dumpfile=expdp_fabio_%u.dmp logfile=expdp_fabio.log parallel=4 COMPRESSION=ALL COMPRESSION_ALGORITHM=BASIC
Processing object type SCHEMA_EXPORT/ROLE_GRANT
Processing object type SCHEMA_EXPORT/USER
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/PACKAGE/PACKAGE_BODY
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Processing object type SCHEMA_EXPORT/SEQUENCE/SEQUENCE
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
. estimated "FABIO"."TAB1" 8.185 KB
. estimated "FABIO"."TAB2" 6.216 KB
. estimated "FABIO"."TAB3" 5.087 KB
Processing object type SCHEMA_EXPORT/TABLE/COMMENT
Processing object type SCHEMA_EXPORT/PACKAGE/PACKAGE_SPEC
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/FUNCTION/FUNCTION
Processing object type SCHEMA_EXPORT/PACKAGE/COMPILE_PACKAGE/PACKAGE_SPEC/ALTER_PACKAGE_SPEC
Processing object type SCHEMA_EXPORT/FUNCTION/ALTER_FUNCTION
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/STATISTICS/MARKER
Processing object type SCHEMA_EXPORT/TABLE/INDEX/DOMAIN_INDEX/INDEX
. . exported "FABIO"."TAB1" 5.507 KB 50 rows
. . exported "FABIO"."TAB2" 5.085 KB 2 rows
. . exported "FABIO"."TAB3" 4.75 KB 1 rows
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Master table "FPRADO"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded
******************************************************************************
Dump file set for FABIO.SYS_EXPORT_SCHEMA_01 is:
/u01/dumps/expdp_fabio_01.dmp
/u01/dumps/expdp_fabio_02.dmp
/u01/dumps/expdp_fabio_03.dmp
/u01/dumps/expdp_fabio_04.dmp
Job "FPRADO"."SYS_EXPORT_SCHEMA_01" successfully completed at Mon Feb 26 23:50:41 2018 elapsed 0 00:03:12
Comparando as 2 execuções acima, podemos verificar que em meus testes, o tempo de geração do dump sem compressão ficou quase 3 vezes (286%) mais rápido. Agora vamos comparar o tamanho dos dumps:
$ ll -trh
-rw-r--r-- 1 oracle oinstall 2.6K Feb 26 13:50 expdp_fabio.log
-rw-r----- 1 oracle oinstall 56K Feb 26 13:50 expdp_fabio_04.dmp
-rw-r----- 1 oracle oinstall 64K Feb 26 13:50 expdp_fabio_03.dmp
-rw-r----- 1 oracle oinstall 28K Feb 26 13:50 expdp_fabio_02.dmp
-rw-r----- 1 oracle oinstall 8.0K Feb 26 13:50 expdp_fabio_01.dmp
-rw-r----- 1 oracle oinstall 8.0K Mar 19 11:33 expdp_fabio_sc_04.dmp
-rw-r----- 1 oracle oinstall 328K Mar 19 11:33 expdp_fabio_sc_03.dmp
-rw-r----- 1 oracle oinstall 432K Mar 19 11:33 expdp_fabio_sc_02.dmp
-rw-r----- 1 oracle oinstall 228K Mar 19 11:33 expdp_fabio_sc_01.dmp
-rw-r--r-- 1 oracle oinstall 2.3K Mar 19 11:33 expdp_fabio_sc.log
Verificando acima o tamanho dos arquivos de dump das 2 execuções, podemos ver que o tamanho total dos arquivos de dump gerados sem compressão ficou igual a 996K, enquanto que, o tamanho total dos arquivos de dump gerados com compressão BASIC ficou igual a 156K, ou seja, o dump com compressão de dados ficou 6,38 X menor (638%).
Conclusão: apesar de termos que pagar o licenciamento de uma option adicional para usar a compressão BASIC no Data Pump, ela oferece uma ótima taxa de compressão que talvez valha a pena o investimento (análise isso, bote tudo na ponta do lápis), principalmente se você tiver VLDBs (very large DBs). Lembre-se também que recursos de compressão consomem mais CPU. Nos meus testes o tempo de geração dos dumps com compressão ficou quase 3 X maior, ou seja, piorou quase 3 X. Você também pode economizar não gastando com a option "Advanced Compression" e compactar os dumps de outras formas. Veja por exemplo os artigos Compressão de dumps do Oracle Data Pump e Como executar expdp com compressão de dados no Oracle 10g e 11g.
Por hoje é só!
Espero que você tenha gostado do conteúdo deste artigo!
Comentários e questões são sempre bem-vindos!
[]s
Fabio, valeu por esclarecer essa informação... A Oracle é muito confusa em termos de licenciamento e essa é mais uma prova. O pior é não poder limitar o uso de recursos de acordo com as options que nós efetivamente temos adquirido. Um desavisado pode estar usando essa feature sem saber que é parte do ACO. Mais um ótimo artigo, amigo. Bom trabalho!
ResponderExcluirMatheus, muito obrigado pelo feedback!
Excluir[]s
Puxa fabio... valeu pelas dicas. Nunca me passou pela cabeça por se tratar de algo q aparenta ser simples. Oracle sempre a surpreender. Agora vou ter mais cuidado. Obgado Fábio por partilhar conhecimentos
ResponderExcluirAdilson, licenciamento Oracle é tão complexo que o próprio pessoal da Oracle se confunde. Eles demoraram um pouco para me responder essas questões que fiz sobre a compressão BASIC no Data Pump.
Excluir[]s
Fabio boa noite, eu tenho um servidor oracle linux com um banco de dados produção e outro homologação os dois no mesmo servidor, o que muda é apenas a instancia, os dois tem as mesma estrutura, e dados, só que já tem uns dois meses que a base de homologação não é atualizada com os dados da produção, hoje rodei o seguinte export.
ResponderExcluirexpdp userid=\"/ as sysdba\" full=y dumpfile=base_yano.dmp logfile=logbase_yano.log flashback_time=systimestamp
isso na base de produção queria saber qual o comando para rodar na base homologação.
tem que excluir os dados homologação, tabelas, algos do tipo ou basta rodar o import pode me da uma força.
instancias:
PROD = PRODUÇÃO
HOM = HOMOLOGAÇÃO
Basta executar o import na homologação com algum comando similar a:
Excluirimpdp \"/ as sysdba\"@HOM full=Y directory=NOME__ORACLE_DIRECTORY dumpfile=base_yano.dmp logfile=impdp_logbase_yano.log