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.

quarta-feira, 5 de dezembro de 2012

[Linux] Ver andamento de uma cópia (cp) com o comando watch

O comando cp pode ser utilizado para copiar dados entre pastas do linux.
Muitas vezes é bom saber o andamento, para quem sabe, fazer uma pausa para o café.
Por isso, um comando essencial é o watch.
O comando watch repete um comando linux a cada 2 seg (isso pode ser alterado, veja o man do watch - man watch).

Suponha que vc fez uma cópia recursica do diretório X para o diretório Y, ou seja, todos os arquivos da pasta X vão ser copiados para a pasta Y:
  • cp -R /caminho/X /caminho/Y &
A cópia é iniciada, porém, vc não sabe o quanto de dados que já foram transferidos.

Para saber isso, basta entrar no diretório Y
  • cd /caminho/Y
E executar o comando:
  • watch du -ks .
  • Na linha de cima, não esqueça de colocar o último ponto após o -ks
Isso vai fazer com que o comando du seja executado (disk usage), exibindo quantos kbytes já foram copiados (ks);

É isso.