Deixe-me mostrar um exemplo de um arquivo de controle que uso para carregar um arquivo muito grande (120 milhões de registros por dia)
OPTIONS (SKIP=0, ERRORS=500, PARALLEL=TRUE, MULTITHREADING=TRUE, DIRECT=TRUE, SILENT=(ALL))
UNRECOVERABLE
LOAD DATA
CHARACTERSET WE8ISO8859P1
INFILE '/path_to_your_file/name_of_the_file.txt'
BADFILE '/path_to_your_file/name_of_the_file.bad'
DISCARDFILE '/path_to_your_file/name_of_the_file.dsc'
APPEND
INTO TABLE yourtablename
TRAILING NULLCOLS
(
COLUMN1 POSITION(1:4) CHAR
,COLUMN2 POSITION(5:8) CHAR
,COLUMN3 POSITION(9:11) CHAR
,COLUMN4 POSITION(12:18) CHAR
....
....)
Algumas considerações
- É sempre mais rápido carregar por posições do que usar delimitadores
- Use as opções de
PARALLEL
,MULTITHREADING
eDIRECT
para otimizar o desempenho de carregamento. UNRECOVERABLE
também é um bom conselho se você sempre tiver o arquivo, caso precise recuperar o banco de dados, será necessário carregar os dados novamente.- Use o conjunto de caracteres apropriado.
- A cláusula TRAILING NULLCOLS diz ao SQL*Loader para tratar quaisquer colunas relativamente posicionadas que não estejam presentes no registro como colunas nulas.
- Posição significa que cada linha contém dados sem qualquer delimitador, então você sabe a posição de cada campo na tabela pelo comprimento.
AAAAABBBBBBCCCCC19828733UUUU
- Se o seu arquivo txt ou csv tiver um separador de campo, digamos ponto e vírgula, você precisará usar o
FIELDS DELIMITED BY
Isso é armazenado em um arquivo de controle, normalmente um arquivo de texto com extensão ctl. Então você invoca a partir da linha de comando
sqlldr userid=youuser/[email protected]_string control=/path_to_control_file/control_file.ctl