Introducido desde la versión 10g DBMS_FILE_TRANSFER es una API que nos permite realizar copiados de archivos binario dentro de la base de datos y/o entre base de datos Oracle si necesidad de comandos del sistema operativo.
Estos nos facilita tarea de copiado de archivos en la base o entre base sin tener que ingresar a un cmd o ssh.
Consideraciones
- Hay tener en cuenta que cuando digo archivos binarios me refiero a : Datafiles, Controlfiles, Redologs, Archivelogs, Backups, Exports DMP, ect.
- Los archivos copiado deben de tener tamaño multiple de 512 bytes.
- El archivo a copiar debe de ser menor o igual a 2Tb.
- El usuario debe tener privilegios de lectura en el objeto del directorio de origen y privilegios de escritura en el objeto del directorio de destino.
Procedimientos disponible:
- COPY_FILE (Local a Local)Lee un archivo local y crea una copia del mismo en el sistema de archivos local, es decir en el mimo servidor.
- GET_FILE(De Remota a Local) Conecta con una base de datos remota por medio de un DBLINK para leer un archivo remoto y luego crea una copia del archivo en el sistema de archivos local.
- PUT_FILE(De una Local a Remota) Lee un archivo local y contacta con una base de datos remota por medio de un DBLINK para crear una copia del archivo en el sistema de archivos remoto.
Procedimiento COPY_FILE
Copiado de archivos en el mismo servidor.
Sintaxis
DBMS_FILE_TRANSFER.COPY_FILE( source_directory_object IN VARCHAR2, source_file_name IN VARCHAR2, destination_directory_object IN VARCHAR2, destination_file_name IN VARCHAR2);
Ejemplo
--Copiar EXPFULLDB.DMP de la ruta /u01/oradmp/ a /u02/oradmp/-- Crear directorios para el copiado de un archivo DMP. CREATE OR REPLACE DIRECTORY dmp_files_dir1 AS '/u01/oradmp/'; CREATE OR REPLACE DIRECTORY dmp_files_dir2 AS '/u02/oradmp/'; -- Copiar BEGIN DBMS_FILE_TRANSFER.copy_file( source_directory_object => 'DMP_FILES_DIR1',--Directorio Origen source_file_name => 'EXPFULLDB.DMP',--Archivo origen a copiar destination_directory_object => 'DMP_FILES_DIR2',--Directorio destino destination_file_name => 'EXPFULLDB.DMP'/*Nombre archivo destino*/);
END; /Procedimiento GET_FILECopiado de archivos desde una base remota hacia la local.
SintaxisDBMS_FILE_TRANSFER.GET_FILE( source_directory_object IN VARCHAR2, source_file_name IN VARCHAR2, source_database IN VARCHAR2, destination_directory_object IN VARCHAR2,
destination_file_name IN VARCHAR2);
Ejemplo.
Desde la base de datos ORCL01 vamos a traer desde la base de datos Remota ORCL02 instanciada con el DBLINK DBL_ORCL02 el archivo de EXPDP_FULL_ORCL02.DMP. El archivo a traer se encuentra en el directorio DATA_PUMP_DIR y lo vamos a copiar en el mismo directorio directorio de la base de datos local.
- Vamos a copiar un DMP desde una base de datos remota hacia la base de datos Local. - Consigue el archivo. BEGIN DBMS_FILE_TRANSFER.get_file ( source_directory_object => 'DATA_PUMP_DIR'/*Directorio origen base remota*/, source_file_name => 'EXPDP_FULL_ORCL02.DMP'/*Nombre del DMP remoto a descargar*/, source_database => 'DBL_ORCL02' /*DBlink de la base de datos remota*/, destination_directory_object => 'DATA_PUMP_DIR'/*Directorio destino local de la base*/,
destination_file_name => 'EXPDP_FULL_ORCL02.DMP'/*Nombre del DMP destino*/);
END; /
Procedimiento PUT_FILE
Copiado des archivos desde una base local hacia una base de datos remota.
Sintaxis
DBMS_FILE_TRANSFER.PUT_FILE ( source_directory_object IN VARCHAR2, source_file_name IN VARCHAR2, destination_directory_object IN VARCHAR2, destination_file_name IN VARCHAR2, destination_database IN VARCHAR2);
Ejemplo
Desde la base de datos ORCL01 vamos a enviar el archivo EXPDP_FULL_ORCL01.DMP a una la base de datos Remota ORCL02 instanciada con el DBLINK DBL_ORCL02 . El archivo a enviar se encuentra en el directorio DATA_PUMP_DIR y lo vamos a copiar en el mismo directorio directorio de la base de datos local.
-- Vamos a copiar desde la base de datos local ORCL01 el archivo EXPDP_FULL_ORCL02.DMP -- y enviarlo a la base de datos remota ORCL02 por medio del DBLINK DBL_ORCL02. BEGIN DBMS_FILE_TRANSFER.put_file ( source_directory_object => 'DATA_PUMP_DIR'/*Directorio origen local*/, source_file_name => 'EXPDP_FULL_ORCL01.DMP'/*Archivo origen local*/,
destination_directory_object => 'DATA_PUMP_DIR'/*Directorio destino remoto*/,
destination_file_name => 'EXPDP_FULL_ORCL01.DMP'/*Archivo destino remoto*/,
destination_database => 'DBL_ORCL02'/*DBLINK*/); END;/
Listo, ya vimos las tres forma de usar DBMS_FILE_TRANSFER, solo te toca ver cual se adapta a tu necesidad.
No hay comentarios:
Publicar un comentario