Copia Seguridad

Copias de Seguridad Automáticas

OpenOffice, incluye un mecanismo de copias de seguridad (http://blog.open-office.es/), que yo no lo utilizo. Yo utilizo en cambio un archivo Batch (archivo de secuencia de comandos por lotes) programado para Windows.

El motivo de no utilizar el sistema de copias de seguridad por defecto en Open Office, es que mi base de datos es portable, y por tanto esa copia de seguridad no puede depender de la configuración del OpenOffice instalado en el sistema donde se abre. La configuración de OpenOffice te guarda esa copia de seguridad en el lugar designado en el programa, normalmente en una carpeta del disco duro.

Ademas, usando el archivo Batch, la copia de Seguridad se salva en la misma carpeta donde se encuentra la base de datos y mantiene dos copias de seguridad consecutivas. Oseas tenemos el ORIGINAL, la COPIA DEL ORIGINAL y una COPIA DE LA COPIA DEL ORIGINAL.

Es importante, que el directorio donde se guarde la copia de seguridad sea el mismo que donde se encuentra investigaciones.odb, por la protección del contenido, del que hablaré más adelante, por TrueCrypt.

Si utilizas sistema LINUX, supongo que existirá la forma de establecer un código similar en lineas de comando, pero no estoy familiarizado.

En la carpeta donde se encuentra investigaciones.odb, deberás crear un archivo nuevo, al que llamarás Investigaciones.bat y que tendrá este contenido:

@echo off

set archivo=Investigaciones

set limite=50

IF EXIST "%archivo%.odb" (

IF EXIST "%archivo%.bak" (

SET DIRCMD=/TC "%archivo%.bak"

FOR /F "skip=4 tokens=1 delims= " %%l in ('dir /-S') do if NOT DEFINED _fdestino SET _fdestino=%%l

) ELSE (SET _fdestino=null)

SET DIRCMD=/TW "%archivo%.odb"

FOR /F "skip=4 tokens=1 delims= " %%l in ('dir /-S') do if NOT DEFINED _forigen SET _forigen=%%l

) ELSE (ECHO No se encontro "%archivo%.odb"

ECHO Copia de Seguridad no realizada

ECHO.

PAUSE

GOTO :EOF)

for /f "useback tokens=*" %%a in ('%_forigen%') do set _forigen=%%~a

for /f "useback tokens=*" %%a in ('%_fdestino%') do set _fdestino=%%~a

set _forigen=%_forigen: =%

set _fdestino=%_fdestino: =%

set size=0

call :filesize "%archivo%.odb"

SET _sorigen=%size%

call :filesize "%archivo%.bak"

SET _sdestino=%size%

SET diferencia=0

IF "%_sdestino%" NEQ "null" (SET /A diferencia=_sorigen-_sdestino) ELSE (SET diferencia=%_sorigen%)

IF %diferencia% LSS 0 SET /a diferencia=%diferencia%*-1

ECHO ================================

ECHO PROCESO DE COPIA BACKUP

ECHO PARA %archivo%.odb

ECHO ================================

ECHO iniciado %DATE% %TIME%

ECHO.

ECHO ====================================================

ECHO Se comprobara si es necesaria la copia de seguridad

ECHO en atencion a la fecha de la ya existente y de

ECHO existir diferencias en Bytes con el archivo original

ECHO ====================================================

ECHO.

ECHO Localizado archivo "%archivo%.odb" modificado el "%_forigen%" de "%_sorigen%" bytes

IF "%_fdestino%" NEQ "null" (ECHO Localizado archivo backup "%archivo%.bak" creado el "%_fdestino%" de "%_sdestino%" bytes

ECHO Difiere "%diferencia%" Bytes con el original ^(limite establecido en "%limite%" Bytes^)) ELSE (ECHO No se encontro el Archivo de Backup %archivo%.bak)

ECHO.

IF "%DATE%" NEQ "%_fdestino%" (

IF %diferencia% GTR %limite% (

ECHO Estimada necesaria la copia de seguridad

ECHO.

ECHO ===============================

ECHO Actualizando copia de seguridad

ECHO ===============================

ECHO.

IF EXIST "%archivo%.old" del "%archivo%.old"

IF EXIST "%archivo%.bak" (

ECHO Actualizando %archivo%.old

copy "%archivo%.bak" "%archivo%.old"

del "%archivo%.bak"

)

ECHO Actualizando %archivo%.bak

COPY "%archivo%.odb" "%archivo%.bak"

ECHO.

ECHO Finalizado el proceso de Backups

) ELSE ( ECHO No se ha realizado copia de respaldo,

ECHO la existente coincide en Bytes con el original)

) ELSE (ECHO No se ha realizado la copia de respaldo,

ECHO la existente fue creada en el dia de hoy)

)

ECHO.

GOTO :FIN

:filesize

IF EXIST %1 (SET size=%~z1) else (SET size=null)

EXIT /b 0

:FIN

::PAUSE

START "" "%archivo%.odb"

Veis, coloreadas en marrón dos lineas, las comento:

    • set archivo=Investigaciones define el archivo de base datos, si ponemos "set archivo=mibd" el batch creará copia de seguridad y abrirá el archivo mibd.odb

    • ::PAUSE con PAUSE se espera a que el usuario pulse una tecla, pero :: comenta una linea. Por tanto, en realidad, esa linea no realiza nada. Si quieres que el BATCH espere a que pulses una tecla y así ver el resultado de las operaciones, borra los dos dos puntos que preceden a PAUSE.

Investigaciones.bat

Así, para abrir la base de datos haremos doble click en Investigaciones.bat y no en Investigaciones.odb.

Yo, por ejemplo, la base de datos la tengo en un Pen-drive, este Pen-drive tiene un lanzador de escritorio de aplicaciones en el que tengo agrupadas aplicaciones portables y entre todos los enlaces, el archivo bat que lanza la base de datos.

Tampoco es requisito indispensable, que el archivo BAT se encuentre en la misma carpeta, por el ejemplo puede estar en la raíz de un USB y el archivo investigaciones.odb se puede encontrar en una carpeta llamada "mis datos". En este caso por ejemplo, configuramos el archivo bat para la nueva ruta de esta forma:

set archivo=./mis datos/Investigaciones

Si te gusta la idea del lanzador, yo utilizo PStart y le he añadido un icono para el enlace: Icono.ico

Te comento lo que hace el archivo BAT para que entender su texto de salida.

    1. Comprueba que existe el archivo indicado en la variable archivo (le añade extensión .odb).

    2. Comprueba que la fecha actual del sistema es distinta a la fecha de creación de la copia de seguridad. (Si no existe aun copia de seguridad las fechas también serán distintas)

    3. Comprueba que el tamaño de la copia de seguridad almacenada es distinta que la del archivo original . (Si no existe aun copia de seguridad la diferencia será el tamaño del original). En realidad permite que sean distintas, una cantidad establecida de 50 bytes. Esto lo hace así, porque cada vez que se abre la base de datos, se modifica, pudiendo cambiar algunos bytes, aunque los datos a mostrar sean los mismos.

    4. Una vez realizadas las comprobaciones, y en caso de cumplirse las condiciones anteriores, copia el archivo con extensión .bak a archivo con extensión .old. Asimismo, copia el archivo con extensión.odb a archivo con extensión .bak.

    5. Abre la base de datos (Si se des-comenta el ::PAUSE, permanecerá a la espera a la pulsación de una tecla antes de abrir la base de datos, mostrando el resultado de las operaciones).