12c - SQL*Loader Express

Um problema comum para os usuários do SQL*Loader é gerar o control file que a ferramenta utiliza para fazer a carga dos arquivos.

Quanto mais campos existem no arquivo de dados, maior é a chance de erros durante a criação do arquivo de controle.

Felizmente, a maioria dos arquivos a serem importados são do tipo CSV(comma-separated values). E pensando nisso, no Oracle Database 12c, foi introduzida uma nova feature chamada de express mode, que torna possível a carga de arquivos CSV de forma rápida e fácil.

No modo express, não é necessário criar o arquivo de controle.

O objetivo principal do SQL*Loader express mode é salvar tempo e diminuir o esforço.

Outro benefício do express mode, é que ele vai tentar utilizar o mecanismo mais rápido para o carregamento dos arquivos de dados: tabelas externas usando inserções paralelas com o hint append.

O express mode pode ser utilizado quando todas as colunas são do tipo character, number ou datetime. E também é necessário que as colunas estejam na mesma ordem em todos os registros.


SQL> create table EMPRESA (cod_emp NUMBER(1), nome_emp VARCHAR2(30));

Table created.


[oracle@oracle01 tmp]$ cat EMPRESA.dat
1,Empresa 1
2,Empresa 2
3,Empresa 3
4,Empresa 4
5,Empresa 5
6,Empresa 6
7,Empresa 7
8,Empresa 8
9,Empresa 9



[oracle@oracle01 tmp]$ sqlldr teste/teste TABLE=EMPRESA
SQL*Loader: Release 12.1.0.1.0 - Production on Sat Jan 11 12:16:28 2014
Copyright (c) 1982, 2013, Oracle and/or its affiliates. All rights reserved.

Express Mode Load, Table: EMPRESA
Path used: External Table, DEGREE_OF_PARALLELISM=AUTO

Table EMPRESA:
9 Rows successfully loaded.

Check the log files:
EMPRESA.log
EMPRESA_%p.log_xt
for more information about the load.



[oracle@oracle01 tmp]$ cat EMPRESA.log
SQL*Loader: Release 12.1.0.1.0 - Production on Sat Jan 11 12:16:28 2014
Copyright (c) 1982, 2013, Oracle and/or its affiliates. All rights reserved.

Express Mode Load, Table: EMPRESA
Data File: EMPRESA.dat
Bad File: EMPRESA_%p.bad
Discard File: none specified

(Allow all discards)

Number to load: ALL
Number to skip: 0
Errors allowed: 50
Continuation: none specified
Path used: External Table

Table EMPRESA, loaded from every logical record.
Insert option in effect for this table: APPEND

Column Name Position Len Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
COD_EMP FIRST * , CHARACTER
NOME_EMP NEXT * , CHARACTER

Generated control file for possible reuse:
OPTIONS(EXTERNAL_TABLE=EXECUTE, TRIM=LRTRIM)
LOAD DATA
INFILE 'EMPRESA'
APPEND
INTO TABLE EMPRESA
FIELDS TERMINATED BY ","
(
COD_EMP,
NOME_EMP
)
End of generated control file for possible reuse.

created temporary directory object SYS_SQLLDR_XT_TMPDIR_00000 for path /tmp

enable parallel DML: ALTER SESSION ENABLE PARALLEL DML

creating external table "SYS_SQLLDR_X_EXT_EMPRESA"

CREATE TABLE "SYS_SQLLDR_X_EXT_EMPRESA"
(
"COD_EMP" NUMBER(1),
"NOME_EMP" VARCHAR2(30)
)
ORGANIZATION external
(
TYPE oracle_loader
DEFAULT DIRECTORY SYS_SQLLDR_XT_TMPDIR_00000
ACCESS PARAMETERS
(
RECORDS DELIMITED BY NEWLINE CHARACTERSET US7ASCII
BADFILE 'SYS_SQLLDR_XT_TMPDIR_00000':'EMPRESA_%p.bad'
LOGFILE 'EMPRESA_%p.log_xt'
READSIZE 1048576
FIELDS TERMINATED BY "," LRTRIM
REJECT ROWS WITH ALL NULL FIELDS
(
"COD_EMP" CHAR(255),
"NOME_EMP" CHAR(255)
)
)
location
(
'EMPRESA.dat'
)
)REJECT LIMIT UNLIMITED

executing INSERT statement to load database table EMPRESA

INSERT /*+ append parallel(auto) */ INTO EMPRESA
(
COD_EMP,
NOME_EMP
)
SELECT
"COD_EMP",
"NOME_EMP"
FROM "SYS_SQLLDR_X_EXT_EMPRESA"

dropping external table "SYS_SQLLDR_X_EXT_EMPRESA"

Table EMPRESA:
9 Rows successfully loaded.

Run began on Sat Jan 11 12:16:28 2014
Run ended on Sat Jan 11 12:16:30 2014

Elapsed time was: 00:00:01.93
CPU time was: 00:00:00.02



SQL> select * from EMPRESA;

COD_EMP    NOME_EMP
---------- ------------------------------
1          Empresa 1
         Empresa 2
         Empresa 3
         Empresa 4
         Empresa 5
         Empresa 6
         Empresa 7
         Empresa 8
         Empresa 9

9 rows selected.


Algumas modificações de parâmetros são possíveis no express mode, como:

 - Changing the Field Terminator
 - Specifying the Order of the Fields in the Data File
 - Using a Different Data File
 - Using an Enclosure Character

Para maiores detalhes, é só consultar a referência abaixo.


Referências:


Abraço


Alex Zaballa

0 comentários: