SQL*Loader

SQL*Loader è un utility oracle che permette di caricare i dati presenti in un file esterno all'interno di una tabella.
Questa utility prevede due metodi di caricamento:
1 - Conventional Load
2 - Direct Path Load


Il file esterno è un csv così fatto.



1) Salvare il file csv sotto una directory a piacere come  /u01/app/oracle/file_ext.

2) Collegarsi ad un pluggable database come amministratore e creare una tabella:

SQL> show user
    USER è "PDBTSADM"

SQL> create table emp_load (
            id number,
            nome varchar2(100),
            cognome varchar2(100));

3) Creae un file con estensione ctl contente il seguente codice sotto il path contenente il file esterno.

[oracle@test file_ext]$ vi /u01/app/oracle/file_ext/emp.ctl 

Load Data
INFILE '/u01/app/oracle/file_ext/emp.csv'
APPEND
INTO Table emp_load
FIELDS TERMINATED BY ',' 
(id,
nome,
cognome
)


Metodo Conventional Load

4) Eseguire dal server Oracle la seguente linea di codice

[oracle@test ~]$ sqlldr control=/u01/app/oracle/file_ext/emp.ctl  log=/u01/app/oracle/file_ext/emp.log

Username:PDBTSADM/pdbtsadm@pdbts

SQL*Loader: Release 18.0.0.0.0 - Production on Fri Oct 16 15:29:57 2020
Version 18.3.0.0.0
Copyright (c) 1982, 2018, Oracle and/or its affiliates.  All rights reserved.

Path used:      Conventional
Commit point reached - logical record count 250
Commit point reached - logical record count 500
Commit point reached - logical record count 750
Commit point reached - logical record count 1000
Commit point reached - logical record count 1250
.................................................................................
Table EMP_LOAD:
  16125 Rows successfully loaded.

Check the log file:
  /u01/app/oracle/file_ext/emp.log
for more information about the load.

5) Fare la verifica:
SQl> select * from  emp_load;














Questo tipo di carimento è di tipo Conventional Load ed effettua la commit ogni 250 record.


Se si vuole effettuare la commit ogni 100 record usare il comando ROWS

sqlldr control=/u01/app/oracle/file_ext/emp.ctl  log=/u01/app/oracle/file_ext/emp.log ROWS=100

Username:hr/hr@orclpdb
SQL*Loader: Release 18.0.0.0.0 - Production on Tue Oct 20 16:23:46 2020
Version 18.3.0.0.0
Copyright (c) 1982, 2018, Oracle and/or its affiliates.  All rights reserved.

Path used:      Conventional
Commit point reached - logical record count 100
Commit point reached - logical record count 201
....................
.................................

Metodo Direct Path Load

Direct Path Load usa l'opzione  DIRECT=TRUE.
E' una operazione più rapida perchè i dati vengono inseriti dopo l'HWM e quindi alla fine della tabella piuttosto che tentare di usare spazio libero all'interno della stessa.
Genera redo only sotto specifiche condizioni.
Abilita solo PRIMARY KEY, UNIQUE e NOT NULL mentre le FK e le CHECK sono disabilitate.
Non attiva le INSERT triggers.
Non effettua caricamente nei Clusters.
Impedisci ad altri utenti di apportare cambiamenti alle tabelle durante il caricamento.

sqlldr control=/u01/app/oracle/file_ext/EMPLOYEES.ctl log=/u01/app/oracle/file_ext/EMPLOYEES.log DIRECT=TRUE
Username:hr/hr@orclpdb
SQL*Loader: Release 18.0.0.0.0 - Production on Wed Oct 21 15:56:20 2020
Version 18.3.0.0.0
Copyright (c) 1982, 2018, Oracle and/or its affiliates.  All rights reserved.
Path used:      Direct
Load completed - logical record count 300.
Table EMP_X:
  300 Rows successfully loaded.
........................................

Al termine del caricamento occorre abilitare le constraint di tipo check e le foreign key

SQL> select * from user_constraints where table_name='EMP_X';

SQL> ALTER TABLE <nome tabella> ENABLE CONSTRAINT <nome constraint>;

Post popolari in questo blog

Create e Drop Pluggable Database

ORA-12154: TNS: il listener non è attualmente a conoscenza del servizio richiesto nel descrittore di connessione