Export con fecha

Quisiera saber si puedo hacer un exporte con la fecha del día, es decir, que en el nombre del archivo DMP se concatene la fecha del día.
Ejemplo. Backup090704. DMP

1 Respuesta

Respuesta
1
¿Qué sistema operativo utilizas? Yo trabajo sobre HP, Solaris y Linux, y todos los exports los ejecuto
mediante unas simples shellscripts que permiten, entre otras cosas, nombrar los ficheros DMP con la fecha
(Y hora si es necesario) en la que fueron generados.
Te adjunto la shell scripts para el export (exp. Sh). Tienes que copiar el código de abajo y pegarlo en un
fichero. No olvides darle permisos de ejecución (chmod +x fichero). Edítalo y adáptalo a tu ORACLE_HOME,
ORACLE_SID, etc. Viene muy bien para lanzarla desde un "cron" diario porque no sobreescribe los backups
anteriores.
Si usas Windows hay que hacer un ficherito .bat para que realice los mismos pasos que te mando.
Un saludo,
Tinoco ([email protected])
www.todoexpertos.com (Categoría Oracle)
PD: Si tienes problemas no dudes en preguntarme.
---->8-------------->8-------- exp.sh ---->8------------>8--------
#!/usr/bin/ksh
#######################################################################
# DESCRIPCION: Este script realiza un export full de la BD indicada
# en ORACLE_SID. El nombre del fichero DMP se construye
# dinamicamente concatenando la fecha, muy util para
# ser lanzado desde un cron.
# Al final, comprime el DMP con gzip.
# AUTOR : Tinoco DBA ([email protected])
# MAS INFO : Buscame en www.todoexpertos.com
#######################################################################
#
# Configuracion de tu entorno Oracle
#
ORACLE_SID=<TU_ORACLE_SID>
ORACLE_HOME=<TU_ORACLE_HOME>
NLS_LANG=<TU_IDIOMA_Y_TU_JUEGO_DE_CARACTERES>
ORACLE_TERM=vt100
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
SHLIB_PATH=$ORACLE_HOME/lib
ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
NLS_DATE_FORMAT='dd/mm/yyyy hh24:mi:ss'
PATH=$PATH:$ORACLE_HOME/bin
export ORACLE_SID ORACLE_TERM ORACLE_HOME LD_LIBRARY_PATH SHLIB_PATH ORA_NLS33
export NLS_LANG NLS_DATE_FORMAT PATH
#
# Formato de la fecha y de los ficheros DMP y LOG (para tu ejemplo: Backup090704.dmp)
#
FECHA=`date +%d%m%Y`
FICHERO="Backup${FECHA}"
#
# Nombre del usuario que realiza el export (conviene que sea SYS)
#
USUARIO=sys
PASSWORD=<TU_PASSWORD>
echo "\n\nExportando la BD \"${ORACLE_SID}\" completa [`date`]"
###
### PREPARA TU COMANDO "exp" SEGUN EL EXPORT QUE QUIERAS HACER
### En este caso es un export FULL
exp "${USUARIO}/${PASSWORD}" full=y file=${FICHERO}.dmp log=${FICHERO}.log
echo "Exportacion finalizada. [`date`]"
echo "\nComprimiendo ficheros generados..."
gzip ${FICHERO}.*
echo "... ficheros comprimidos [`date`]\n\n"
---->8-------------->8-------- fin de exp.sh ---->8------------>8--------
Primero, gracias por tu respuesta. Mis dudas son las siguientes: 01.- Cual es el ORACLE_SID Y 02.- Hay alguna forma de guardar la ejecución del bat (porque mi sistema operativo es Windows)en algún archivo de texto, pues lo corro y no hace nada, solo abre y cierra la ventana y no se exactamente lo que hace. De antemano, muchas gracias.
Por partes:
1) El ORACLE_SID es como el nombre de la BD. Es una cadena de hasta 8 caracteres que identifica la BD a la que te conectas localmente
(En la misma máquina desde donde lanzas, por ejemplo, el sqlplus). Así puedes tener más de una BD en la misma máquina, cambiando el ORACLE_SID puedes conectarte a una u otra.
Puedes tenerla como una variable de entorno o, lo más normal, en el Registro de Windows. Para verlo puedes:
a) Ejecutando "set" desde el prompt de Windows (ventana del MSDOS).
b) Viendo el regedit y buscando la cadena "ORACLE_SID". Normalmente está en "MiPC\HKey_local_machine\Software\Oracle\"
2) Para guardar el resultado de algo que ejecutes dentro del fichero BAT debes redirigir la salida de la pantalla a un fichero. Por ejemplo.
Supongamos un fichero prueba.bat que realiza lo siguiente:
dir
echo "**** FIN ******"
Para guardar la salida debemos añadir "> salida.txt" o ">> salida.txt" para que se guarde la salida del comando en el fichero "salida.txt". El
símbolo ">" lo que hace es crear un fichero donde se va a escribir, o lo vacía antes si no está vacío (sobreescribe). Y el símbolo ">>" lo que hace es añadir
al final. Por lo tanto, el contenido de nuestro nuevo fichero "prueba.bat" quedaría así:
dir > salida.txt
echo "****** FIN ******" >> salida.txt
NOTA: Fíjate que la primera sentencia tiene un ">" y la segunda un ">>". La primera vacía un fichero previo o lo crea nuevo; y la segunda se
añade al resultado de la primera.
De todas maneras, para ver si el export ha ido correctamente se puede mirar el fichero que genera el propio export (parámetro
Log=<fichero>)
Fíjate que corro el *.bat, desde el DOS Y me saca que ['ORACLE_SID' is not reconognized as an internal o external command, operable program o batch file], y lo mismo me saca con todos los comandos en el *.bat y no hace nada.
Gracias por tu ayuda
Te he escrito un fichero BAT ya preparado para que te haga el export con el tema de la fecha.
TIENES QUE ADAPTARLO para tu máquina y BD, así que debes editarlo y modificar por lo menos:
- ORACLE_SID:
Debes poner el ORACLE_SID de tu BD (mira el regedit como te dije en mi respuesta anterior)
- Usuario del export:
Te he puesto el típico "system/manager", pero debes cambiarlo si es necesario.
- DIR_DMP:
Es el directorio donde se almacenaran los exports y los logs generados. Por defecto te lo he puesto en el raíz de C: (no debes poner "\" al final).
Echale un vistazo y pruébalo. Yo no tengo no tengo windows así que no lo he podido probar. Si detectas algo raro dímelo y vemos qué pasa.
Un saludo,
Tinoco.
-------->8--------->8------
@echo off
Cls
REM -- Calculamos la fecha
FOR /F "TOKENS=1* DELIMS= " %%A IN ('DATE/T') DO SET DATE=%%B
REM -dia-
FOR /F "TOKENS=1* DELIMS=/" %%A IN ('ECHO %DATE%') DO SET DIA=%%A
FOR /F "TOKENS=1* DELIMS= " %%A IN ('ECHO %DIA%') DO SET DIA=%%A
REM -mes-
FOR /F "TOKENS=1* DELIMS=/" %%A IN ('ECHO %DATE%') DO SET QUEDA=%%B
FOR /F "TOKENS=1* DELIMS=/" %%A IN ('ECHO %QUEDA%') DO SET MES=%%A
FOR /F "TOKENS=1* DELIMS= " %%A IN ('ECHO %MES%') DO SET MES=%%A
REM -anio-
FOR /F "TOKENS=2* DELIMS=/" %%A IN ('ECHO %DATE%') DO SET ANO=%%B
FOR /F "TOKENS=1* DELIMS= " %%A IN ('ECHO %ANO%') DO SET ANO=%%A
rem -- Definimos variables (CAMBIAR AL MENOS EL ORACLE_SID)
set ORACLE_SID=MIBD
rem - formato fecha (cambiar si se desea) -
set MIFECHA=%DIA%%MES%%ANO%
rem -- ficheros de salida
set F_DMP=Backup%MIFECHA%.dmp
set F_LOG=Backup%MIFECHA%.log
set DIR_DMP=c:
set MILOG=%DIR_DMP%\Backup%MIFECHA%_bat.log
REM
REM -- hacemos el export NOTA: CONFIGURA LOS USUARIOS y PASSWORDS
REM
echo.:::::::::::::::::::::::::::::::::::::::::::::::::
Echo. DATOS DE LA EXPORTACIÓN
echo.:::::::::::::::::::::::::::::::::::::::::::::::::
echo ORACLE_SID = %ORACLE_SID%
echo Fichero DMP = %DIR_DMP%\%F_DMP%
echo Fichero LOG = %DIR_DMP%\%F_LOG%
echo Fichero Resumen = %MILOG%
echo.:::::::::::::::::::::::::::::::::::::::::::::::::
echo.
echo == Comenzamos el backup de %ORACLE_SID% el dia %MIFECHA%
echo == Comenzamos el backup de %ORACLE_SID% el dia %MIFECHA% > %MILOG%
date /T >> %MILOG%
time /T >> %MILOG%
echo.>> %MILOG%
exp 'system/manager' full=yes file='%DIR_DMP%\%F_DMP%' log='%DIR_DMP%\%F_LOG%' >> %MILOG%
echo.>> %MILOG%
echo == Fin del backup de %ORACLE_SID% >> %MILOG%
echo == Fin del backup de %ORACLE_SID%
date /T >> %MILOG%
time /T >> %MILOG%
echo.============================================ >> %MILOG%
Echo. NOTA: el resultado del backup está en %MILOG%
Echo.
-------->8--------->8------
NOTA: Ten cuidado al copiar y pegar el texto, no sea que cortes alguna linea y no funcione.
Ok. Primero me sacaba Acceso denegado después del mensaje "Comenzamos el backup..." a lo que quite las lineas date/T y time/T y echo.>>%MILOG%, pero creo que el error es de escritura pues al quitar todo lo referente a >>%MILOG% entonces paso, pero me da el error EXP-00028 failed to open name for write. Y al ponerle el nombre del DMP y el LOG fijos entonces ya exporto la data. No se si me podrías ayudar con esto.
Gracias.
Todo parece apuntar que desde el entorno (usuario y variables) desde donde se lanza el BAT no se tiene permisos de escritura en C:\ (raíz
de la unidad C:). Restaura el BAT que te mandé y cambia el parámetro DIR_DMP a un directorio donde se tenga acceso y privilegios de
Escritura.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas