Te envío un bat que utilizo en los clientes.
La mayor parte es mia, (yo la he tecleado).
La parte de optimización no me acuerdo de quien la saqué. La modifiqué un poco para que calzara en este bat.
A ser utilizada bajo cuenta y riesgo propio. No asumo ninguna responsabilidad por perdidas ocasionadas por la utilizacion del bat.
Normalmente lo ubico en C:\Backup
Lo llamo backup.bat
A este "backup.bat" lo llamo desde "Tareas programasas" en el panel de control a medianoche con "C:\Datos\backup.bat Lunes"
Si la base está en un linux, IPOri será lo IP del linux (p.ej. 192.168.1.1) y origen será "/base/"
Código:
@echo off
cls
rem ----------------------------------------------------------------------
rem Parametro 1 : Es el sufijo para nombrar el backup (Lunes/Martes/...)
rem nombre : nombre del backup
rem nombreBD : nombre de la base de datos.
rem Sin path ni extension.
rem IPori : direccion IP donde se encuentra la base de datos
rem IPdes : direccion IP donde se hará el restore
rem origen : path donde se encuentra la base de datos
rem destino : path donde se generara copia, backup y restore
rem copia : SI/NO - si se copia la base de datos (solo win a win)
rem backup : SI/NO - si se hace un backup (gbak)
rem restore : SI/NO - si se hace un restore para verificar que el gbak funciono
rem sweep : SI/NO - si se hace un sweep, para cerrar transacciones terminadas
rem comprimir : SI/NO - utiliza Winrar para hacer la compresion del backup, restore y copia
rem ftp : SI/NO - envia los reportes del backup y restore
rem ftpBase : SI/NO - envia el backup de la base de datos
rem optimizacion : SI/NO - hace backup/restore de la base si no esta usandose
rem SOLO PARA WINDOWS !!!
rem deframgentar : SI/NO - ejecuta una desfragmentacion del disco C al finalizar
rem ----------------------------------------------------------------------
set nombre=Cliente023
set nombreBD=base023
set IPori=127.0.0.1
set IPdes=127.0.0.1
set origen=C:\Datos\
set destino=C:\Backup\
set copia=SI
set backup=SI
set restore=SI
set comprimir=SI
set ftp=SI
set ftpBase=SI
set optimizacion=SI
set defragmentar=SI
set sweep=SI
rem Saca el dia de la semana
echo.| date | find "actual" > tmp$$$.bat
echo set weekday_=%%4> la.bat
call tmp$$$
cd %destino%
set weekday_=%1
echo *******************************************************************************
echo *** ***
echo *** ESTA PANTALLA SE PUEDE MINIMIZAR ***
echo *** (VER 080111) ***
echo *******************************************************************************
echo Copia de Seguridad %nombre% - %weekday_%
echo %date% %time%
echo *******************************************************************************
echo ******************************************************************************** >> copia_%nombre%_%weekday_%.log
echo Copia de Seguridad %nombre% - %weekday_% >> copia_%nombre%_%weekday_%.log
echo %date% %time% >> copia_%nombre%_%weekday_%.log
echo ******************************************************************************** >> copia_%nombre%_%weekday_%.log
if "%copia%"=="NO" goto FinCopia
echo %date% %time% - Copia
echo %date% %time% >> copia_%nombre%_%weekday_%.log
echo Copia %origen%%nombreBD%.fdb "-->" %destino%%nombreBD%_%weekday_%.bak >> copia_%nombre%_%weekday_%.log
echo -------------------------------------------------------------------------------- >> copia_%nombre%_%weekday_%.log
copy %origen%%nombreBD%.fdb %destino%%nombreBD%_%weekday_%.bak /y >> copia_%nombre%_%weekday_%.log
if "%comprimir%"=="NO" goto FinComprimirBAK
echo %date% %time% - Compresion de Copia
echo %date% %time% >> copia_%nombre%_%weekday_%.log
echo Compresion de %destino%%nombreBD%_%weekday_%.bak >> copia_%nombre%_%weekday_%.log
echo -------------------------------------------------------------------------------- >> copia_%nombre%_%weekday_%.log
if exist %destino%%nombreBD%_%weekday_%.bak "C:\Archivos de programa\WinRAR\WinRAR.exe" a %destino%%nombreBD%_%weekday_%.bak.rar %destino%%nombreBD%_%weekday_%.bak
:FinComprimirBAK
:FinCopia
if "%backup%"=="NO" goto FinBackup
echo %date% %time% - Backup
echo %date% %time% >> copia_%nombre%_%weekday_%.log
echo Backup - %IPori%:%origen%%nombreBD%.fdb "-->" %destino%%nombreBD%_%weekday_%.GBK >> copia_%nombre%_%weekday_%.log
echo -------------------------------------------------------------------------------- >> copia_%nombre%_%weekday_%.log
if exist backup_%nombre%_%weekday_%.log del backup_%nombre%_%weekday_%.log
"C:\Archivos de programa\Firebird\Firebird_1_5\bin\gbak.exe" -t %IPori%:%origen%%nombreBD%.fdb %destino%%nombreBD%_%weekday_%.GBK -user SYSDBA -pass masterkey -y backup_%nombre%_%weekday_%.log
type %destino%Backup_%nombre%_%weekday_%.log >> copia_%nombre%_%weekday_%.log
if "%comprimir%"=="NO" goto FinComprimirGBK
echo %date% %time% - Compresion de Backup
echo %date% %time% >> copia_%nombre%_%weekday_%.log
echo Compresion de %destino%%nombreBD%_%weekday_%.GBK >> copia_%nombre%_%weekday_%.log
echo -------------------------------------------------------------------------------- >> copia_%nombre%_%weekday_%.log
if exist %destino%%nombreBD%_%weekday_%.gbk "C:\Archivos de programa\WinRAR\WinRAR.exe" a %destino%%nombreBD%_%weekday_%.gbk.rar %destino%%nombreBD%_%weekday_%.gbk
:FinComprimirGBK
:FinBackup
if "%restore%"=="NO" goto FinRestore
echo %date% %time% - Restore
echo %date% %time% >> copia_%nombre%_%weekday_%.log
echo Restore %destino%%nombreBD%_%weekday_%.GBK "-->" %IPdes%:%destino%%nombreBD%_%weekday_%.res >> copia_%nombre%_%weekday_%.log
echo -------------------------------------------------------------------------------- >> copia_%nombre%_%weekday_%.log
if exist restore_%nombre%_%weekday_%.log del restore_%nombre%_%weekday_%.log
"C:\Archivos de programa\Firebird\Firebird_1_5\bin\gbak.exe" -r %destino%%nombreBD%_%weekday_%.GBK %IPdes%:%destino%%nombreBD%_%weekday_%.res -user SYSDBA -pass masterkey -y restore_%nombre%_%weekday_%.log
type %destino%\Restore_%nombre%_%weekday_%.log >> copia_%nombre%_%weekday_%.log
if "%comprimir%"=="NO" goto FinComprimirGDB
if IPdes=="127.0.0.1" goto FinComprimirGDB
echo %date% %time% - Compresion de Restore
echo %date% %time% >> copia_%nombre%_%weekday_%.log
echo Compresion de %destino%%nombreBD%_%weekday_%.res >> copia_%nombre%_%weekday_%.log
echo -------------------------------------------------------------------------------- >> copia_%nombre%_%weekday_%.log
if exist %destino%%nombreBD%_%weekday_%.res "C:\Archivos de programa\WinRAR\WinRAR.exe" a %destino%%nombreBD%_%weekday_%.res.rar %destino%%nombreBD%_%weekday_%.res
:FinComprimirGDB
:FinRestore
if "%comprimir%"=="NO" goto FinComprimir
echo %date% %time% >> copia_%nombre%_%weekday_%.log
echo Borrado de originales >> copia_%nombre%_%weekday_%.log
echo -------------------------------------------------------------------------------- >> copia_%nombre%_%weekday_%.log
if exist %destino%%nombreBD%_%weekday_%.bak del %destino%%nombreBD%_%weekday_%.bak >> copia_%nombre%_%weekday_%.log
if exist %destino%%nombreBD%_%weekday_%.GBK del %destino%%nombreBD%_%weekday_%.GBK >> copia_%nombre%_%weekday_%.log
if exist %destino%%nombreBD%_%weekday_%.res del %destino%%nombreBD%_%weekday_%.res >> copia_%nombre%_%weekday_%.log
:FinComprimir
if "%sweep%"=="NO" goto FinSweep
echo %date% %time% - Sweep
echo %date% %time% >> copia_%nombre%_%weekday_%.log
echo %date% %time% - Sweep %IPori%:%origen%%nombreBD%.fdb >> copia_%nombre%_%weekday_%.log
echo GFix %IPori%:%origen%%nombreBD%.fdb >> copia_%nombre%_%weekday_%.log
echo -------------------------------------------------------------------------------- >> copia_%nombre%_%weekday_%.log
"C:\Archivos de programa\Firebird\Firebird_1_5\bin\gfix" -sweep %IPori%:%origen%%nombreBD%.fdb -user SYSDBA -pass masterkey
:FinSweep
if "%ftp%"=="NO" goto FinFTP
echo %date% %time% - Envio de Reportes
echo %date% %time% >> copia_%nombre%_%weekday_%.log
echo FTP a repositorio >> copia_%nombre%_%weekday_%.log
echo -------------------------------------------------------------------------------- >> copia_%nombre%_%weekday_%.log
if exist ftp_%nombre%_%weekday_%.txt del ftp_%nombre%_%weekday_%.txt
echo open 192.168.1.250> ftp_%nombre%_%weekday_%.txt
echo user tec>> ftp_%nombre%_%weekday_%.txt
echo paralelogramo>> ftp_%nombre%_%weekday_%.txt
echo cd logs>> ftp_%nombre%_%weekday_%.txt
echo asc>> ftp_%nombre%_%weekday_%.txt
echo send %destino%Backup_%nombre%_%weekday_%.log backup_%nombre%.log>> ftp_%nombre%_%weekday_%.txt
echo send %destino%Restore_%nombre%_%weekday_%.log restore_%nombre%.log>> ftp_%nombre%_%weekday_%.txt
if "%ftpBase%"=="NO" goto FinFTPBase
echo cd ..>> ftp_%nombre%_%weekday_%.txt
echo cd cliente023>> ftp_%nombre%_%weekday_%.txt
echo bin>> ftp_%nombre%_%weekday_%.txt
echo send %destino%%nombreBD%_%weekday_%.gbk.rar>> ftp_%nombre%_%weekday_%.txt
:FinFTPBase
echo bye>> ftp_%nombre%_%weekday_%.txt
FTP -n -s:ftp_%nombre%_%weekday_%.txt >> ftp_%nombre%_%weekday_%.log
type ftp_%nombre%_%weekday_%.log >> copia_%nombre%_%weekday_%.log
echo -------------------------------------------------------------------------------- >> copia_%nombre%_%weekday_%.log
:FinFTP
if "%optimizacion%"=="NO" goto FinOptimizacion
Echo %date% %time% - Optimizacion
Echo Optimizacion >> copia_%nombre%_%weekday_%.log
echo -------------------------------------------------------------------------------- >> copia_%nombre%_%weekday_%.log
Echo Desconectando BD ...
Echo Desconectando BD ... >> copia_%nombre%_%weekday_%.log
"C:\Archivos de programa\Firebird\Firebird_1_5\bin\gfix.exe" -shut -attach 30 %IPori%:%origen%%nombreBD%.fdb -user SYSDBA -pass masterkey 2> errout.tmp
echo 1> nul 2> vacio.tmp
echo N 1> N_CR.tmp
comp errout.tmp vacio.tmp 1> nul 2> nul < N_CR.tmp
if errorlevel 1 GOTO ERRBDConectada
Echo Copia de la base antes de optimizar
Echo Copia de la base antes de optimizar >> copia_%nombre%_%weekday_%.log
copy %origen%%nombreBD%.fdb %destino%%nombreBD%.OPTIMIZACION /y > errout.tmp
if errorlevel 1 GOTO ERRNoCopia
echo Parando Servidor Firebird ...
echo Parando Servidor Firebird ... >> copia_%nombre%_%weekday_%.log
NET STOP "Firebird Server - Defaultinstance" 1> nul 2>> copia_%nombre%_%weekday_%.log
IF errorlevel 1 GOTO ERRNoParaFirebird
echo Arrancando Guardian ...
echo Arrancando Guardian ... >> copia_%nombre%_%weekday_%.log
NET START "Firebird Guardian - DefaultInstance" 1> nul 2>> copia_%nombre%_%weekday_%.log
IF errorlevel 1 GOTO ERRNoIniciaGuardian
echo Haciendo Backup ...
echo Haciendo Backup ... >> copia_%nombre%_%weekday_%.log
if exist backup_%nombre%_Optimizacion.log del backup_%nombre%_Optimizacion.log
"C:\Archivos de programa\Firebird\Firebird_1_5\bin\gbak.exe" -t %IPori%:%origen%%nombreBD%.fdb %destino%%nombreBD%_Optimizacion.GBK -user SYSDBA -pass masterkey -y backup_%nombre%_Optimizacion.log
echo 1> nul 2> vacio.tmp
echo N 1> N_CR.tmp
comp backup_%nombre%_Optimizacion.log vacio.tmp 1> nul 2> nul < N_CR.tmp
if errorlevel 1 GOTO ERRBackup
echo Haciendo Restore ...
echo Haciendo Restore ... >> copia_%nombre%_%weekday_%.log
if exist restore_%nombre%_optimizacion.log del restore_%nombre%_optimizacion.log
"C:\Archivos de programa\Firebird\Firebird_1_5\bin\gbak.exe" -r %destino%%nombreBD%_optimizacion.GBK %IPori%:%origen%%nombreBD%.fdb -user SYSDBA -pass masterkey -y restore_%nombre%_optimizacion.log
echo 1> nul 2> vacio.tmp
echo N 1> N_CR.tmp
comp restore_%nombre%_optimizacion.log vacio.tmp 1> nul 2> nul < N_CR.tmp
if errorlevel 1 GOTO ERRRestore
:ACTIVAR_BASE
echo Activando BD...
echo Activando BD... >> copia_%nombre%_%weekday_%.log
"C:\Archivos de programa\Firebird\Firebird_1_5\bin\gfix.exe" -online %IPori%:%origen%%nombreBD%.fdb -user SYSDBA -pass masterkey 2> errout.tmp
echo 1> nul 2> vacio.tmp
echo N 1> N_CR.tmp
comp errout.tmp vacio.tmp 1> nul 2> nul < N_CR.tmp
if errorlevel 1 GOTO ERRNoActivaBD
goto FinOptimizacion
:ERRBDConectada
echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! >> copia_%nombre%_%weekday_%.log
echo ************************************************************ >> copia_%nombre%_%weekday_%.log
echo ERROR : Base de Datos Conetada >> copia_%nombre%_%weekday_%.log
echo ************************************************************ >> copia_%nombre%_%weekday_%.log
echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! >> copia_%nombre%_%weekday_%.log
goto FinOptimizacion
:ERRNoCopia
echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! >> copia_%nombre%_%weekday_%.log
echo ************************************************************ >> copia_%nombre%_%weekday_%.log
echo ERROR : No se pudo hacer una copia de la base de datos >> copia_%nombre%_%weekday_%.log
echo ************************************************************ >> copia_%nombre%_%weekday_%.log
echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! >> copia_%nombre%_%weekday_%.log
goto FinOptimizacion
:ERRNoParaFirebird
echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! >> copia_%nombre%_%weekday_%.log
echo ************************************************************ >> copia_%nombre%_%weekday_%.log
echo ERROR : No se pudo detener el servicio Firebird >> copia_%nombre%_%weekday_%.log
echo ************************************************************ >> copia_%nombre%_%weekday_%.log
echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! >> copia_%nombre%_%weekday_%.log
goto FinOptimizacion
:ERRNoIniciaGuardian
echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! >> copia_%nombre%_%weekday_%.log
echo ************************************************************ >> copia_%nombre%_%weekday_%.log
echo ERROR : No se pudo iniciar el servicio Firebird Guardian >> copia_%nombre%_%weekday_%.log
echo ************************************************************ >> copia_%nombre%_%weekday_%.log
echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! >> copia_%nombre%_%weekday_%.log
goto FinOptimizacion
:ERRBackup
echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! >> copia_%nombre%_%weekday_%.log
echo ************************************************************ >> copia_%nombre%_%weekday_%.log
echo ERROR : No se pudo hacer el backup >> copia_%nombre%_%weekday_%.log
echo ************************************************************ >> copia_%nombre%_%weekday_%.log
echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! >> copia_%nombre%_%weekday_%.log
goto FinOptimizacion
:ERRRestore
echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! >> copia_%nombre%_%weekday_%.log
echo ************************************************************ >> copia_%nombre%_%weekday_%.log
echo ERROR : No se pudo hacer el restore >> copia_%nombre%_%weekday_%.log
Echo Restaura la base de antes de optimizar >> copia_%nombre%_%weekday_%.log
echo ************************************************************ >> copia_%nombre%_%weekday_%.log
echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! >> copia_%nombre%_%weekday_%.log
copy %destino%%nombreBD%.OPTIMIZACION %origen%%nombreBD%.fdb /y > errout.tmp
goto ACTIVAR_BASE
:ERRNoActivaBD
echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! >> copia_%nombre%_%weekday_%.log
echo ************************************************************ >> copia_%nombre%_%weekday_%.log
echo ERROR : No se pudo Activar la Base de Datos >> copia_%nombre%_%weekday_%.log
echo ************************************************************ >> copia_%nombre%_%weekday_%.log
echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! >> copia_%nombre%_%weekday_%.log
goto FinOptimizacion
:FinOptimizacion
if "%defragmentar%"=="NO" goto FinDefragmentar
echo %date% %time% - Desfragmentando
echo Desfragmentando unidad %SystemDrive%... >> copia_%nombre%_%weekday_%.log
echo -------------------------------------------------------------------------------- >> copia_%nombre%_%weekday_%.log
%windir%\system32\defrag.exe %SystemDrive% -f > %destino%defrag_SD_%nombre%_%weekday_%.log
type %destino%defrag_SD_%nombre%_%weekday_%.log >> copia_%nombre%_%weekday_%.log
Rem comprombamos si la unidad con datos es la misma, y si no tambien se desfragmenta
CD > errout.tmp
for /f "tokens=1 delims=\" %%i in (errout.tmp) do if not "%%i"=="%SystemDrive%" echo Desfragmentando tambien unidad:%%i... >> copia_%nombre%_%weekday_%.log
echo -------------------------------------------------------------------------------- >> copia_%nombre%_%weekday_%.log
for /f "tokens=1 delims=\" %%i in (errout.tmp) do if not "%%i"=="%SystemDrive%" %windir%\system32\defrag.exe %%i -f > %destino%defrag_DD_%nombre%_%weekday_%.log
type %destino%defrag_DD_%nombre%_%weekday_%.log >> copia_%nombre%_%weekday_%.log
:FinDefragmentar
echo %date% %time% - Limpieza
echo Limpieza >> copia_%nombre%_%weekday_%.log
echo -------------------------------------------------------------------------------- >> copia_%nombre%_%weekday_%.log
echo ******************************************************************************** >> copia_%nombre%_%weekday_%.log
echo Finalizada copia de seguridad %nombre% - %weekday_% >> copia_%nombre%_%weekday_%.log
echo %date% %time% >> copia_%nombre%_%weekday_%.log
echo ******************************************************************************** >> copia_%nombre%_%weekday_%.log
echo . >> copia_%nombre%_%weekday_%.log
echo . >> copia_%nombre%_%weekday_%.log
echo . >> copia_%nombre%_%weekday_%.log
type copia_%nombre%_%weekday_%.log >> copia.log
if exist N_CR.tmp del N_CR.tmp
if exist vacio.tmp del vacio.tmp
if exist errout.tmp del errout.tmp
if exist tmp$$$.bat del tmp$$$.bat
if exist la.bat del la.bat
if exist ftp_%nombre%_%weekday_%.txt del ftp_%nombre%_%weekday_%.txt
if exist ftp_%nombre%_%weekday_%.log del ftp_%nombre%_%weekday_%.log
if exist copia_%nombre%_%weekday_%.log del copia_%nombre%_%weekday_%.log