quarta-feira, 16 de outubro de 2013

Utilizando o “datapump” com a opção de compactação


A partir da versão 10g, com a criação da ferramenta “datapump”, para realizar a importação e exportação do banco de dados, o DBA conta com algumas facilidades que aumentaram a produtividade na geração de arquivos de “dump”.

 

Neste artigo vamos demonstrar a utilização da compactação durante a geração do arquivo de “dump”.

 

Existem dois métodos para a geração de “dump”:

 

1º Método

 

Método também pode ser utilizado em versões anteriores, quando só existia o utilitário “export” (exp).

 

Exportar o “schema” usando o utilitário “datapump” (expdp).

 

$ expdp / schemas=scott dumpfile=test.dmp logfile=test.log

 

Export: Release 11.2.0.1.0 - Production on Wed Oct 2 15:54:08 2013

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,

Data Mining and Real Application Testing options

FLASHBACK automatically enabled to preserve database integrity.

Starting "OPS$ORACLE"."SYS_EXPORT_SCHEMA_02": /******** schemas=scott dumpfile=test.dmp logfile=test.log

Estimate in progress using BLOCKS method...

Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA

Total estimation using BLOCKS method: 20 MB

Processing object type SCHEMA_EXPORT/USER

Processing object type SCHEMA_EXPORT/SYSTEM_GRANT

Processing object type SCHEMA_EXPORT/ROLE_GRANT

Processing object type SCHEMA_EXPORT/DEFAULT_ROLE

Processing object type SCHEMA_EXPORT/TABLESPACE_QUOTA

Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA

Processing object type SCHEMA_EXPORT/TABLE/TABLE

. . exported "SCOTT"."TABLE_01"                          1.036 MB   15105 rows

. . exported "SCOTT"."TABLE_02"                          1.036 MB   15105 rows

. . exported "SCOTT"."TABLE_03"                          1.036 MB   15105 rows

. . exported "SCOTT"."TABLE_04"                          1.036 MB   15105 rows

. . exported "SCOTT"."TABLE_05"                          1.036 MB   15105 rows

. . exported "SCOTT"."TABLE_06"                          1.036 MB   15105 rows

. . exported "SCOTT"."TABLE_07"                          1.036 MB   15105 rows

. . exported "SCOTT"."TABLE_08"                          1.036 MB   15105 rows

. . exported "SCOTT"."TABLE_09"                          1.036 MB   15105 rows

. . exported "SCOTT"."TABLE_10"                          1.036 MB   15105 rows

Master table "OPS$ORACLE"."SYS_EXPORT_SCHEMA_02" successfully loaded/unloaded

******************************************************************************

Dump file set for OPS$ORACLE.SYS_EXPORT_SCHEMA_02 is:

  /home/oracle/exp/test.dmp

Job "OPS$ORACLE"."SYS_EXPORT_SCHEMA_02" successfully completed at 15:54:25

 

 

Tamanho do arquivo gerado, sem compactação: 11.169.792 (11 MB).

 

 

Após a geração do arquivo, deve-se compactar o arquivo de “dump”, utilizando comandos do sistema operacional (para esse exemplo foi utilizado o utilitário “gzip”).

 

$ gzip test.dmp

 

Tamanho do arquivo compactado: 1.485.207 (1.4 MB).

 

 

2º Método

 

Exportar os dados utilizando, a opção “COMPRESSION”.

 

$ expdp / schemas=scott dumpfile=test.dmp logfile=test.log compression=all

 

Export: Release 11.2.0.1.0 - Production on Wed Oct 2 16:03:25 2013

 

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

 

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,

Data Mining and Real Application Testing options

FLASHBACK automatically enabled to preserve database integrity.

Starting "OPS$ORACLE"."SYS_EXPORT_SCHEMA_02":  /******** schemas=scott dumpfile=test.dmp logfile=test.log compression=all

Estimate in progress using BLOCKS method...

Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA

Total estimation using BLOCKS method: 20 MB

Processing object type SCHEMA_EXPORT/USER

Processing object type SCHEMA_EXPORT/SYSTEM_GRANT

Processing object type SCHEMA_EXPORT/ROLE_GRANT

Processing object type SCHEMA_EXPORT/DEFAULT_ROLE

Processing object type SCHEMA_EXPORT/TABLESPACE_QUOTA

Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA

Processing object type SCHEMA_EXPORT/TABLE/TABLE

. . exported "SCOTT"."TABLE_01"                          129.7 KB   15105 rows

. . exported "SCOTT"."TABLE_02"                          129.7 KB   15105 rows

. . exported "SCOTT"."TABLE_03"                          129.7 KB   15105 rows

. . exported "SCOTT"."TABLE_04"                          129.7 KB   15105 rows

. . exported "SCOTT"."TABLE_05"                          129.7 KB   15105 rows

. . exported "SCOTT"."TABLE_06"                          129.7 KB   15105 rows

. . exported "SCOTT"."TABLE_07"                          129.7 KB   15105 rows

. . exported "SCOTT"."TABLE_08"                          129.7 KB   15105 rows

. . exported "SCOTT"."TABLE_09"                          129.7 KB   15105 rows

. . exported "SCOTT"."TABLE_10"                          129.7 KB   15105 rows

Master table "OPS$ORACLE"."SYS_EXPORT_SCHEMA_02" successfully loaded/unloaded

******************************************************************************

Dump file set for OPS$ORACLE.SYS_EXPORT_SCHEMA_02 is:

  /home/oracle/exp/test.dmp

Job "OPS$ORACLE"."SYS_EXPORT_SCHEMA_02" successfully completed at 16:03:42

 

 

Tamanho do arquivo gerado: 1.421.312 (1.4 MB).

 

Abaixo seguem os tamanhos dos arquivos gerados para os testes.

 

Tamanho dos arquivos gerados:   sem a cláusula “compression”: 11.169.792 (11 MB).

com a cláusula “compression”: 1.421.312 (1.4 MB).

 

Tamanho dos arquivos gerados:   com o utilitário (gzip) : 1.485.207 (1.4 MB).

com a cláusula “compression”: 1.421.312 (1.4 MB).

 

IMPORTANTE: Entre o 1º e o 2º método, após a compactação, os tamanhos dos arquivos são bem próximos. A cláusula “COMPRESSION” além de gerar um arquivo menor, também torna mais produtivo a geração do arquivo de “dump”, dispensando a necessidade de compactação posterior. Outro fator importante é que a utilização da cláusula “COMPRESSION” mantém o desempenho da exportação dos dados.

 

                       Para a execução da importação dos dados quando utiliza-se a cláusula “COMPRESSION”, basta somente executar o comando (impdp), diretamente, sem a necessidade de descompactação do arquivo.

 

 

Informações adicionais sobre a cláusula “COMPRESSION”.


Funcionalidade: Especifica se haverá compressão dos dados antes de gravar no arquivo de “dump”.

 
Sintaxe:
COMPRESSION = {ALL | DATA_ONLY | METADATA_ONLY | NONE}

Onde:

 

ALL

Compacta toda a operação de exportação (metadado e dados).

DATA_ONLY

Compacta somente os dados que estão sendo gravados no arquivo dedump” gerado.

METADATA_ONLY

Compacta somente os metadados que estão sendo gravados no arquivo de “dump” – Valor “DEFAULT” da cláusula “COMPRESSION”.

NONE

Desabilita a compresssão para a operação de exportação.

 

RESTRIÇÕES: Para fazer uso completo de todas estas opções de compressão, o parâmetro de inicialização COMPATIBLE deve estar definido como o valor 11.0.0.

 


Referências: Oracle® Database Utilities 11gR2 (11.2)
                    Oracle® Database Administrator´s Guide 11gR2 (11.2)




MSc. Rubens Oliveira
DBA Oracle Consultor

terça-feira, 1 de outubro de 2013

Armazenando comandos do sistema operacional usando tabelas externas


Apartir do Oracle 11g, é possível utilizar tabelas externas, para armazenar resultados de qualquer comando executado no sistema operacional.

 

Para demonstrar esta possibilidade, abaixo criamos um “script shell” que basicamente, executa o comando do sistema operacional “mpstat”. Em seguida será possível consultar o comando a partir do banco de dados.

Criando o “script shell” mpstat.sh.

$ vi mpstat.sh

 

#Conteudo do script shell.

#

#!/bin/ksh

/usr/bin/mpstat

 

Criando o arquivo "mpstat.txt".

 

$ touch mpstat.txt

 

Criando os diretórios.

 

SQL> CREATE DIRECTORY LOAD_DIR AS '/home/oracle';

 

Directory created.

 

 

SQL> CREATE DIRECTORY EXECDIR AS '/home/oracle';

 

Directory created.

 

 

Criando a tabela CPU_BOTTLENECKS.

 

SQL> CREATE TABLE CPU_BOTTLENECKS

  2  (

  3  HORA         char(15),

  4  CPU          char(10),

  5  USERS        char(10),

  6  NICE         char(10),

  7  SYS          char(10),

  8  IOWAIT       char(10),

  9  IRQ          char(10),

 10  SOFT         char(10),

 11  STEAL        char(10),

 12  IDLE         char(10),

 13  INTRS        char(10)

 14  )

 15  ORGANIZATION EXTERNAL

 16  (

 17      TYPE ORACLE_LOADER

 18      DEFAULT DIRECTORY LOAD_DIR

 19      ACCESS PARAMETERS

 20      (

 21         RECORDS DELIMITED BY NEWLINE

 22         preprocessor execdir:'mpstat.sh'

 23         SKIP 3

 24      LOAD WHEN (HORA != BLANKS)

 25      FIELDS

 26         (

 27        HORA         POSITION (01:12),

 28        CPU          POSITION (13:16),

 29        USERS        POSITION (19:24),

 30        NICE         POSITION (27:32),

 31        SYS          POSITION (36:40),

 32        IOWAIT       POSITION (41:48),

 33        IRQ          POSITION (53:57),

 34        SOFT         POSITION (58:61),

 35        STEAL        POSITION (65:71),

 36        IDLE         POSITION (75:80),

 37        INTRS        POSITION (83:90)

 38         )

 39      )

 40  LOCATION ('mpstat.txt')

 41  )

 42  REJECT LIMIT UNLIMITED

 43  /

 

Table created.

 

 

Note que para a tabela externa executar o “script shell” (mpstat.sh) deve-se colocar a cláusula abaixo:

 
preprocessor execdir:'mpstat.sh'


Esta cláusula executa o “script shell”, no diretório criado (EXEC_DIR) e a  tabela externa acessa o arquivo “mpstat.txt”  que foi especificado no diretório (
LOAD_DIR).

 

Importante lembrar que o arquivo “mpstat.txt” apresenta o resultado do comando executado pelo “script shell”.

 

Portanto, o efeito apresentado é que a tabela externa não o arquivo de entrada especificado “mpstat.txt”, mas sim a saída do script shell “mpstat.sh”.


Ao selecionarmos a tabela externa, veremos o resultado do comando “mpstat”, conforme demonstrado abaixo:

 


SQL> select * from CPU_BOTTLENECKS;


HORA        CPU  USERS  NICE  SYS  IOWAIT  IRQ  SOFT  STEAL  IDLE    INTRS
----------- --- ------ ----- ---- ------- ---- ----- ------ ----- --------
02:22:04 PM all   3.01  0.00 0.78    1.18 0.04     0    0.0 94.53  2001.64


Comando executado via sistema operacional.

SQL> !mpstat

Linux 2.6.18-194.3.1.el5 (servteste)       09/20/2013

02:22:07 PM CPU  %user %nice   %sys  %iowait  %irq   %soft  %steal   %idle    intr/s
02:22:07 PM all   3.01  0.00   0.78     1.18  0.04    0.46    0.00   94.53   2001.64


Portanto agora com um pouco de criatividade é possível retirar várias informações do sistema operacional e armazená-los no banco de dados.

Referência : Oracle® Database Concepts 11gR2 (11.2)
                   Oracle® Database Administrator´s Guide 11gR2 (11.2)




MSc. Rubens Oliveira
DBA Oracle Consultor