jueves, 25 de noviembre de 2010

Pérdida de datos en SQL Server

Si por error has perdido ciertos datos en tu base de datos SQL Server, ya sean registros o tablas completas, y el último backup que tienes es demasiado viejo y no contiene los datos que necesitas recuperar, existe una manera para poder recuperar tu información por completo.

Una vez que se ha realizado un commit sobre las transacciones en una base de datos, no puedes ejecutar un rollback para deshacer esta operación; así que necesitarás de algún backup para recuperar tu información. Si tienes un backup lo suficiente nuevo como para restaurar tus datos, pues no tendrás ningún problema, pero si no lo tienes aún asi puedes recuperarlos siguiendo estos pasos:

1. Realiza un backup de transacciones de tu base de datos. Entra al SQL Server Enterprise Manager y sobre tu base de datos presiona el botón derecho. Selecciona la opción Todas las tareas y luego Copia de seguridad de la base de datos....


En la ventana de copia de seguridad selecciona la opción Registro de transacciones e indica el lugar donde deseas que se almacene este backup y asignale una extensión trn.


2. Restaura el backup más nuevo que tengas. Busca el backup más nuevo que tengas y restauralo preferiblemente en otro servidor. Si no cuentas con otro servidor, puedes restaurarlo en una nueva base de datos pero asegurate de cambiar el nombre del archivo físico donde será restaurado para no sobreescribir la base de datos original. Esta restauración se debe realizar con ciertos parámetros especiales. Si la restauración se realizará a través de código utiliza la siguiente sintaxis:

RESTORE DATABASE NuevaBD
FROM DISK = 'C:\Backups\ultimoBackup.bak'
WITH
MOVE 'BDPrevia' TO 'C:\Data\NuevaBD.mdf',
MOVE 'BDPrevia_Log' TO 'C:\Data\NuevaBD_Log.ldf',
NORECOVERY

Las sentencias MOVE sirven para indicar adonde se ubicarán físicamente los archivos lógicos de la base de datos. Esto es lo que nos evitará sobreescribir la base de datos ya existente.

NORECOVERY lo utilizamos para indicarle que sobre esta Base de Datos restauraremos un archivo de transacciones, por lo que la base de datos no quedará operativa sino hasta después de realizar esta restauración donde le indicaremos que lo haga con RECOVERY.

Si la restauración de la base de datos la haremos a través de la interfaz gráfica hay que asegurarse de cambiar el nombre del archivo físico del archivo mdf y del archivo ldf e indicarle que la base de datos quedará no operativa tal como se indica en la siguiente figura:


Si se utiliza la versión Studio Express del SQL Server Management, estos mismos parámetros pueden ser configurados en la ventana de restauración en la ficha "Options".

Si no tienes ningún backup no podrás realizar la recuperación de tus datos, o por lo menos no conozco ninguna forma, si lográs hacerlo por favor comentalo en este post :)


3. Restaura el archivo de transacciones. El último paso es restaurar el archivo de transacciones especificando la fecha anterior a la pérdida de los datos; es decir, que si perdimos los datos el 15 de noviembre de 2010 a la 1 p.m., podemos indicarle que restaure las transacciones hasta cualquier fecha antes de esta en la cual estemos seguros que estaban todos los datos que necesitamos antes de ser borrados. A través de código se utilizaría una sintaxis como esta:

RESTORE LOG BDNueva
FROM DISK = 'C:\Backups\transacciones.trn'
WITH
STOPAT=N'11/15/2010 8:00:00 AM',
RECOVERY

A través de la interfaz gráfica en la versión Studio Express presiona el botón derecho sobre la base de datos (la cual indicará que está en estado de Restauración) y selecciona Tasks, luego Restore y luego Transaction Log... Después debes indicarle que la base de datos debe quedar operativa e indicarle el punto en el tiempo hasta el que quieres restaurar las transacciones.

Listo, con esto tendrás tus datos en BDNueva y podrás sacar de ella lo que necesites. Básicamente lo que este proceso realiza es restaurar una base de datos vieja y luego ejecutar de nuevo las transacciones que se realizaron hasta cierta fecha, generando así nuevamente los datos que necesitamos.

miércoles, 10 de noviembre de 2010

Backup del correo

Una de las ventajas que ofrece el servidor de correos Microsoft Exchange es la facilidad de trasladar el buzón de un usuario desde una computadora a otra sin demasiado esfuerzo; además de esto, contamos con un backup permanente del buzón de cada uno de los usuarios de la empresa.

Microsoft Outlook puede conectarse a un servidor Exchange local, de manera que el buzón del usuario se almacenará en ambos equipos: en la computadora del usuario en un archivo .ost (offline storage table, buzón sin conexión) y en el servidor Exchange.

Los archivos ost permiten a los usuarios accesar a su correo aun cuando el outlook no se encuentre conectado al servidor Exchange; una vez que se conecte, los buzones se sincronizarán. Cuando Outlook se configura para trabajar sin el Exchange, trabaja sobre archivos .pst (personal storage table) que almacena el buzón y demás carpetas del usuario.

Como el buzón en realidad se encuentra almacenado en el servidor, si deseamos formatear la computadora de un usuario o trasladarlo a una nueva computadora, no necesitamos sacar backup de su correo; ya que al configurar el outlook en la nueva computadora, éste se sincronizará con el servidor y creará una copia del buzón almacenado en él en el archivo .ost. Pero hay que tener mucho cuidado con aquellos usuarios que utilicen equipos portátiles y trabajen en sus casas con el outlook, porque si les formateamos sus computadoras antes de que éstas realicen la sincronización con el servidor, los correos que hayan enviado o recibido mientras se encontraban desconectados nunca se almacenaron en el servidor por lo tanto se perderán. Por tal razón, hay que encender la computadora, abrir el outlook, asegurarse que esté conectado con el Exchange y presionar Enviar/Recibir para permitir que la sincronización se lleve a cabo antes de realizar el formateo.

De no tener este cuidado puede ser que nos toque tener que explicarle al usuario lo que ha pasado con esos correos que ha enviado desde su casa el día anterior, y eso...no será tarea fácil.