Top Banner
1 ESCOLA SUPERIOR ABERTA DO BRASIL ESAB ADMINISTRAÇÃO DE SISTEMAS DE GERENCIAMENTO DE BANCO DE DADOS: ESTUDO DAS MELHORES PRÁTICAS NO ORACLE 12C Douglas Boff Nandi Pós-graduando em Engenharia de Sistemas na Escola Superior Aberta do Brasil ESAB. Hudson Ramos Mestre em Engenharia de Software. Resumo Neste artigo apresenta-se um levantamento bibliográfica com referências contemporâneas para o banco de dados Oracle 12c, bem como a realização de testes práticos de distintas cargas de dados, a fim de se obterem parâmetros que possam auxiliar a um desenvolvedor na escolha da melhor técnica para se implementar tal funcionalidade. Como metodologia, é realizada uma pesquisa exploratória com coleta de dados por meio da pesquisa bibliográfica e experimental no qual os dados coletados com os ensaios são apresentados e discutidos comparativamente. Com os resultados, pode-se observar os diferentes comportamentos das tecnologias de cargas de dados com os distintos cenários apresentados, o qual pode-se concluir que diferentes situações do dia-a-dia vão exigir diferentes técnicas de implementação, a fim de se obter o aproveitamento máximo dos recursos computacionais disponíveis. Palavras-chave: Oracle 12c. Melhorias SQL. Carga de Dados. 1 Introdução A crescente demanda pelo armazenamento de informações de maneira computacional torna a tarefa de administração eficiente destes dados um desafio. Com isto, não só fornecedores de Sistemas Gerenciadores de Banco de Dados (SGBD) vem buscando melhorias na arquitetura das suas soluções, como seus usuários vem buscando utilizar os recursos disponíveis da melhor forma possível. Dado o aumento da complexidade dos sistemas atuais, e o número de acessos concorrentes que é realizado de um sistema por diferentes operadores, os bancos de dados podem vir a se tornar um gargalo no processamento em situações de má utilização. E com o volume de dados em banco de dados cada vez maior, e maior informatização das empresas por diferentes sistemas, cada vez há mais a necessidade de realizar integrações de dados entre estes sistemas. Os dados entre os sistemas, muitas vezes, precisam serem
30

Artigo 92704 ESAB

Dec 18, 2015

Download

Documents

Laura Greene

Artigo 92704 ESAB Monografia e TCC
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
  • 1

    ESCOLA SUPERIOR ABERTA DO BRASIL ESAB

    ADMINISTRAO DE SISTEMAS DE GERENCIAMENTO DE BANCO DE

    DADOS: ESTUDO DAS MELHORES PRTICAS NO ORACLE 12C

    Douglas Boff Nandi Ps-graduando em Engenharia de Sistemas na Escola Superior

    Aberta do Brasil ESAB.

    Hudson Ramos Mestre em Engenharia de Software.

    Resumo

    Neste artigo apresenta-se um levantamento bibliogrfica com referncias contemporneas

    para o banco de dados Oracle 12c, bem como a realizao de testes prticos de distintas

    cargas de dados, a fim de se obterem parmetros que possam auxiliar a um desenvolvedor na

    escolha da melhor tcnica para se implementar tal funcionalidade. Como metodologia,

    realizada uma pesquisa exploratria com coleta de dados por meio da pesquisa bibliogrfica e

    experimental no qual os dados coletados com os ensaios so apresentados e discutidos

    comparativamente. Com os resultados, pode-se observar os diferentes comportamentos das

    tecnologias de cargas de dados com os distintos cenrios apresentados, o qual pode-se

    concluir que diferentes situaes do dia-a-dia vo exigir diferentes tcnicas de

    implementao, a fim de se obter o aproveitamento mximo dos recursos computacionais

    disponveis.

    Palavras-chave: Oracle 12c. Melhorias SQL. Carga de Dados.

    1 Introduo

    A crescente demanda pelo armazenamento de informaes de maneira computacional

    torna a tarefa de administrao eficiente destes dados um desafio. Com isto, no s

    fornecedores de Sistemas Gerenciadores de Banco de Dados (SGBD) vem buscando

    melhorias na arquitetura das suas solues, como seus usurios vem buscando utilizar os

    recursos disponveis da melhor forma possvel.

    Dado o aumento da complexidade dos sistemas atuais, e o nmero de acessos

    concorrentes que realizado de um sistema por diferentes operadores, os bancos de dados

    podem vir a se tornar um gargalo no processamento em situaes de m utilizao.

    E com o volume de dados em banco de dados cada vez maior, e maior informatizao

    das empresas por diferentes sistemas, cada vez h mais a necessidade de realizar integraes

    de dados entre estes sistemas. Os dados entre os sistemas, muitas vezes, precisam serem

  • 2

    integrados em tempo real para atendimento da necessidade dos usurios, enquanto outros

    dados uma espera de at uma semana pode ser aceitvel.

    Neste sentido, neste trabalho destina-se a apresentar um estudo e levantamento terico

    de boas prticas de administrao de dados, tais como otimizaes nas construes de SQLs,

    melhoria na parametrizao de ndices e otimizaes gerais para melhoria do desempenho de

    aplicaes e de cargas de dados que so comuns ao dia-a-dia dos usurios e administradores

    de bases de dados Oracle.

    Para o estudo terico sobre o Oracle 12c, foram apontadas diferentes bibliografias

    contemporneas, as quais buscam enfatizar as diferenas do mesmo com o seu antecessor, o

    Oracle 11g.

    A metodologia adotada para este artigo ser uma pesquisa exploratria com coleta de

    dados por meio de pesquisa bibliogrfica e experimental. O experimento ser realizado por

    meio de testes de carga de pequeno e mdio porte com os softwares Oracle 12c no ambiente

    Windows 8.1. Os resultados sero apresentados na forma de um quadro comparativo.

    2 Viso Aprofundada do Oracle 12c

    Neste captulo apresenta-se conceitos e tecnologias especficas do Oracle que sero

    utilizadas e sero base para entendimento dos experimentos.

    2.1 Arquitetura Multi-Inquilino

    A arquitetura da base de dados Oracle 12c Release 1 permite a configurao de vrias

    sub-bases de dados dentro de uma nica base de dados superior. Este conceito foi denominado

    de Continer de Base de Dados Multi-Inquilo (Multitenant Container Database ou

    Consolidated Database (CDB)) suporta at 252 sub-bases, intituladas como Banco de Dados

    Plugveis (Pluggable Database PDB) (LLEWELLYN, 2013) (ASHDOWN e KYTE,

    2014).

    Um PDB representa um conjunto de schemas, objetos schemas e objetos non-schema

    que so vistos pelas sesses via Oracle Net Client como sendo uma base non-CDB, ou seja,

    de forma convencional (ASHDOWN e KYTE, 2014). Na Figura 1 ilustra-se esta arquitetura.

  • 3

    Figura 1. Arquitetura CDB.

    Fonte: (LLEWELLYN, 2013).

    2.2 Gerenciamento de Usurios

    Em uma arquitetura CDB, possvel tanto criar usurios comuns quanto usurios

    locais (HUEY, 2014). O usurio comum, que deve ser nomeado com o prefixo C##, um

    usurio conhecido pela raiz e por toda as PDBs. Estes usurios conectam diretamente raiz, e

    podem possuir privilgios em um PDB. J o usurio local, que no pode ser nomeado com o

    prefixo C##, conhecido apenas em um PDB especfico.

    2.3 ndices

    Um ndice uma estrutura opcional que pode ser criado relacionando-se a uma ou

    mais colunas de uma tabela. Um ndice pode melhorar o desempenho da recuperao de

    dados. Quando processando uma requisio, o banco de dados verifica se possvel utilizar os

    ndices existentes de uma maneira eficiente. ndices so teis quando uma aplicao

    frequentemente acessa uma linha ou um grupo de linhas (ASHDOWN e KYTE, 2014).

    2.4 Diretrios

    Os diretrios correspondem ponte entre o banco de dados Oracle e leitura e escrita

    em arquivos do sistema operacional. Estes objetos provm uma camada de abstrao entre o

    usurio e o sistema operacional (WATSON, 2014).

    2.5 Estruturas de Armazenamento

    Uma das caractersticas de um RDBMS a independncia entre as estruturas fsicas e

    lgicas do banco de dados. Devido a esta independncia, possvel gerenciar as

  • 4

    configuraes de estrutura fsica sem afetar as estruturas lgicas, tornando a mudana

    transparente para o usurio do banco de dados (ASHDOWN e KYTE, 2014).

    Uma viso geral destes componentes fsicos e lgicos de armazenamento

    demonstrado na Figura 2 e detalhado nas subsees seguintes.

    Figura 2. Modelo de Armazenamento do Oracle 12c.

    Fonte: (ASHDOWN e KYTE, 2014).

    2.5.1 Tablespace

    uma unidade de armazenamento do banco de dados para agrupamento de estruturas

    lgicas, que contm muitos segmentos e muitos datafiles (ASHDOWN e KYTE, 2014),

    conforme demonstrado na Figura 3.

    Figura 3. Distribuio das estruturas lgicas por entre as estruturas de armazenamento fsicas e lgicas.

  • 5

    Fonte: (ASHDOWN e KYTE, 2014).

    2.5.2 Segmento

    Representa qualquer objeto do banco de dados que armazena dados e requer espao

    fsico. Os segmentos tpicos so ndices e tabelas. Um segmento deve pertencer a um nico

    tablespace, mas o tablespace pode ser dividido em vrios datafiles (ASHDOWN e KYTE,

    2014), conforme demonstrado na Figura 3.

    2.5.3 Extenso

    O gerenciamento bloco a bloco pode tornar-se uma tarefa rdua, por isto os blocos so

    agrupados em extenses. Uma extenso um conjunto de enumerados blocos Oracle

    pertencentes a um datafile. Cada segmento consiste em uma ou mais extenses, tambm

    enumeradas (ASHDOWN e KYTE, 2014).

    2.5.4 Bloco Oracle

    Representam a unidade de armazenamento lgico do Oracle o qual tem o tamanho

    definido, no momento da instalao, o valor padro de 8kb (ASHDOWN e KYTE, 2014). O

    relacionamento do Bloco Oracle com os demais componentes demonstrado na Figura 4.

    Figura 4. Segmentos, Extenses e Blocos do Oracle.

    Fonte: (ASHDOWN e KYTE, 2014).

  • 6

    2.5.5 Datafile

    um arquivo fsico no disco que criado pelo banco de dados Oracle, e contm dados

    e estruturas, tais como tabelas e ndices (ASHDOWN e KYTE, 2014).

    2.5.6 Blocos do Sistema Operacional

    Ao nvel fsico, os dados do banco de dados so armazenados no disco nas unidades de

    blocos do sistema operacional. Trata-se da unidade mnima de tamanho que o SO pode lidar

    atravs da leitura ou escrita (ASHDOWN e KYTE, 2014).

    2.6 Shared Pool

    A tecnologia Shared Pool do banco de dados Oracle pode armazenar e provisionar

    diferentes tipos de dados, incluindo blocos PL/SQL e SQL, a qual pode gerar benefcios. Se

    um comando SQL est no Shared Pool, parte da etapa de interpretao do comando omitida,

    onde as informaes ficam disponveis para reutilizaes, reduzindo consumo de CPU e de

    I/O (CHAN, 2014) (ALAPATI, KUHN e PADFIELD, 2013).

    2.7 Movendo Dados

    Uma das comuns necessidades em um ambiente de banco de dados movimentar estes

    dados de um local para outro. Para estas demandas, a base de dados Oracle prov diversas

    maneiras para realizar esta operao: Datapump, SQL*Loader, Ligaes de Bancos de Dados

    ou Tabelas Externas (WATSON, 2014), os quais sero apresentados nas subsees seguintes.

    2.7.1 Ligaes de Bancos de Dados

    Dentre as opes disponveis est a utilizao de links de banco de dados. Este link

    um objeto no banco de dados que habilita o acesso outra base de dados (ROESER, 2013),

    podendo tornar o acesso a outra base transparente (ASHDOWN, 2014). Na Figura 5

    demonstra-se a sintaxe para criao deste objeto.

    CREATE [ SHARED ] [ PUBLIC ] DATABASE LINK dblink [ CONNECT TO {

    CURRENT_USER | user IDENTIFIED BY password [ dblink_authentication ] }

    | dblink_authentication ] [ USING connect_string ] ;

    Figura 5. Comando para criao de um link entre bancos de dados.

    Fonte: (OHEARN, 2010).

  • 7

    2.8 Tabelas Externas

    Conforme a definio de OHEARN (2010), uma tabela externa a uma tabela onde a

    sua definio (metadado) est no banco de dados, porm a tabela em si (contedo) reside fora

    do banco de dados, proporcionando como uma das vantagens e principal benefcio a

    facilidade de configurao e manipulao de dados que a mesma possibilita (OHEARN,

    2010).

    Para se declarar uma tabela externa, necessrio explicitar o metadado da tabela, o

    nome e diretrio do arquivo externo e o driver de acesso e seus parmetros, conforme

    demonstrado na Figura 6.

    Figura 6. Arquitetura da Tecnologia de Tabelas Externas.

    Fonte: (ASHDOWN e KYTE, 2014).

    2.9 Data Pump

    Segundo THOMAS (2014), o Oracle Data Pump mecanismo de alta velocidade para

    transferir dados ou metadados de uma base de dados Oracle para outra. Este utilitrio um

    executado do lado do servidor, e por isto tem acesso direto aos datafiles melhorando

    drasticamente o desempenho (WATSON, 2014).

    Os arquivos dump gerados pela exportao contm marcaes em XML, e isto pode

    implicar em um overhead considervel dependendo da tabela. Desproporcionalmente maior

    para tabelas menores, porm desconsiderveis para tabelas maiores (WATSON, 2014).

  • 8

    O Data Pump possui dois mtodos para carga e descarga de dados: caminho direto e

    caminho de tabela externa. Para importar pelo mtodo do caminho direto, o Data Pump l do

    arquivo de dump, usa o contedo para criar blocos de dados e os escreve diretamente no

    datafile. J no mtodo tabela externa, o Data Pumo constri SQL Inserts do contedo do

    arquivo de dump que est sendo lido e os executa pelo processo normal. A definio de um

    mtodo ou outro que ser utilizado transparente para o usurio e depende da complexidade

    da tabela que est sendo carregada/descarregada (ASHDOWN e KYTE, 2014).

    2.10 SQL*Loader

    A tecnologia de troca de dados entre diferentes bases disponvel no Oracle o

    SQL*Loader, no qual um processo como os demais e ser requerido para ler dados gerados

    por outras bases, desde que o formato seja compatvel (ROESER, 2013).

    Para o carregamento de informaes, existem duas tcnicas: convencional e o caminho

    direto. O mtodo convencional converte as linhas do arquivo lido em comandos INSERT.

    Este mtodo usa o cache do banco e gera segmentos de UNDO e REDO. O comando

    COMMIT deve ser realizado para efetuar a modificao no banco (ROESER, 2013).

    J o mtodo caminho direto, ao contrrio do mtodo convencional, ignora o buffer

    cache. O SQL*Loader neste caso acessa l o contedo do arquivo e envia-o para o processo

    no servidor. Este processo monta blocos de tabelas na PGA e escreve estes dados diretamente

    nos datafiles (ROESER, 2013).

    3 Otimizao de Consultas

    3.1 Criao e Otimizao de ndices

    O ndice e seus atributos devem ser corretamente aplicados. A escolha correta e a

    configurao do mesmo pode maximizar ainda mais o desempenho do banco de dados. Cada

    coluna pode ser classificada de uma maneira diferente de outra em funo dos dados que ela

    tende a possuir (ASHDOWN, 2014).

    O banco de dados Oracle 12c prov uma variedade de opes para criao de ndices.

    Estes aspectos so demostrados nas subsees seguintes (CHAN, 2014) (ALAPATI, KUHN e

    PADFIELD, 2013):

  • 9

    3.1.1 Tipos do ndices

    Nesta subseo so demonstrados os tipos de ndices disponveis no Oracle 12c e suas

    recomendaes de utilizao (ASHDOWN, 2014).

    B-Tree: o ndice padro da arvore balanceada. Seu uso recomendado para

    colunas que apresentarem um alto grau de valores distintos (alta cardinalidade)

    (ASHDOWN, 2014).

    Unique B-Tree: ndice para colunas de mximo grau de distino de valores.

    Bitmap: A apropriado para colunas de baixa cardinalidade (ASHDOWN e

    KYTE, 2014).

    B-tree Function-based Index: til para colunas que possuem SQLs com

    funes, no qual o resultado um valor de alta cardinalidade, por exemplo,

    formatar um texto (ASHDOWN, 2014).

    Bitmap Function-based Index: til para colunas que possuem SQLs com

    funes, no qual o resultado um valor de baixa cardinalidade, por exemplo,

    pegar a primeira letra de um texto (OHEARN, 2010).

    3.1.2 Colunas Candidatas

    Alguns passos podem ser seguidos para identificao de colunas que necessitam de um

    ndice. Como regra geral, pode-se criar ndices para os seguintes cenrios (ALAPATI, KUHN

    e PADFIELD, 2013):

    Criar uma chave primria para a tabela onde um ndice nico ser criado.

    Explicitar a criao de ndices em chaves estrangeiras, para otimizao do JOIN.

    Considerar a criao de ndices em colunas usadas nas clusulas ORDER BY,

    GROUP BY, UNION, e DISTINCT pode maximizar o desempenho. Utilizar funes

    se necessrio.

    3.2 Criando SQL Eficiente

    A maioria dos problemas de desempenho das aplicaes so causados pela utilizao

    de SQL mal escritos. Uma boa estruturao destes comandos est diretamente relacionada ao

    uso eficiente dos recursos, e desta forma contribuindo para melhoria do desempenho do banco

  • 10

    de dados como um todo. Alm disso, uma boa estruturao nestes comandos contribui para

    facilitar a manuteno das aplicaes (ALAPATI, KUHN e PADFIELD, 2013).

    Neste sentido, um recurso para melhoria de desempenho disponvel pela Oracle o

    reuso do parsing do SQL por meio do Shared Pool (ASHDOWN, 2014).

    O Shared Pool o local onde as estruturas que compe o resultado final desse

    processo de so memorizadas e compartilhadas por entre os usurios do banco de dados, j o

    parser o artifcio que interpreta o comando SQL e cria um plano de execuo para o mesmo.

    Este processo tem muitas etapas, tais como verificao de sintaxe e segurana (ALAPATI,

    KUHN e PADFIELD, 2013). No Oracle 12c, existem dois tipos de operaes de parsing:

    Hard Parsing: Quando um comando SQL utilizado pela primeira vez todas as etapas

    do parsing so executadas. Este processo o mais custoso.

    Soft Parsing: Quando um comando SQL re-utilizado, parte do processo feito no hard

    parsing aproveitada atravs do Shared Pool, gerando uma melhoria de desempenho.

    Somente as etapas de verificao as sintaxe e segurana so realizadas.

    O processo de parsing deve ser minimizado do tanto quanto for possvel e cabe aos

    desenvolvedores construir as aplicaes de modo a utilizar as tcnicas de reaproveitamento

    disponveis.

    Dentre os mtodos que o desenvolvedor pode utilizar, a tcnica de bind variables pode

    ser utilizada como ferramenta para realizar o reaproveitamento de comandos, e por

    conseguinte diminuindo o tempo de parsing e utilizao de recursos. Esta tcnica consiste na

    utilizao de variveis que substituem partes das consultas que sero trocadas por valores

    literais em tempo de execuo.

    O uso do soft parsing pode reduzir quase a totalidade da utilizao de recursos para

    interpretao lxica se comparada ao hard parsing, e pode-se chegar a um ganho geral de

    desempenho de 70% no tempo de resposta dependendo cenrio (CHAN, 2014).

    4 Experimentos

    Neste captulo so apresentadas e demonstradas as etapas que foram realizadas no

    experimento de Carga de Dados.

  • 11

    4.1 Configuraes Iniciais

    Todos os experimentos foram realizados no ambiente Sistema Operacional Windows

    8.1, 64-bit, em ingls, recm instalado, em um computador Processador Intel Core i5 4200U

    4 Gerao 8GB de memria DDR3 1600MHZ contendo um Solid State Drive (SSD) de 256

    GB. A verso do banco de dados Oracle 12c a 12.1.0.1.0 Enterprise Edition para Microsoft

    Windows 64 bits, o qual foi baixada sobre a licena de desenvolvimento, testes, prototipao

    e demonstrao OTN (Oracle Technology Network).

    Nas subsees seguintes apresentam-se os componentes de reuso dos experimentos, os

    quais serviro como facilitadores para a execuo dos mesmos.

    4.1.1 PDB e Usurios Locais

    Para os experimentos sero necessrios que sejam criados dois PDBs, no qual ser

    utilizado o usurio recm criado para conexo com os mesmos. Ambos os PDBs sero criados

    com a mesma configurao. Como nomenclatura um se chamar PDBTST, e o outro ser

    PDBPRD. O comando para criao dos mesmos demonstrado no Exemplo 1 no apndice, o

    qual cria o PDBTST com usurio TSTADM e senha TSTADM com privilrios de DBA, e o

    PDBPRD com usurio PRDADM senha PRDADM com privilgios de DBA, no qual ambos

    PDB so criados baseados no PDBSEED (modelo disponibilizado na instalao da Oracle).

    4.1.2 Conexes

    Para configurao de conexes base de dados, duas entradas no arquivo

    TNSNAMES.ORA sero criadas, conforme Figura 7.

    PDBPRD = (DESCRIPTION = ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST =

    localhost)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = PDBPRD) ) )

    PDBTST = (DESCRIPTION = ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST =

    localhost)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = PDBTST) ) )

    Figura 7. Entrada PDBPRD e PDBTST no arquivo TNSNAMES.ORA.

    Fonte: Dados da Pesquisa (2014).

  • 12

    4.1.3 Tabelas

    O experimento consiste no translado de dados de um lado para outro com distintos

    tamanhos, nmero de linha e nmero de colunas. Sero realizados 4 experimentos seguindo a

    mesma metodologia adotada para os demais. Neste sentido, nesta etapa sero criadas 4 tabelas

    vazias em ambos PDBs.

    Para os experimentos, foram geradas quatro tabelas, sendo as nomeadas em

    TABELA_10MB_1COL e TABELA_100MB_1COL possuindo 1 coluna com o tamanho 16

    caracteres alfanumricos do tipo VARCHAR2(16), e as outras nomeadas em

    TABELA_10MB_10COL e TABELA_100MB_10COL, possuindo 10 colunas com o

    tamanho 16 caracteres alfanumricos do tipo VARCHAR2(16). Todas as tabelas foram

    criadas nos ambos schemas PRDADM do PDBPRD e TSTADM do PDBTST, conforme

    demonstrado na Figura 8.

    create table TABELA_100MB_10COL (

    COL1 varchar2(16), COL2 varchar2(16), COL3 varchar2(16),

    COL4 varchar2(16), COL5 varchar2(16), COL6 varchar2(16),

    COL7 varchar2(16), COL8 varchar2(16), COL9 varchar2(16),

    COL10 varchar2(16));

    create table TABELA_10MB_10COL as select * from TABELA_100MB_10COL;

    create table TABELA_100MB_1COL as select COL1 from TABELA_100MB_10COL;

    create table TABELA_10MB_1COL as select COL1 from TABELA_100MB_10COL;

    Figura 8. Criao das tabelas TABELA_1COLUNA e TABELA_10COLUNAS.

    Fonte: Dados da Pesquisa (2014).

    Alm da criao da estrutura, adicionado o parmetro nologging s tabelas em

    ambos PDBs, conforme Figura 9, para desativar a gerao de segmentos REDO e UNDO logs

    ao se utilizar o mtodo de insero por caminho direto serial (ROESER, 2013) (URBANO,

    2014).

    alter table TABELA_10MB_1COL nologging;

    alter table TABELA_10MB_10COL nologging;

    alter table TABELA_100MB_1COL nologging;

    alter table TABELA_100MB_10COL nologging; Figura 9. Atribuio do parmetro NOLOGGING.

    Fonte: Dados da Pesquisa (2014).

  • 13

    4.1.4 Preparao de Dados

    Para a execuo dos experimentos, necessria uma massa de dados significativa, a

    fim de sejam obtidos resultados mensurveis onde haja uma possibilidade de se medir o

    esforo que os servidores de banco de dados estejam executando.

    Neste sentido, foram criadas massas de dados apenas no PDBTST com distintos

    tamanhos, colunas e nmero de linhas, e inseridas em suas respectivas tabelas, conforme a

    Tabela 1.

    Tabela N de Linhas N de Colunas Tamanho

    TABELA_10MB_1COL 655360 1 10MB

    TABELA_10MB_10COL 65536 10 10MB

    TABELA_100MB_1COL 6553600 1 100MB

    TABELA_100MB_10COL 655360 10 100MB

    Tabela 1. Definio da Massa de Dados.

    Fonte: Dados da Pesquisa (2014).

    O comando para inserir valores aleatrios demostrado no Exemplo 4 no apndice

    onde utilizada uma funo j existente para preenchimento dos dados. A fim de que

    existisse a garantia que os textos no se repetissem na mesma coluna, foi realizado um teste

    posterior.

    Para criao do diretrio no PDBPRD e no PDBTST, o comando a ser utilizado

    demonstrado na Figura 10, no qual o qual nomeado em DIRPRD.

    create or replace directory DIRPRD as 'C:\DIRPRD';

    Figura 10. Criao do Diretrio DIRPRD.

    Fonte: Dados da Pesquisa (2014).

    Na sequncia, foram gerados arquivos CSV no diretrio DIRPRD com estes dados,

    para utilizao no experimento com tabelas externas. Os nomes dos arquivos so

    ARQUIVO_10MB_1COL.csv, ARQUIVO_10MB_10COL.csv,

    ARQUIVO_100MB_1COL.csv e ARQUIVO_10MB_1COL.csv, representando as massas de

    dados das tabelas TABELA_10MB_1COL, TABELA_10MB_10COL,

    TABELA_100MB_1COL e TABELA_100MB_10COL, respectivamente.

  • 14

    4.2 Metodologia

    Cada uma das cargas ser executada sequencialmente para uma carga de 5000MB.

    Para isto, o nmero de execues foi ajustado para cada uma das tabelas de teste, de modo a

    que seja verificado ao final estatsticas que sero comparados aos outros mtodos. Ao final, o

    tempo total da execuo ser coletado e apresentado em um quadro comparativo.

    Em todos os cenrios, os testes sero executados por um bloco PL/SQL ou por script

    Windows Batch File, que faro o controle das execues, e em todos os experimentos o tempo

    da primeira execuo do teste descartado.

    Para as cargas de 10MB, sero mensurados os tempos de execuo de um lote de 500

    execues, e para as cargas de 100MB o lote de 50, totalizando 5000MB para todos os

    experimentos.

    4.2.1 Ligaes entre Bancos de Dados

    Em funo de que os dados inicialmente constam no PDBTST, o primeiro

    experimento consiste na mensurao do tempo total que estes dados levam para transladar do

    PDBPRD para o PDBTST por meio do DBLINKTST.

    No sentido de realizar o teste desta tecnologia de forma a testar o desempenho dos

    protocolos de comunicao e isolar o fator da interface de rede, no experimento sero

    utilizaras duas instncias Oracle em uma mesma mquina. Por definio, criado um link do

    banco de dados PDBPRD para o PDBTST conforme a Figura 11.

    CREATE DATABASE LINK DBLINKTST

    CONNECT TO TSTADM IDENTIFIED BY TSTADM USING 'PDBTST';

    Figura 11. Criao do Link do Banco de Dados DBLINKTST.

    Fonte: Dados da Pesquisa (2014).

    Para a execuo dos experimentos, foram criados blocos em PL/SQL para realizar a

    chamada das cargas, conforme descrito no apndice no Exemplo 3.

    Na sequncia, cada um dos experimentos executado o nmero de vezes suficiente

    para que se obter uma carga total de 5000MB, conforme Exemplo 5 no apndice.

  • 15

    4.2.2 Tabelas Externas

    Para este experimento sero criadas 4 tabelas externas no PDBPRD representando as

    diferentes cargas de dados existentes conforme Exemplo 6 no apndice.

    Foram criados procedimentos em PL/SQL para realizar a chamada das cargas, este

    procedimento est descrito no Exemplo 7 no apndice.

    Na sequncia, cada um dos experimentos foi executado o nmero de vezes suficiente

    para se obter uma carga total de 5000 MB, conforme apndice Exemplo 8.

    4.2.3 Data Pump

    Nas subsees seguintes estaro descritas as etapas realizadas com o experimento com

    Data Pump. Para gerar a carga de dados a ser lida, utilizado a funo do Oracle Data Pump

    Export, para que sejam gerados os arquivos a serem lidos.

    Os arquivos so originados do mesmo conjunto de dados dos testes anteriores. Os

    arquivos sero nomeados e preenchidos com base os dados da tabela

    TABELA_10MB_1COL, TABELA_10MB_10COL, TABELA_100MB_1COL e

    TABELA_100MB_10COL, com os nomes, DUMP_10MB_1COL.DMP,

    DUMP_10MB_10COL.DMP, DUMP_100MB_1COL.DMP e DUMP_100MB_10COL.DMP,

    respectivamente. O comando para gerar estes arquivos demostrado no Exemplo 9 no

    apndice.

    Os arquivos gerados podero ser utilizados para a leitura na ferramenta impdp. J para

    a utilizao do driver do Oracle Data Pump com tabelas externas, ser realizada outra

    extrao, de acordo com os comandos descritos no Exemplo 10 no apndice.

    Neste experimento, duas estratgias sero testadas. A primeira estratgia consiste no

    uso do adaptador do Oracle Data Pump existente para a configurao de Tabelas Externas,

    enquanto o segundo experimento consiste na utilizao do programa impdp, o qual

    executado via linha de comando no servidor.

    Para o primeiro mtodo, com uso de tabelas externas, foram criados procedimentos em

    PL/SQL para realizar a chamada das cargas, este procedimento est descrito no Exemplo 11

    no apndice.

  • 16

    Na sequncia, cada um dos experimentos foi executado o nmero de vezes suficiente

    para que se obtivesse uma carga total de 5000MB, conforme Exemplo 12 no apndice.

    No segundo mtodo, com uso da ferramenta impdp, foram criados procedimentos em

    PL/SQL para realizar a chamada das cargas, este procedimento est descrito no Exemplo 13

    no apndice.

    Na sequncia, cada um dos experimentos foi executado o nmero de vezes suficiente

    para se obter uma carga total de 5000MB, conforme Exemplo 14 no apndice.

    4.2.4 SQL*Loader

    O SQL*Loader requer que a sua execuo seja via linha de comando e que sejam

    criados arquivos de controle com as configuraes de execuo, os quais so demonstradas

    em Exemplo 15, Exemplo 16, Exemplo 17 e Exemplo 18 no apndice.

    Na sequncia, cada um dos experimentos foi executado o nmero de vezes suficiente

    para que se obtivesse uma carga total de 5000MB, conforme apndice Exemplo 19 em

    Windows Batch File.

    5 Anlise e Discusso dos Resultados

    Neste captulo ser apresentada a anlise dos resultados obtida a partir dos

    experimentos. Na Tabela 2, apresentado o resultado geral do experimento, com o Tempo

    Total (s).

    10 MB 100 MB

    1 Coluna 10 Colunas 1 Coluna 10 Colunas

    Ligao de

    Banco de Dados 715 450 668 350

    Tabela Externa 523 221 223 155

    Data Pump -

    Tab. Externa 388 286 331 172

    Data Pump -

    IMPDP 2027 2014 195 195

    SQL*Loader 501 240 306 140

    Tabela 2. Resultado do Experimento com o tempo em segundos.

    Fonte: Dados da Pesquisa (2014).

  • 17

    Para o experimento de Ligao de Banco de Dados, os tempos para carga foram 715,

    450, 668 e 350 segundos. J para o Tabela Externa foram 523, 221, 223, 155 segundos. Na

    utilizao do Data Pump via Tabela Externa os tempos foram 388, 286, 331 e 172 segundos.

    J para Data Pump via IMPDP os tempos foram 2027, 2014, 195, 195 segundos. Para o

    SQL*Loader os tempos foram 501, 240, 306 e 140 segundos para as cargas de 10MB 1

    coluna, 10MB 10 colunas, 100MB 1 coluna e 100MB 10 colunas, respectivamente.

    Na Figura 12 demonstrado o throughtput em mb/s obtido com os experimentos.

    Figura 12. Throughput obtido com os experimentos.

    Fonte: Dados da Pesquisa(2014).

    O maior throughtput foi obtido por meio da tecnologia SQL*Loader carga 100MB de

    10 colunas que obteve uma velocidade mdia de 35,7 mb/s. J a menor velocidade foi por

    meio da tecnologia Data Pump IMPDP para a carga 10MB, o qual apresentou o valor de 2,5

    mb/s.

    Segundo anlises, o uso de um mesmo conjunto de dados, porm em linhas ao invs

    de colunas, tem um comportamento diferente de desempenho para as diferentes tecnologias.

    Para o Ligao de Banco de Dados, a converso de linhas para colunas oferece um

    ganho de 59% em tempo para 10MB e 91% para 100MB. J o Tabela Externa o ganho de

    137% para 10MB e 44% para 100MB. Com o Data Pump via Tabela Externa, o ganho foi de

    36% para 10MB e 92% para 100MB, j o Data Pump com IMPDP no houve ganho

    considervel para as diferentes cargas. Para o SQL*Loader o ganho foi de 109% para a carga

    de 10MB e 119% para a carga de 100MB.

  • 18

    6 Concluses

    possvel notar, a partir dos resultados dos experimentos, que duas massas de dados

    de mesmo tamanho, porm com uma diferente distribuio, possuem resultados distintos, no

    qual o arquivo com maior nmero de linhas tem um desempenho inferior ao arquivo de

    mesmo tamanho com maior nmero de colunas.

    A estratgia DBLINK por sua vez apresenta vantagens com relaes facilidade de

    configurao e a necessidade de se possurem os dados atualizados constantemente, porm, o

    fator de rede que no foi avaliado pode se tornar um vilo para grandes volumes de dados.

    Os experimentos com Tabelas Externas possuem configurao simples, e o

    desempenho apresentado para pequenas e mdias cargas foi mediano comparado aos seus

    concorrentes.

    J a estratgia de Data Pump utilizando a API PL/SQL demonstrou uma configurao

    complexa, e resultados poucos satisfatrios para pequenos conjuntos de dados. Por outro lado,

    o Data Pump utilizando Tabelas Externas se demonstrou de fcil configurao e eficiente

    tambm para pequenos e mdios conjuntos de dados, entretanto sua aplicao muito

    especfica.

    O SQL*Loader por sua vez, demonstrou o melhor desempenho mdio dentre os

    experimentos. Sua configurao fcil, entretanto, o mesmo no possui uma API em PL/SQL

    para que sua chamada seja realizada internamente ao banco Oracle, facilitando o acesso a sua

    configurao.

    Abstract

    This paper presents a literature review of contemporary references to the Oracle 12c database

    as well as conducting practical tests for different data loads to obtain parameters that can

    assist a developer in choosing the best technique for to implement data loading. As a

    methodology, an exploratory study with data collection through literature and experimental

    research in which data collected from the tests are presented and discussed in comparison is

    performed. From the results, it is possible to conclude that the different behavior of the load

    data with the technologies presented different scenarios, which different situations will

    require different implementation techniques in order to obtain the maximum utilization of

    available computational resources.

    Palavras-chave: Oracle 12c, SQL Improvements, Data Loading.

  • 19

    Referncias

    ALAPATI, S. R.; KUHN, D.; PADFIELD, B. Oracle Database 12c Performance

    Tuning Recipes. [S.l.]: Apress, 2013.

    ASHDOWN, L. Oracle Database SQL Tuning Guide 12c Release 1 (12.1). [S.l.]:

    Oracle, 2014.

    ASHDOWN, L.; KYTE, T. Oracle Database Concepts 12c Release 1 (12.1). [S.l.]:

    Oracle, 2014.

    CHAN, I. Oracle Database Performance Tuning Guide 12c Release 1 (12.1). [S.l.]:

    Oracle, 2014.

    HUEY, P. Oracle Database Security Guide 12c Release 1 (12.1). [S.l.]: Oracle,

    2014.

    LLEWELLYN, B. Oracle Multitenant. An Oracle White Paper, Redwood Shores,

    CA, 2013.

    OHEARN, S. OCA Oracle Database SQL Certified Expert Exam Guide. [S.l.]:

    Oracle Press, 2010.

    ROESER, M. B. Oracle Database SQL Language Reference 12c Release 1 (12.1).

    [S.l.]: Oracle, 2013.

    URBANO, R. Oracle Database Administrator's Guide 12c Release 1 (12.1). [S.l.]:

    Oracle, 2014.

    WATSON, J. OCA Oracle Database 12c Installation and Administration Exam

    Guide. [S.l.]: McGraw-Hill, 2014.

    Glossrio

    CDB: Container Database Continer de Banco de Dados.

    Datafile: Arquivo de Dados.

    Datapump: Injeo de Dados.

    PDB: Pluggable Database Banco de Dados Plugvel.

    MB: Megabytes.

  • 20

    Mb/s: Megabytes / segundo.

    Apndice

    CREATE PLUGGABLE DATABASE PDBTST

    ADMIN USER TSTADM IDENTIFIED BY TSTADM ROLES = (dba)

    DEFAULT TABLESPACE users

    DATAFILE 'C:\app\DouglasNandi\oradata\orcl\pdbtst\pdbtst01.dbf' SIZE

    10000M AUTOEXTEND ON

    FILE_NAME_CONVERT = ('C:\app\DouglasNandi\oradata\orcl\pdbseed\',

    'C:\app\DouglasNandi\oradata\orcl\pdbtst\');

    ALTER PLUGGABLE DATABASE PDBTST OPEN READ WRITE;

    ALTER SESSION SET CONTAINER = PDBTST;

    GRANT ALL PRIVILEGES TO TSTADM;

    ALTER SESSION SET CONTAINER = CDB$ROOT;

    CREATE PLUGGABLE DATABASE PDBPRD

    ADMIN USER PRDADM IDENTIFIED BY PRDADM ROLES = (dba)

    DEFAULT TABLESPACE users

    DATAFILE 'C:\app\DouglasNandi\oradata\orcl\pdbprd\pdbprd01.dbf' SIZE

    10000M AUTOEXTEND ON

    FILE_NAME_CONVERT = ('C:\app\DouglasNandi\oradata\orcl\pdbseed\',

    'C:\app\DouglasNandi\oradata\orcl\pdbprd\');

    ALTER PLUGGABLE DATABASE PDBPRD OPEN READ WRITE;

    ALTER SESSION SET CONTAINER = PDBPRD;

    GRANT ALL PRIVILEGES TO PRDADM;

    Exemplo 1. Comando para criao do PDBPRD e PDBTST

    sqlplus TSTADM/TSTADM@PDBTST

    SET TERMOUT OFF

    set embedded on

    set pagesize 0

    set colsep '|'

    set echo off

    set feedback off

    set linesize 1000

    set trimspool on

    set headsep of

    set feedback off

    set heading off

    set echo off

    SPOOL 'C:\DIRPRD\ARQUIVO_10MB_1COL.CSV';

    select COL1 from TABELA_10MB_1COL;

    SPOOL OFF;

    SET TERMOUT OFF

    set embedded on

    set pagesize 0

    set colsep '|'

    set echo off

    set feedback off

    set linesize 1000

  • 21

    set trimspool on

    set headsep of

    set feedback off

    set heading off

    set echo off

    SPOOL 'C:\DIRPRD\ARQUIVO_100MB_1COL.CSV';

    select COL1 from TABELA_100MB_1COL;

    SPOOL OFF;

    SET TERMOUT OFF

    set embedded on

    set pagesize 0

    set colsep '|'

    set echo off

    set feedback off

    set linesize 1000

    set trimspool on

    set headsep of

    set feedback off

    set heading off

    set echo off

    SPOOL 'C:\DIRPRD\ARQUIVO_10MB_10COL.CSV';

    select

    COL1||','||COL2||','||COL3||','||COL4||','||COL5||','||COL6||','||COL7||','

    ||COL8||','||COL9||','||COL10 from TABELA_10MB_10COL;

    SPOOL OFF;

    SET TERMOUT OFF

    set embedded on

    set pagesize 0

    set colsep '|'

    set echo off

    set feedback off

    set linesize 1000

    set trimspool on

    set headsep of

    set feedback off

    set heading off

    set echo off

    SPOOL 'C:\DIRPRD\ARQUIVO_100MB_10COL.CSV';

    select

    COL1||','||COL2||','||COL3||','||COL4||','||COL5||','||COL6||','||COL7||','

    ||COL8||','||COL9||','||COL10 from TABELA_100MB_10COL;

    SPOOL OFF;

    Exemplo 2. Script para Gerar os Arquivos CSV.

    create or replace procedure CARREGA_10MB_1COL is begin

    execute immediate 'truncate table TABELA_10MB_1COL';

    insert /*+ APPEND */ into TABELA_10MB_1COL (COL1) select COL1 from

    TABELA_10MB_1COL@DBLINKTST;

    commit;

    end;

    /

  • 22

    create or replace procedure CARREGA_10MB_10COL is begin

    execute immediate 'truncate table TABELA_10MB_10COL';

    insert /*+ APPEND */ into TABELA_10MB_10COL

    (COL1,COL2,COL3,COL4,COL5,COL6,COL7,COL8,COL9,COL10) select

    COL1,COL2,COL3,COL4,COL5,COL6,COL7,COL8,COL9,COL10 from

    TABELA_10MB_10COL@DBLINKTST;

    commit;

    end;

    /

    create or replace procedure CARREGA_100MB_1COL is begin

    execute immediate 'truncate table TABELA_100MB_1COL';

    insert /*+ APPEND */ into TABELA_100MB_1COL (COL1) select COL1 from

    TABELA_100MB_1COL@DBLINKTST;

    commit;

    end;

    /

    create or replace procedure CARREGA_100MB_10COL is begin

    execute immediate 'truncate table TABELA_100MB_10COL';

    insert /*+ APPEND */ into TABELA_100MB_10COL

    (COL1,COL2,COL3,COL4,COL5,COL6,COL7,COL8,COL9,COL10) select

    COL1,COL2,COL3,COL4,COL5,COL6,COL7,COL8,COL9,COL10 from

    TABELA_100MB_10COL@DBLINKTST;

    commit;

    end;

    /

    Exemplo 3. Procedimentos PL/SQL de Integrao de Dados.

    begin

    for j in 1..10 loop

    for LINHAS in 1..65536 loop

    for x in 1..10 loop

    insert /*+ APPEND */ into TABELA_100MB_1COL(COL1)

    values(DBMS_RANDOM.STRING('x',16));

    end loop;

    insert /*+ APPEND */ into

    TABELA_100MB_10COL(COL1,COL2,COL3,COL4,COL5,COL6,COL7,COL8,COL9,COL10)

    values(DBMS_RANDOM.STRING('x',16),DBMS_RANDOM.STRING('x',16),

    DBMS_RANDOM.STRING('x',16),DBMS_RANDOM.STRING('x',16),

    DBMS_RANDOM.STRING('x',16),DBMS_RANDOM.STRING('x',16),

    DBMS_RANDOM.STRING('x',16),DBMS_RANDOM.STRING('x',16),

    DBMS_RANDOM.STRING('x',16),DBMS_RANDOM.STRING('x',16));

    end loop;

    commit;

    end loop;

    insert /*+ APPEND */ into TABELA_10MB_1COL (COL1) select COL1 from

    TABELA_100MB_1COL where ROWNUM

  • 23

    commit;

    end;

    Exemplo 4. Gerao da massa de dados para os experimentos.

    create or replace procedure COLETA_DB_LINK is

    startTime timestamp;

    begin

    carrega_10mb_1col;

    startTime := systimestamp;

    for j in 1..500 loop carrega_10mb_1col; end loop;

    dbms_output.put_line((systimestamp-startTime)||'=DBLINK_10MB_1COL');

    carrega_10mb_10col;

    startTime := systimestamp;

    for j in 1..500 loop carrega_10mb_10col; end loop;

    dbms_output.put_line((systimestamp-startTime)||'=DBLINK_10MB_10COL');

    carrega_100mb_1col;

    startTime := systimestamp;

    for j in 1..50 loop carrega_100mb_1col; end loop;

    dbms_output.put_line((systimestamp-startTime)||'=DBLINK_100MB_1COL');

    carrega_100mb_10col;

    startTime := systimestamp;

    for j in 1..50 loop carrega_100mb_10col; end loop;

    dbms_output.put_line((systimestamp-startTime)||'=DBLINK_100MB_10COL');

    end;

    / Exemplo 5. Bloco PL/SQL para controle das chamadas.

    create table TABELA_EXTERNA_10MB_1COL ( COL1 varchar2(16)) organization

    external (type ORACLE_LOADER default directory DIRPRD access parameters

    (records delimited by newline fields TERMINATED BY ',' (COL1 char))

    location ('ARQUIVO_10MB_1COL.CSV'));

    create table TABELA_EXTERNA_10MB_10COL (COL1 varchar2(16),COL2

    varchar2(16),COL3 varchar2(16),COL4 varchar2(16),COL5 varchar2(16),COL6

    varchar2(16),COL7 varchar2(16),COL8 varchar2(16),COL9 varchar2(16),

    COL10 varchar2(16)) organization external (type ORACLE_LOADER default

    directory DIRPRD access parameters (records delimited by newline fields

    TERMINATED BY ',' ( COL1 char,COL2 char,COL3 char, COL4 char,COL5

    char,COL6 char, COL7 char,COL8 char,COL9 char, COL10 char)) location

    ('ARQUIVO_10MB_10COL.CSV'));

    create table TABELA_EXTERNA_100MB_1COL ( COL1 varchar2(16)) organization

    external (type ORACLE_LOADER default directory DIRPRD

    access parameters (records delimited by newline fields TERMINATED BY ','

    (COL1 char)) location ('ARQUIVO_100MB_1COL.CSV'));

    create table TABELA_EXTERNA_100MB_10COL (COL1 varchar2(16),COL2

    varchar2(16),COL3 varchar2(16),COL4 varchar2(16),COL5 varchar2(16),COL6

    varchar2(16),COL7 varchar2(16),COL8 varchar2(16),COL9 varchar2(16),

    COL10 varchar2(16)) organization external (type ORACLE_LOADER default

    directory DIRPRD access parameters (records delimited by newline fields

  • 24

    TERMINATED BY ',' ( COL1 char,COL2 char,COL3 char, COL4 char,COL5

    char,COL6 char, COL7 char,COL8 char,COL9 char, COL10 char)) location

    ('ARQUIVO_100MB_10COL.CSV')); Exemplo 6. Comando para Criao das Tabelas Externas.

    create or replace procedure CARREGA_EXT_10MB_1COL is begin

    execute immediate 'truncate table TABELA_10MB_1COL';

    insert /*+ APPEND */ into TABELA_10MB_1COL (COL1) select COL1 from

    TABELA_EXTERNA_10MB_1COL;

    commit;

    end;

    /

    create or replace procedure CARREGA_EXT_10MB_10COL is begin

    execute immediate 'truncate table TABELA_10MB_10COL';

    insert /*+ APPEND */ into TABELA_10MB_10COL

    (COL1,COL2,COL3,COL4,COL5,COL6,COL7,COL8,COL9,COL10) select

    COL1,COL2,COL3,COL4,COL5,COL6,COL7,COL8,COL9,COL10 from

    TABELA_EXTERNA_10MB_10COL;

    commit;

    end;

    /

    create or replace procedure CARREGA_EXT_100MB_1COL is begin

    execute immediate 'truncate table TABELA_100MB_1COL';

    insert /*+ APPEND */ into TABELA_100MB_1COL (COL1) select COL1 from

    TABELA_EXTERNA_100MB_1COL;

    commit;

    end;

    /

    create or replace procedure CARREGA_EXT_100MB_10COL is begin

    execute immediate 'truncate table TABELA_100MB_10COL';

    insert /*+ APPEND */ into TABELA_100MB_10COL

    (COL1,COL2,COL3,COL4,COL5,COL6,COL7,COL8,COL9,COL10) select

    COL1,COL2,COL3,COL4,COL5,COL6,COL7,COL8,COL9,COL10 from

    TABELA_EXTERNA_100MB_10COL;

    commit;

    end;

    /

    Exemplo 7. Procedimentos de Carga de Tabela Externa.

    create or replace procedure COLETA_TAB_EXT is

    startTime timestamp;

    begin

    CARREGA_EXT_10MB_1COL;

    startTime := systimestamp;

    for J in 1..500 loop CARREGA_EXT_10MB_1COL; end loop;

    dbms_output.put_line((systimestamp-startTime)||'=ET_10MB_1COL');

    CARREGA_EXT_10MB_10COL;

    startTime := systimestamp;

    for J in 1..500 loop CARREGA_EXT_10MB_10COL; end loop;

    dbms_output.put_line((systimestamp-startTime)||'=ET_10MB_10COL');

  • 25

    CARREGA_EXT_100MB_1COL;

    startTime := systimestamp;

    for J in 1..50 loop CARREGA_EXT_100MB_1COL; end loop;

    dbms_output.put_line((systimestamp-startTime)||'=ET_100MB_1COL');

    CARREGA_EXT_100MB_10COL;

    startTime := systimestamp;

    for J in 1..50 loop CARREGA_EXT_100MB_10COL; end loop;

    dbms_output.put_line((systimestamp-startTime)||'=ET_100MB_10COL');

    end;

    / Exemplo 8. Bloco PL/SQL para controle das chamadas.

    expdp TSTADM/TSTADM@PDBTST CONTENT=DATA_ONLY NOLOGFILE=Y FULL=N

    DIRECTORY=DIRPRD DUMPFILE=DUMP_10MB_1COL.DMP TABLES=TABELA_10MB_1COL

    expdp TSTADM/TSTADM@PDBTST CONTENT=DATA_ONLY NOLOGFILE=Y FULL=N

    DIRECTORY=DIRPRD DUMPFILE=DUMP_10MB_10COL.DMP TABLES=TABELA_10MB_10COL

    expdp TSTADM/TSTADM@PDBTST CONTENT=DATA_ONLY NOLOGFILE=Y FULL=N

    DIRECTORY=DIRPRD DUMPFILE=DUMP_100MB_1COL.DMP TABLES=TABELA_100MB_1COL

    expdp TSTADM/TSTADM@PDBTST CONTENT=DATA_ONLY NOLOGFILE=Y FULL=N

    DIRECTORY=DIRPRD DUMPFILE=DUMP_100MB_10COL.DMP TABLES=TABELA_100MB_10COL

    Exemplo 9. Gerao de Arquivos DUMP.

    create table TABELA_DUMP_10MB_1COL organization external

    (type ORACLE_DATAPUMP default directory DIRPRD access parameters

    (nologfile) location ('TABELA_DUMP_10MB_1COL.DMP')) as select COL1 from

    TABELA_10MB_1COL@DBLINKTST;

    create table TABELA_DUMP_10MB_10COL organization external

    (type ORACLE_DATAPUMP default directory DIRPRD access parameters

    (nologfile) location ('TABELA_DUMP_10MB_10COL.DMP')) as select

    COL1,COL2,COL3,COL4,COL5,COL6,COL7,COL8,COL9,COL10 from

    TABELA_10MB_10COL@DBLINKTST;

    create table TABELA_DUMP_100MB_1COL organization external

    (type ORACLE_DATAPUMP default directory DIRPRD access parameters

    (nologfile) location ('TABELA_DUMP_100MB_1COL.DMP')) as select COL1 from

    TABELA_100MB_1COL@DBLINKTST;

    create table TABELA_DUMP_100MB_10COL organization external

    (type ORACLE_DATAPUMP default directory DIRPRD access parameters

    (nologfile) location ('TABELA_DUMP_100MB_10COL.DMP')) as select

    COL1,COL2,COL3,COL4,COL5,COL6,COL7,COL8,COL9,COL10 from

    TABELA_100MB_10COL@DBLINKTST;

    Exemplo 10. Comandos para criao de tabelas externas com uso do driver Data Pump.

    create or replace procedure carrega_ext_dmp_10mb_1col is

    begin

    execute immediate 'truncate table tabela_10mb_1col';

    insert /*+ APPEND */ into tabela_10mb_1col (col1) select col1 from

    TABELA_DUMP_10MB_1COL;

    commit;

  • 26

    end;

    /

    create or replace procedure carrega_ext_dmp_10mb_10col is

    begin

    execute immediate 'truncate table tabela_10mb_10col';

    insert /*+ APPEND */ into tabela_10mb_10col

    (col1,col2,col3,col4,col5,col6,col7,col8,col9,col10) select

    col1,col2,col3,col4,col5,col6,col7,col8,col9,col10 from

    TABELA_DUMP_10MB_10COL;

    commit;

    end;

    /

    create or replace procedure carrega_ext_dmp_100mb_1col is

    begin

    execute immediate 'truncate table tabela_100mb_1col';

    insert /*+ APPEND */ into tabela_100mb_1col (col1) select col1 from

    TABELA_DUMP_100MB_1COL;

    commit;

    end;

    /

    create or replace procedure carrega_ext_dmp_100mb_10col is

    begin

    execute immediate 'truncate table tabela_100mb_10col';

    insert /*+ APPEND */ into tabela_100mb_10col

    (col1,col2,col3,col4,col5,col6,col7,col8,col9,col10) select

    col1,col2,col3,col4,col5,col6,col7,col8,col9,col10 from

    TABELA_DUMP_100MB_10COL;

    commit;

    end;

    /

    Exemplo 11. Procedimentos para carga das tabelas externas Data Pump.

    create or replace procedure COLETA_DATA_PUMP_TAB_EXT is

    startTime timestamp;

    begin

    CARREGA_EXT_DMP_10MB_1COL;

    startTime := systimestamp;

    for j in 1..500 loop CARREGA_EXT_DMP_10MB_1COL; end loop;

    dbms_output.put_line((systimestamp-startTime)||'=DPET_10MB_1COL');

    CARREGA_EXT_DMP_10MB_10COL;

    startTime := systimestamp;

    for j in 1..500 loop CARREGA_EXT_DMP_10MB_10COL; end loop;

    dbms_output.put_line((systimestamp-startTime)||'=DPET_10MB_10COL');

    CARREGA_EXT_DMP_100MB_1COL;

    startTime := systimestamp;

    for j in 1..50 loop CARREGA_EXT_DMP_100MB_1COL; end loop;

    dbms_output.put_line((systimestamp-startTime)||'=DPET_100MB_1COL');

    CARREGA_EXT_DMP_100MB_10COL;

  • 27

    startTime := systimestamp;

    for j in 1..50 loop CARREGA_EXT_DMP_100MB_10COL; end loop;

    dbms_output.put_line((systimestamp-startTime)||'=DPET_100MB_10COL');

    end;

    / Exemplo 12. Procedimento para Gerar Estatsticas de Execuo.

    create or replace procedure CARREGA_DP_10MB_1COL is

    h1 number;

    job_state varchar2(30);

    begin

    execute immediate 'truncate table TABELA_10MB_1COL';

    h1 := dbms_datapump.open('IMPORT','TABLE',NULL,'TESTE1');

    dbms_datapump.add_file(h1,'DUMP_10MB_1COL.DMP','DIRPRD');

    dbms_datapump.start_job(h1);

    dbms_datapump.wait_for_job(h1,job_state);

    dbms_datapump.detach(h1);

    end;

    /

    create or replace procedure CARREGA_DP_10MB_10COL is

    h1 number;

    job_state varchar2(30);

    begin

    execute immediate 'truncate table TABELA_10MB_10COL';

    h1 := dbms_datapump.open('IMPORT','TABLE',NULL,'TESTE2');

    dbms_datapump.add_file(h1,'DUMP_10MB_10COL.DMP','DIRPRD');

    dbms_datapump.start_job(h1);

    dbms_datapump.wait_for_job(h1,job_state);

    dbms_datapump.detach(h1);

    end;

    /

    create or replace procedure CARREGA_DP_100MB_1COL is

    h1 number;

    job_state varchar2(30);

    begin

    execute immediate 'truncate table TABELA_100MB_1COL';

    h1 := dbms_datapump.open('IMPORT','TABLE',NULL,'TESTE3');

    dbms_datapump.add_file(h1,'DUMP_100MB_1COL.DMP','DIRPRD');

    dbms_datapump.start_job(h1);

    dbms_datapump.wait_for_job(h1,job_state);

    dbms_datapump.detach(h1);

    end;

    /

    create or replace procedure CARREGA_DP_100MB_10COL is

    h1 number;

    job_state varchar2(30);

    begin

    execute immediate 'truncate table TABELA_100MB_10COL';

    h1 := dbms_datapump.open('IMPORT','TABLE',NULL,'TESTE4');

    dbms_datapump.add_file(h1,'DUMP_100MB_10COL.DMP','DIRPRD');

    dbms_datapump.start_job(h1);

    dbms_datapump.wait_for_job(h1,job_state);

    dbms_datapump.detach(h1);

    end;

    /

  • 28

    Exemplo 13. Procedimentos para testes com Oracle Data Pump.

    create or replace procedure coleta_data_pump is

    startTime timestamp;

    begin

    CARREGA_DP_10MB_1COL;

    startTime := systimestamp;

    for j in 1..500 loop CARREGA_DP_10MB_1COL; end loop;

    dbms_output.put_line((systimestamp-startTime)||'=DP_10MB_1COL');

    CARREGA_DP_10MB_10COL;

    startTime := systimestamp;

    for j in 1..500 loop CARREGA_DP_10MB_10COL; end loop;

    dbms_output.put_line((systimestamp-startTime)||'=DP_10MB_10COL');

    CARREGA_DP_100MB_1COL;

    startTime := systimestamp;

    for j in 1..50 loop CARREGA_DP_100MB_1COL; end loop;

    dbms_output.put_line((systimestamp-startTime)||'=DP_100MB_1COL');

    CARREGA_DP_100MB_10COL;

    startTime := systimestamp;

    for j in 1..50 loop CARREGA_DP_100MB_10COL; end loop;

    dbms_output.put_line((systimestamp-startTime)||'=DP_100MB_10COL');

    end;

    /

    Exemplo 14. Script para coleta de estatsticas Data Pump API.

    LOAD DATA INFILE 'c:\DIRPRD\ARQUIVO_10MB_1COL.CSV'

    TRUNCATE INTO TABLE TABELA_10MB_1COL FIELDS TERMINATED BY ','

    TRAILING NULLCOLS (COL1 CHAR) Exemplo 15. Arquivo LOADER_10MB_1COL.CTL.

    LOAD DATA INFILE 'c:\DIRPRD\ARQUIVO_10MB_10COL.CSV'

    TRUNCATE INTO TABLE TABELA_10MB_10COL FIELDS TERMINATED BY ','

    TRAILING NULLCOLS (COL1 char,COL2 char,COL3 char, char,COL5 char,COL6

    char, COL7 char,COL8 char,COL9 char, COL10 char) Exemplo 16.Arquivo LOADER_10MB_10COL.CTL

    LOAD DATA INFILE 'c:\DIRPRD\ARQUIVO_100MB_1COL.CSV'

    TRUNCATE INTO TABLE TABELA_100MB_1COL FIELDS TERMINATED BY ','

    TRAILING NULLCOLS (COL1 CHAR)

    Exemplo 17. Arquivo LOADER_100MB_1COL.CTL

  • 29

    LOAD DATA INFILE 'c:\DIRPRD\ARQUIVO_100MB_10COL.CSV'

    TRUNCATE INTO TABLE TABELA_100MB_10COL FIELDS TERMINATED BY ','

    TRAILING NULLCOLS (COL1 char,COL2 char,COL3 char, char,COL5 char,COL6

    char, COL7 char,COL8 char,COL9 char, COL10 char)

    Exemplo 18.Arquivo LOADER_100MB_10COL.CTL

    @echo off

    sqlldr PRDADM/PRDADM@PDBPRD CONTROL=LOADER_10MB_1COL.CTL SILENT=ALL

    DIRECT=Y

    set STARTTIME=%TIME%

    for /l %%x in (1, 1, 500) do (

    sqlldr PRDADM/PRDADM@PDBPRD CONTROL=LOADER_10MB_1COL.CTL SILENT=ALL

    DIRECT=Y

    )

    set ENDTIME=%TIME%

    set /A STARTTIME=(1%STARTTIME:~0,2%-100)*360000 + (1%STARTTIME:~3,2%-

    100)*6000 + (1

    %STARTTIME:~6,2%-100)*100 + (1%STARTTIME:~9,2%-100)

    set /A ENDTIME=(1%ENDTIME:~0,2%-100)*360000 + (1%ENDTIME:~3,2%-100)*6000

    + (1%ENDTIME:~6,2%-100)

    *100 + (1%ENDTIME:~9,2%-100)

    set /A DURATION=%ENDTIME%-%STARTTIME%

    echo %DURATION% milliseconds to run LOADER_10MB_1COL

    sqlldr PRDADM/PRDADM@PDBPRD CONTROL=LOADER_10MB_10COL.CTL SILENT=ALL

    DIRECT=Y

    set STARTTIME=%TIME%

    for /l %%x in (1, 1, 500) do (

    sqlldr PRDADM/PRDADM@PDBPRD CONTROL=LOADER_10MB_10COL.CTL SILENT=ALL

    DIRECT=Y

    )

    set ENDTIME=%TIME%

    set /A STARTTIME=(1%STARTTIME:~0,2%-100)*360000 + (1%STARTTIME:~3,2%-

    100)*6000 + (1

    %STARTTIME:~6,2%-100)*100 + (1%STARTTIME:~9,2%-100)

    set /A ENDTIME=(1%ENDTIME:~0,2%-100)*360000 + (1%ENDTIME:~3,2%-100)*6000

    + (1%ENDTIME:~6,2%-100)

    *100 + (1%ENDTIME:~9,2%-100)

    set /A DURATION=%ENDTIME%-%STARTTIME%

    echo %DURATION% milliseconds to run LOADER_10MB_10COL

    sqlldr PRDADM/PRDADM@PDBPRD CONTROL=LOADER_100MB_1COL.CTL SILENT=ALL

    DIRECT=Y

    set STARTTIME=%TIME%

    for /l %%x in (1, 1, 50) do (

    sqlldr PRDADM/PRDADM@PDBPRD CONTROL=LOADER_100MB_1COL.CTL SILENT=ALL

    DIRECT=Y

    )

    set ENDTIME=%TIME%

    set /A STARTTIME=(1%STARTTIME:~0,2%-100)*360000 + (1%STARTTIME:~3,2%-

    100)*6000 + (1

    %STARTTIME:~6,2%-100)*100 + (1%STARTTIME:~9,2%-100)

    set /A ENDTIME=(1%ENDTIME:~0,2%-100)*360000 + (1%ENDTIME:~3,2%-100)*6000

    + (1%ENDTIME:~6,2%-100)

    *100 + (1%ENDTIME:~9,2%-100)

    set /A DURATION=%ENDTIME%-%STARTTIME%

    echo %DURATION% milliseconds to run LOADER_100MB_1COL

    sqlldr PRDADM/PRDADM@PDBPRD CONTROL=LOADER_100MB_10COL.CTL SILENT=ALL

    DIRECT=Y

  • 30

    set STARTTIME=%TIME%

    for /l %%x in (1, 1, 50) do (

    sqlldr PRDADM/PRDADM@PDBPRD CONTROL=LOADER_100MB_10COL.CTL SILENT=ALL

    DIRECT=Y

    )

    set ENDTIME=%TIME%

    set /A STARTTIME=(1%STARTTIME:~0,2%-100)*360000 + (1%STARTTIME:~3,2%-

    100)*6000 + (1

    %STARTTIME:~6,2%-100)*100 + (1%STARTTIME:~9,2%-100)

    set /A ENDTIME=(1%ENDTIME:~0,2%-100)*360000 + (1%ENDTIME:~3,2%-100)*6000

    + (1%ENDTIME:~6,2%-100)

    *100 + (1%ENDTIME:~9,2%-100)

    set /A DURATION=%ENDTIME%-%STARTTIME%

    echo %DURATION% milliseconds to run LOADER_100MB_10COL

    Exemplo 19. Executvel LOADER.BAT para controle de Chamadas ao SQL*Loader.