miércoles, septiembre 21, 2011

MS Sql Server Backup / Restore sql commands

Con MS SQL Server es posible realizar backups (respaldos) mediante querys (consultas) sql, a través de una conexión a la base de datos usando nuestra herramienta favorita con la que acostumbramos hacer querys (en mi caso Aqua Fold Datastudio).

Respaldar en el directorio por defecto (backup directory in MSSQL directory) con nombre prueba.bak

BACKUP DATABASE pru
TO DISK='prueba.bak';

Restaurar de un backup que se encuentra en el directorio default
Nota: la base de datos que se quiere restaurar no debe estar en uso.

RESTORE DATABASE pru
FROM DISK='prueba.bak';

Restaurar de un backup hacia una base de datos distinta a la original

RESTORE DATABASE pru2
FROM DISK='prueba.bak'
esto lanza el error siguiente
-- [Error] Script lines: 1-3 --------------------------
-- The file 'c:\mssql2005\MSSQL.1\MSSQL\DATA\pru.mdf' cannot be overwritten.  It is being used by database 'pru'.
--
-- More exceptions ... File 'pru' cannot be restored to 'c:\mssql2005\MSSQL.1\MSSQL\DATA\pru.mdf'. Use WITH MOVE to identify a valid location for the file.

Así que necesitamos ver el contenido del backup para ello usamos:

RESTORE FILELISTONLY
FROM DISK='prueba.bak'
esto muestra algo como lo siguiente:

LogicalName PhysicalName Type FileGroupName Size MaxSize FileId CreateLSN DropLSN UniqueId ReadOnlyLSN ReadWriteLSN BackupSizeInBytes SourceBlockSize FileGroupId LogGroupGUID DifferentialBaseLSN DifferentialBaseGUID IsReadOnly IsPresent <br /> -------------- ------------------------------------------- ------- ---------------- ------- -------------- --------- ------------ ---------- ------------------------------------ -------------- --------------- -------------------- ------------------ -------------- --------------- ---------------------- ------------------------------------ ------------- ------------ <br /> pru c:\mssql2005\MSSQL.1\MSSQL\DATA\pru.mdf D PRIMARY 2293760 35184372080640 1 0 0 DB89AE8F-4F86-4633-9063-7BE019ABF8E9 0 0 1441792 512 1 (null) 17000000041200037 8683BDA0-FDA1-4281-B887-5FEE5FD1CC0D false true <br /> pru_log c:\mssql2005\MSSQL.1\MSSQL\DATA\pru_log.LDF L (null) 573440 2199023255552 2 0 0 A9C91979-20E6-4A67-BAEC-48FC68C3E6B6 0 0 0 512 0 (null) 0 00000000-0000-0000-0000-000000000000 false true <br />

Así que usamos la información anterior para hacer la restauración indicando donde queremos colocar los archivos de la base y el log, para ello usamos el Logical name

RESTORE DATABASE pru2
FROM DISK='prueba.bak'
WITH
MOVE 'pru' TO 'c:\mssql2005\MSSQL.1\MSSQL\DATA\pru2.mdf'
,MOVE 'pru_log' TO 'c:\mssql2005\MSSQL.1\MSSQL\DATA\pru2_log.LDF'

<br /> <br /> -- ALGUNOS EJEMPLOS APLICADOS<br /> <br /> BACKUP DATABASE pru<br /> TO DISK='\\10.0.2.2\buzon\pru.bak'<br /> <br /> RESTORE FILELISTONLY<br /> FROM DISK='\\10.0.2.2\shm_altair\plantilla.bak'<br /> <br /> <br /> RESTORE DATABASE altair_plantilla<br /> FROM DISK='\\10.0.2.2\shm_altair\plantilla.bak'<br /> WITH<br /> STATS=10<br /> ,MOVE 'plantilla_Data' TO 'c:\mssql2005\MSSQL.1\MSSQL\DATA\altair_plantilla.mdf'<br /> ,MOVE 'plantilla_Log' TO 'c:\mssql2005\MSSQL.1\MSSQL\DATA\altair_plantilla_log.ldf'<br /> <br />



=========================================================
BACKUP DATABASE pru
TO DISK='C:\bk\pru.bk';

es tan simple como lo anterior, pero hay que asegurarnos de que la cuenta con la que corre el proceso de sql server tiene permiso de escritura en el path donde queremos guardar el archivo de backup, por lo que hay que darle permiso en las propiedades de seguridad a la carpeta, en mi caso el sqlserver corre con la cuenta NETWORK SERVICE y al darle permiso ya no saldra un error como este:

Cannot open backup device 'C:\bk\pru.bk'. Operating system error 5(Access is denied.)

Si el backup es muy grande, podemos agregar lo siguiente para recibir notificación sobre el progreso, en este caso solicitamos notificación cada 10%  (WITH STATS=10) y el comando quedaría así:

BACKUP DATABASE pru

TO DISK='C:\bk\pru.bk'
WITH STATS=10;

Restore sql


Restoringaoeu

Más información:

http://technet.microsoft.com/en-us/library/ms186865(SQL.90).aspx

No hay comentarios.: