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:
Il file esterno è un csv così fatto.
SQL> show user
USER è "PDBTSADM"
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.
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;
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>;