lunes, 24 de agosto de 2009

Backup & Restore en sql Server

para hacer los respaldos es relativamente facil, yo lo hago con el siguiente Script


ALTER DATABASE testVictor SET SINGLE_USER WITH ROLLBACK IMMEDIATE
BACKUP DATABASE testVictor TO DISK = 'c:\testVictor.bak'
ALTER DATABASE testVictor SET MULTI_USER


nos deja un lindo archivo en c: :D.


Restaurar este archivo es un poco mas complicado yo siempre lo hacia de la siguiente forma:


USE MASTER;
ALTER DATABASE testVictor SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
RESTORE DATABASE testVictorFROM DISK='c:\testVictor.bak' WITH REPLACE


Esto funciona de perillas, hasta el fin de semana, el viernes me pasaron un respaldo de un servidor y al hacer esto me reclamaba por unas rutas, estos backup tienen asociados archivos tanto de log como de Data. los cuales no los tenia en mi pc. pero esto no es tan terrible hay una forma de ver los arhivos que tiene un archivo.bak.


RESTORE FILELISTONLY FROM DISK = 'C:\testVictor.bak'

y esto nos retorna lo siguiente:

LogicalName PhysicalName Type FileGroupName Size MaxSize FileId CreateLSN DropLSN UniqueId ReadOnlyLSN ReadWriteLSN BackupSizeInBytes SourceBlockSize FileGroupId LogGroupGUID DifferentialBaseLSN DifferentialBaseGUID IsReadOnly IsPresent
-------------- -------------------------------------------------------------------------- ------- ---------------- ---------- -------------- --------- ------------ ---------- ------------------------------------ -------------- --------------- -------------------- ------------------ -------------- --------------- ---------------------- ------------------------------------ ------------- ------------
bd_testVictor_data C:\Program Files\Microsoft SQL Server\MSSQL.2\MSSQL\Data\testVictor.mdf D PRIMARY 1092616192 35184372080640 1 0 0 6D0F05F4-7825-462C-B7A4-75145464A721 0 0 1092550656 512 1 (null) 25413000000659900042 0CCB361A-F307-4868-BD93-5A86878225C3 false true
bd_testVictor_log C:\Program Files\Microsoft SQL Server\MSSQL.2\MSSQL\Data\testVictor_log.df L (null) 1511325696 2199023255552 2 0 0 27985F15-05F1-45DE-8D89-A88C9756CACF 0 0 0 512 0 (null) 0 00000000-0000-0000-0000-000000000000 false true


Ahora teniendo los arhivos. podemos decirle al restore que estos archivos los deje en una ruta valida, que nosotros queramos.


use master;
RESTORE DATABASE testVictor
from DISK = N'c:\testvictor.bak'
WITH MOVE 'bd_testVictor_data' TO 'C:\Program Files\Microsoft SQL Server\MSSQL.2\MSSQL\Data\testVictor.mdf',
MOVE 'bd_testVictor_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL.2\MSSQL\Data\testVictor_log.df';


y listo ya esta listo el restore y Backup de una base de datos
--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com

3 comentarios:

  1. Hola ! !

    Muchas gracias, encontre un codigo que no contenia

    ALTER DATABASE BD SET SINGLE_USER WITH ROLLBACK IMMEDIATE

    y

    ALTER DATABASE BD SET MULTI_USER

    y no me restauraba la BD ya que me decia que esta en uso la base, pero con esas lineas ya no me dice eso, pero el problema que no la restaura, hace el proceso y finaliza segun correctamente, pero al revisar bien, no se hizo la restauracion, cual sera el motivo?

    encontre otras dos lineas

    command = new SqlCommand(@"EXEC SP_WHO2", connect);
    command = new SqlCommand(@"KILL SPID", connect);

    con estas si me restaura, pero solo cada 1 ves cada que ejecuto el programa.

    ResponderEliminar
  2. estas seguro que no la restaura??

    ojo que aveces hay respaldos .bak que tienen varios respaldos en el mismo archivo, y estas lineas siempre actualizan el ultimo respaldo contenido en el arhivo.

    suerte!!

    ResponderEliminar
  3. He obrado con una infinidad sql files. Pero he casualmente chocado con - herramienta grafica sql 2005 reparar. El programa asombra gran cantidad las possibilidades. Por ejemplo el resurso ha restituido a mis .mdf ficheros corrompidos. Además el instrumento puede resolver este problema eficazmente y recuperar files.

    ResponderEliminar