Datapump – 03 Directorios

Una diferencia obvia entre Datapump y el export/import tradicional es el uso de objetos Directorio, lo cual algunas personas les causa un poco de confusión.

Son objetos de base de datos que apuntan a un directorio específico en el sistema operativo, estos permiten flexibilidad en el manejo de códigos y script, a diferencia de poner explícitamente la ruta del directorio, lo que se conoce como *"quemar" o "harcodear",  solo utilizas este alias, es decir si la ruta cambia no afecta al código.

Comencemos:
Como crear un directorio:
CREATE OR REPLACE DIRECTORY EXP_DIR AS  '/u01/workarea';
Si requerimos que otros usuarios tengan acceso de lectura y/o escritura:
GRANT READ, WRITE ON DIRECTORY EXP_DIR TO otro_usuario;
Chequear quienes tienen permisos sobre el directorio:
COL TABLE_NAME FOR A32
COL GRANTEE FOR A24
COL OWNER FOR A16
COL GRANTOR FOR A16
COL PRIVILEGE FOR A12
SELECT * FROM DBA_TAB_PRIVS WHERE TABLE_NAME='EXP_DIR';
Revisar los directorios que existen en la base de datos.
set lin 180
set pages 200
col OWNER for a16
COL DIRECTORY_NAME FOR A32
COL DIRECTORY_PATH FOR A64
SELECT * FROM DBA_DIRECTORIES;

Como hacer una prueba en el directorio:
DECLARE
cadena VARCHAR2(32767); 
v_file UTL_FILE.FILE_TYPE;
BEGIN
-- En este ejemplo escribo una cadena de caracteres en el fichero prueba.txt
-- Cadena a escribir
cadena := 'Prueba de escritura en fichero usando el paquete utl_file';
-- Abro fichero para escritura (Write)
v_file := UTL_FILE.FOPEN('EXP_DIR','prueba.txt','W',256);
-- Escribo en el fichero
UTL_FILE.PUT(v_file,cadena);
-- Cierro fichero 
UTL_FILE.FCLOSE(v_file);
dbms_output.put_line('Escritura correcta');
END;
/

*"quemar" o "harcodear", es la acción de poner explícitamente una ruta de un directorio, una contraseña o un valor en el código en vez de utilizar una variable o alias.

Comments