Recuperar / Restaurar objetos borrados a partir de una copia de seguridad

Plantearemos la situación de tener que recuperar un proyecto borrado accidentalmente a partir de una copia de seguridad. Se supone que no tenemos la opción de undo y que no se ha hecho ningún purge dspués del borrado

El caso aquí planteado supone que la BD Main está en postgresql , y los schemas pueden o no estar replicados a postgresql

IMPORTANTE : Esto funcionará solo en el caso que NO se haya ejecutado ningún purge del portal_repository, ya que se habrań perdido las referencias a los proxies (en realidad restauraremos proxies, no los objetos reales, ya que estos no se borran hasta el purge)

Pasos a realizar:

Primera parte : Recuperar la copia de seguridad completa

- Parar la instancia original (no es estrComunidad KMKey en Españolgenictamente necesario)
- Copiar toda la instancia a un nuevo directorio (cp -a zope zope2)
- Modificar los archivos de configuración de la nueva instancia para que apunten al nuevo directorio (editar todos los archivos de /bin, y modificar el path)
- Modificar el archivo zope/etc/zope.conf, modificando el path de la instancia, el puerto http y el origen de datos de la bd main. Si la original se llama, por ejemplo 'kmkey_zodb', aquí la podemos renombrar a 'kmkey_zodb_back'
- Crear la nueva base de datos : createdb kmkey_zodb_back
- Recuperar la copia de seguridad a la nueva bd que hemos creado : pg_restore -d kmkey_zodb_back archivo_copia_de_seguridad (se da por hecho que se estan realizando copias diarias o semanales de seguridad con el comando pg_dump --format=c nombre_bd>archivo_copia_de_seguridad)
- si además tenemos los schemas en posgresql, tb debemos recuperarlos , aunque este paso se puede omitir, ya que las 2 instancias apuntaran al mismo

Si hemos realizado correctamente todos los pasos anteriores, deberíamos poder arrancar la segunda instancia que hemos configurado (/usr/local/kmkey/zope2/bin/zopectl start)

Segunda parte : recuperar el objeto borrado

- Entramos a zmi de la segunda instancia y hacemos un export del expediente u objeto que queremos recuperar
- Copiamos el archivo .zexp que se ha exportado a /var de la segunda instancia al directorio /import de la primera instancia
- Paramos la segunda instancia (no es estrictamente necesario, pero esta instancia la deshecharemos para cualquier otra cosa que no sea recuperar objetos via export)
- Entramos a zmi de la primera instancia, y nos posicionamos en el contenedor del objeto que queremos recuperar
- Importamos el objeto

A partir de este momento , ya podremos acceder al objeto recuperado si todo ha funcionado correctamente, pero tenemos que asegurarnos de que desactivamos la marca de borrado de los schemas si estos estan en postgresql

Si es así, debemos ejecutar una consulta del estilo : update kmkey_project set deleted=0 where internal_docid = xxxxx (o proxy_path, o container_path, o project_path, para hacerlo para todos los subobjetos)
Tener en cuenta q si se está recuperando un expediente, habrá que ejecutar esta consulta para cada una de las tablas que tengamos a psql (kmkey_task, kmkey_work, kmkey_email, kmek_document, kmkey_note, etc..)

suerte