Carregant fitxers directament
Una de les utilitats més utilitzades per a carregar fitxers en una base de dades Oracle, és l'sqlloader. Aquesta funcionalitat ha evolucionat amb les versions, fins assolir una certa maduresa, en la Oracle9iR2 i posteriors. Amb la racionalització de l'ús que proporcionen les Taules Externes, els obstacles de complexitat del LOADER s'esvaeixen.
Sistema d'Arxius
Hem de seguir una llista de comprovació bàsica en la ubicació dels fitxers en el sistema d'arxius:
- que tinguem una partició dedicada, si és possible.
- que tinguem prou espai d'emmagatzematge.
- que sigui sempre la mateixa.
- que sigui accessible pel compte d'usuari oracle.
- que tingui els permisos escaients sobre el fitxer a carregar.
Una vegada satisfets aquests requeriments, podem iniciar el procés de definició en base de dades.
Base de Dades
Els DIRECTORY són punters a una ubicació (PATH) del sistema d'arxius. Per tant, amb l'usuari propietari de l'esquema crearem el directori de càrrega i atorgarem permisos al compte que executarà el programa.
En aquest punt, tenim definit l'accés al fitxer, ara caldrà crear un objecte de base de dades que ens permeti definir el fitxer i la seva estructura. En l'sqlloader tradicional, es tractaria del fitxer de control i configuració.
Les taules externes, ens permeten concentrar en únic objecte la gestió de càrrega sqlloader, simplificant el màxim el procés. Crearem doncs, la taula externa -especificant que es tracta d'una taula LOADER-, definim les columnes de l'entitat, i del fitxer: la seva posició i longitud, fixer o amb caràcter separador. En l'especificació de la taula, haurem d'indicar el directori i opcionalment, l'origen -el nom del fitxer- de les dades.
Un exemple
Una aplicació que transforma fitxers plans (txt) en fitxers xml genera un fitxer de registre -un log- com el que es mostra tot seguit:
...
...
2008-04-04 14:23:06 # SEPAconv.sh # 2598 # LOG # FileLoad 01 : trobat fitxer sepa20080404cicle2.out en directori /app/sepa/data/in
2008-04-04 14:23:06 # SEPAconv.sh # 2598 # LOG # FileLoad 02 : renombrant fitxer sepa20080404cicle2.out per out_20080404_2.conv
2008-04-04 14:23:06 # SEPAconv.sh # 2598 # LOG # FileLoad 04 : movent fitxer out_20080404_2.conv en directori /app/sepa/data/exe
2008-04-04 14:23:06 # SEPAconv.sh # 2598 # LOG # FileLoad 05 : trobat fitxer out_20080404_2.conv en directori /app/sepa/data/exe
2008-04-04 14:23:07 # SEPAconv.sh # 2598 # LOG # FileCheck 01: comprobant la integritat del fitxer out_20080404_2.conv
2008-04-04 14:23:07 # SEPAconv.sh # 2598 # LOG # FileCheck 03 : El fitxer out_20080404_2.conv té el format correcté i un sol bloc.
...
On la primera columna ens mostra la data i hora d'execució, la segona el procés que s'està executant, la tercera l'identificador de procés, la quarta el tipus de missatge (LOG, correspon a registre normal, WRN a una advertència i ERR a un error d'execució) i en darrer lloc el missatge informatiu.
Per generar la taula externa que ens permeti carregar els fitxers de registre de l'aplicació a la base de dades hauríem d'executar les següents instruccions:
create or replace directory APPDUMP as '/app/sepa/data/load/';
grant read on directory APPDUMP to sepa;
grant write on directory APPDUMP to sepa;
create table APP_SEPA_LOG(
..APP_DATAIHORA_EXEC..date,
..APP_PROCES_EXEC.....varchar2(30),
..APP_PROCES_PID......varchar2(4),
..APP_TIPUS_MISSATGE..char(3),
..APP_PROCES_MISSATGE varchar2(200)
..)
organization external (
type ORACLE_LOADER
default directory APPDUMP
acces parameters (
records delimited by newline
skip 2
fields terminated by ' # '
missing field values are null
.(APP_DATAIHORA_EXEC.date,APP_PROCES_EXEC varchar2(30),
..APP_PROCES_PID varchar2(4),APP_TIPUS_MISSATGE char(3),
..APP_PROCES_MISSATGE varchar2(200))
location ('appSEPA.log'));
...
Bé, doncs ara ja estem en condicions de poder carregar les dades en la nostra taula. Per fer-ho haurem de:
- moure el fitxer de registre fins el directori /app/sepa/data/load.
- renombrar-lo per appSEPA.log
- atorgar-li permisos de lectura i escriptura
- executem la instrucció
.............APP_PROCES_EXEC,APP_PROCES_PID,
.............APP_TIPUS_MISSATGE,APP_PROCES_MISSATGE
........from SEPA.APP_SEPA_LOG;
I tot seguit obtindrem les dades corresponents al fitxer, tabulats per columnes.
En l'enllaç http://www.psoug.org/reference/externaltab.html teniu informació complerta de les taules externes.
