No artigo de hoje iremos falar sobre o SQL Loader, um utilitário que permite ler dados de arquivos externos e carregar estes dados em tabelas de um Banco de Dados Oracle, com a vantagem de efetuar cargas de dados mais rápidas que os caminhos de atualização de dados convencionais, tais como scripts de INSERT.
O SQL Loader pode ser instalado através do instalador do Oracle Client e seu arquivo utilitário, sqlldr.exe, encontra-se na pasta "ORACLE_HOME\<versão do cliente>\bin".
Ex.: "C:\Oracle\Produto\Cliente\10gR2\BIN\sqlldr.exe".
Para executar uma carga de dados com o utilitário do SQL Loader , deve-se utilizar obrigatoriamente, como parâmetros, um arquivo de controle e um arquivo de dados. Opcionalmente, a carga de dados pode gerar log das operações executadas, dos dados rejeitados e dos dados descartados.
O arquivo de controle é um arquivo texto com uma extensão .ctl (preferencial, mas não obrigatória), que deve conter as seguintes informações: caminho e nome do arquivo de dados, formato dos dados, detalhes de configurações e como manipular os dados.
O arquivo de dados é um arquivo texto com uma extensão qualquer (.csv, .dat, .txt etc.), que poderá conter registros (linhas) em um dos seguintes formatos: registro fixo, registro variável e registro de fluxo.
O arquivo de log é um arquivo texto que contém um resumo detalhado do processo de carga.
O arquivo de dados rejeitados ou arquivo de erros (bad file), contém registros que são rejeitados pelo processo de carga por conterem dados em formato de entrada inválido. Ele permite verificar quais linhas do arquivo de dados foram rejeitadas, para que você possa posteriormente analisar a causa da rejeição.
O arquivo de dados descartados é criado somente quando for especificado no arquivo de controle e contém registros que são excluídos do processo de carga por não corresponderem aos critérios de seleção de carga, especificados no arquivo de controle.
Na Imagem 01 abaixo, podemos visualizar todos os itens citados citados acima e como eles interagem com o utilitário do SQL Loader:
Na Imagem 01 abaixo, podemos visualizar todos os itens citados citados acima e como eles interagem com o utilitário do SQL Loader:
![]() |
Imagem 01 - Diagrama da Estrutura do SQL Loader Fonte: Oracle Corporation |
Neste artigo não explicarei todos os detalhes do SQL Loader. Meu objetivo é apenas apresentar uma visão geral e demonstrar seu desempenho (através de um exemplo).
Para verificar o desempenho do SQL Loader, criaremos os seguintes objetos e arquivos:
1- Uma tabela CLIENTES em um Banco de Dados Oracle com um usuário que tenha privilégios para criar tabelas em seu próprio schema:
CREATE TABLE cliente
(
cod_cliente NUMBER,
nom_cliente VARCHAR2(50),
dat_nascimento DATE,
dat_inclusao DATE
)
2- Um arquivo de controle com o nome clientes.ctl, que pode ser baixado a partir do Meu Sky Drive (ver painel inferior direito), pasta Oracle -> Scripts, arquivo clientes.zip.
Neste arquivo de controle foram parametrizados os seguintes valores:
- OPTIONS (SILENT=ALL, DIRECT=TRUE):
Suprime todas as mensagens de feedback durante a execução da carga e faz inserção em modo DIRECT PATH (mais rápido).
- UNRECOVERABLE LOAD DATA:
Não gera redo log.
- CHARACTERSET WE8ISO8859P1:
Utiliza character set WE8ISO8859P1.
- TRUNCATE:
Trunca dados da tabelas antes de iniciar a inserção dos dados.
- FIELDS TERMINATED BY '|':
Utiliza o caractere "|" como delimitador de colunas.
- OPTIONALLY ENCLOSED BY '"'
Indica que o caractere " (aspas duplas) pode ser utilizado opcionalmente como delimitador de valores.
- cod_eleitor SEQUENCE(Max):
Insere código sequencial na coluna "cod_eleitor".
- dat_nascimento "TO_DATE (:dat_nascimento, 'dd/mm/yyyy')":
Converte data de nascimento (coluna dat_nascimento), recuperada do arquivo de dados, no formato 'dd/mm/yyyy'.
- dat_inclusao SYSDATE:
Insere data/hora atual na coluna inclusão.
3- Um arquivo de dados no formato de registro variável, com o nome clientes.txt. Crie o arquivo com 254.000 linhas repetindo o conteúdo das 2 linhas abaixo:
"Homer Simpson"|"06/08/1910"
"Marge Simpson"|"23/10/1914"
Obs.: Crie os arquivos clientes.ctl e clientes.txt na mesma pasta.
4- Após criar os objetos e arquivos dos passos anteriores, abra uma janela de comandos do Sistema Operacional, entre na pasta em que você criou os arquivos e digite o comando abaixo, substituindo XXX e ZZZ pelo nome e senha do usuário que criou a tabela e YYY pelo nome da instância de Banco de Dados em que a tabela foi criada:
sqlldr userid=XXX@YYY/ZZZ control=clientes.ctl log=clientes.logO comando acima irá ler o arquivo de controle clientes.ctl e se tudo estiver OK, irá iniciar o processo de carga e gerar um arquivo de log com o nome clientes.log.
Para efeitos de comparação de performance entre um processo de carga executado pelo SQL Loader e um processo de carga executado por um script de comandos INSERT, seguem abaixo os resultados de um teste que eu fiz:
TESTE 1- Carga de dados de 254.000 registros via SQL Loader utilizando o exemplo deste artigo:
Tempo de execução: 04 segundos.
TESTE 2- Carga de dados de 254.000 registros via SQL Plus executando um script de comandos INSERT:
Tempo de execução: 12 minutos e 25 segundos.
Neste teste (conforme os parâmetros configurados) tivemos um mega ganho (18.625% superior) de desempenho no tempo de execução da carga utilizando o SQL Loader.
COMENTÁRIOS FINAIS:
Através dos resultados dos testes que eu fiz utilizando o exemplo deste artigo, conseguimos verificar que o SQL Loader é uma ótima ferramenta para ser utilizada para efetuar cargas de dados quando a origem dos dados é um arquivo externo, em formato texto.
Para mais informações, leia o FAQ oficial da Oracle e as referências deste artigo.
Para mais informações, leia o FAQ oficial da Oracle e as referências deste artigo.
Referências:
- SQL*Loader (sqlldr) Utility tips: http://www.dba-oracle.com/tips_sqlldr_loader.htm
- Oracle SQL*Loader: http://www.psoug.org/reference/sqlloader.html
- Oracle SQL*Loader Overview: http://www.oracle.com/technology/products/database/utilities/htdocs/sql_loader_overview.html
- SQL*Loader Command-Line Reference: http://www.csee.umbc.edu/help/oracle8/server.815/a67792/ch06.htm
- SQL*Loader Control File Reference: http://www.cs.umbc.edu/help/oracle8/server.815/a67792/ch05.htm
- Treinamento oficial da Oracle "Oracle Database 10G Administration Workshop I".