Páginas

terça-feira, 18 de dezembro de 2012

SQL*Loader

É possível utilizar os utilitários  Export e Import do Oracle para extrair ou importar grandes quantidades de dados de um banco de dados Oracle, respectivamente. Entretanto, esses utilitários sofriam da limitação de serem ferramentas cliente/servidor.

A versão 10g do Oracle introduziu o recurso de Data Pump. Funcionalmente falando, os resultados obtidos são os mesmos dos “velhos” Export e Import, entretando, as suas implementações são completamente diferentes, pois os processos do Data Pump rodam d

Tanto os utilitários Export, Import e Data Pump leêm e escrevem arquivos em formato proprietário do Oracle. Mas o que fazer quando se quer fazer um upload de grandes quantidades de dados gerados a partir de um outro sistema que não o Oracle? Nestes casos, podemos utilizar o SQL*Loader.

O SQL*Loader utiliza um arquivo de input onde são localizados os dados que serão carregados no banco de dados, um arquivo de controle (controlfile) utilizado para definir a forma de interpretar o conteúdo do arquivo de input e um arquivo de erro, no qual serão registradas as falhas e o

O controlfile nada mais é que um arquivo de texto que diz ao SQL*Loader como processar os arquivos de input. Os formatos que o SQL*Loader é capaz de entender são o de registro fixo, registro variável e o de registro de stream.

  • Os formatos de registro fixo são os mais simples e os que possuem processamento mais rápido. No exemplo abaixo cada linha de dados possui uma extensão fixa que termina com o caractere de retorno carriage return). Dentro das linhas, é utilizado algum caractere como delimitador dos campos. O controlfile deste exemplo lerá o arquivo fixed.dat, realizará o parsing em linhas de 15 bytes, dividirá as linhas em 2 campos e as inserirá nas colunas “first” e “last” da tabela “names”.
Controlfile:
load data
infile ‘fixed.dat’ “fix 15”
into table names
fields terminated by ‘,’
(first, last)

Arquivo de input (fixed.dat)
Ricardo,Wandre
Luiz,Carlossss
Thiago,Gottiii
  • Os registros variáveis possuem uma entrada no início de cada linha para informar sua extensão. A extensão dessa entrada deve ser incluída no controlfile. Repare que no exemplo abaixo do arquivo de input, cada linha apresenta um número de 3 dígitos, de acordo com o que foi especificado no controlfile.
Controlfile:
load data
infile ‘names.dat’ “var 3”
into table names
fields terminated by ‘,’
(first, last)

Arquivo de input (names.dat)
015Ricardo,Wandre
012Luiz,Carlos
013Thiago,Gotti
  • No formato de registro de stream nenhuma informação sobre a extensão das linhas é fornecido ao SQL*Loader. O controlfile e o arquivo de input podem ser vistos abaixo. Repare que neste controlfile o caracter ‘\n’ é utilizado para especificar onde termina uma linha.
Controlfile:
load data
infile ‘names.dat’ “str ‘\n’”
into table names
fields terminated by ‘,’
(first, last)

Arquivo de input (names.dat)
Ricardo,Wandre
Luiz,Carlos
Thiago,Gotti

Com relação à velocidade de processamento temos que o formato de registro fixo é mais rápido que o de registro variável que, por sua vez, é mais rápido que o de registro de streams.

A linha de comando necessária para executar o SQL*Loader é:

sqlldr userid=<nome_administrador>/<senha> control=<arquivo_de_controle.ctl>

Obs: Ao contrário do Data Pump o SQL*Loader não é um utilitário que roda no servidor, mas sim um processo de usuário que estabelece uma sessão com a instância e no banco de dados é executado através de um processo servidor normal.

Nenhum comentário:

Postar um comentário