JASoft.org

El blog de José Manuel Alarcón Aguín. Programación web y mucho más...

MENÚ - JASoft: JM Alarcón

SQL Server Express: Hacer backups programados y con retención

SQL Server Express es una excelente opción para trabajar con SQL Server en proyectos pequeños y medianos sin tener que pagar licencias. Es una versión gratuita pero totalmente funcional del gestor de base de datos relacionales de Microsoft. A cambio tiene ciertas limitaciones. Por ejemplo, no permite utilizar más de 1 GB de RAM por instancia para caché de datos en memoria y el tamaño de cada base de datos gestionada no puede superar los 10 GB (que es un tamaño considerable para aplicaciones normales). Carece de otras características de alta disponibilidad y replicación, pero ofrece toda la funcionalidad habitual (incluyendo integración de datos y reporting) y las herramientas de administración. Aquí podrás encontrar una comparativa de todas las ediciones de SQL Server.

Una de las cosas que no están disponibles con SQL Server es el Agente SQL. El agente nos permite programar tareas que se ejecutarán sobre las bases de datos cuando nosotros queramos. Esta carencia dificulta un poco, por ejemplo, la realización de copias de seguridad, especialmente si queremos mantener un periodo de retención concreto (por ejemplo, las copias de los últimos 7 días).

Por suerte esta carencia en concreto es muy fácil de solucionar, y en este artículo voy a explicar cómo lograrlo de manera sencilla.

Lo primero que tenemos que saber es que todas las ediciones de SQL Server incluyen una utilidad de línea de comandos que nos permite ejecutar instrucciones T-SQL arbitrarias contra cualquier base de datos. Se trata de SQLCMD.exe, generalmente ubicada en esta ruta:

"C:\Program Files\Microsoft SQL Server\110\Tools\Binn\SQLCMD.EXE"

en el caso de SQL Server 2012 Express.

Esta utilidad tiene muchos parámetros que nos permiten controlar su forma de trabajar. Dos que nos interesan especialmente son:

  • -S: nos permite especificar contra qué servidor/instancia se ejecutarán las sentencias T-SQL.
  • -i: permite especificar una ruta a un archivo (normalmente con extensión .sql) que contiene las instrucciones T-SQL que queremos ejecutar contra el servidor. Así podemos incluir scripts más complejos que una simple línea.

Sabiendo la existencia de esta herramienta, conseguir backups gracias a ella es muy sencillo.

1. Construir las instrucciones T-SQL base para hacer el backup

Lo primero es conseguir las comandos T-SQl para hacer un backup. Lo más sencillo es usar las herramientas integradas en el Microsoft SQL Server Management Studio (MSSMS). Ábrelo, busca la base de datos que te interesa copiar en el explorador de objetos y pulsa el botón derecho del ratón sobre ella. En el menú contextual elige la opción de "Tareas·backup…":

SQLServerExpressBackups1

Esto abre una nueva ventana desde la que podemos definir cómo queremos realizar el backup:

SQLServerExpressBackups2

Desde esta ventana elegimos la base de datos a copiar y la ruta en la que queremos guardar dicha copia de seguridad (normalmente le damos como extensión al archivo .bak, pero puede ser cualquiera o incluso no tener extensión).

Además si pulsamos en la página "Opciones" en el lateral podemos configurar algunas cosas más, como por ejemplo (muy recomendable) que se verifique el backup al terminar de hacerlo:

SQLServerExpressBackups3

OJO: la edición Express no soporta la compresión de los backups, así que si seleccionamos esta opción en la lista desplegable de la parte inferior de la figura anterior, se producirá un error al realizar el backup.

Una vez que tengamos seleccionadas todas las opciones que necesitemos, podemos obtener el código necesario para realizar el backup usando el botón "Script" de la parte superior de la ventana anterior. Por defecto nos copiará el código generado a una ventana del MSSMS, así:

SQLServerExpressBackups4

Con esto obtendríamos una base de datos que se sobrescribiría en cada nueva copia, Lo interesante de las copias de seguridad es tener copias con una retención de varios días, para poder comprobar datos anteriores o restaurar los datos a un estado anterior.

2. Retocar el script para darle una semana de retención

Supongamos que queremos hacer una copia de seguridad diaria y que queremos mantener las copias durante 7 días, de modo que podamos recuperar los datos desde cualquier copia de seguridad de la última semana. Para ello vamos a retocar el script anterior de modo que cada día le cambie el nombre al archivo de copia de seguridad. Para ello vamos a declarar una variable que servirá para guardar la ruta y el nombre del archivo de copia de seguridad, cambiándolo en función, en este caso, del día de la semana en el que nos encontremos. En este caso sería así:

DECLARE @dest nvarchar(255)
SET @dest = 'C:\BackupsBBDD\SELF_' + CAST(DATEPART(weekday, GETDATE()) AS nvarchar(1)) + '.bak'

La función DATEPART con el valor weekday para el primer parámetro nos devuelve un número para cada día de la semana, empezando por el domingo (un 1)  hasta el sábado (un 7). Como le pasamos la fecha actual (GETDATE) como segundo parámetro lo que obtendremos en la variable @dest es cada día un nombre diferente para la base de datos, añadiéndole el número de día de la semana para obtener nombres estilo: SELF_1.bak, SELF_2.bak, SELF_3.bak y así sucesivamente.

En el script generado por el MSSMS bastará ahora por sustituir la ruta por el nombre de esta variable y ya lo tendremos listo (ojo: hay que susituirlo en dos sitios: en el backup y en la verificación del backup en la parte inferior).

Dado que en caso de que un archivo exista de backup se sobrescribirá, en la práctica con este script lo que conseguimos es que siempre haya 7 copias como máximo en el histórico.

3. Crear un bat para realizar el backup

Ahora que ya tenemos el código necesario para crear las copias de seguridad lo que debemos hacer es crear un archivo .bat que nos permita ejecutar este código T-SQL cuando queramos. Para ello usaremos SQLCMD.EXE, escribiendo esta instrucción:

"C:\Program Files\Microsoft SQL Server\110\Tools\Binn\SQLCMD.EXE" -S SERVIDOR\INSTANCIA -i "C:\BackupsBBDD\BackupSELF.sql" >> log.txt

Debemos sustituir SERVIDOR\INSTANCIA por el nombre de nuestro servidor y la instancia de SQL Server sobre la que queremos trabajar. En el parámetro -i debemos indicar la ruta al archivo .sql con las instrucciones para la copia de seguridad que acabamos de crear.

La última instrucción ">> log.txt" nos permite guardar el resultado de la ejecución en un archivo de texto que podemos consultar para ver cuándo se ha realizado cada copia, cuánto ha tardado y cualquier otro mensaje que se derive de la ejecución del script. E spor eso que me gusta colocarle al principio del script una instrucción más como esta:

PRINT CAST(GETDATE() AS nvarchar) + ' - COPIA DE SEGURIDAD INICIADA AL ARCHIVO: ' + @dest

De este modo aparecerá en el archivo Log.txt un mensaje al principio de cada copia de seguridad indicando la fecha de creación y el nombre del archivo. Podemos incluir del mismo modo cualquier otra información que consideremos relevante.

4. Programar la tarea

Ahora que ya tenemos un script para hacer la copia de seguridad, y además hemos creado un .bat para ejecutarlo, lo único que nos falta es crear una tarea programada para poder lanzarla con la periodicidad que nos convenga (en principio cada día).

Para ello abrimos el administrador de tareas programadas del sistema y creamos una nueva tarea. Lo único que tendremos que hacer es indicar que queremos ejecutar el archivo .bat del paso anterior así como a qué hora del día lo vamos a hacer:

SQLServerExpressBackups5

 

Con esto habremos conseguido que todos los días a las 2:00 de la mañana se realice una copia de seguridad de la base de datos, con una retención de 7 días:

SQLServerExpressBackups6

Cada uno de esos archivos se corresponde con la copia de seguridad del domingo (1), lunes (2), martes 83), etc…

Si quisiésemos un periodo de retención de un mes, por ejemplo, sería tan fácil como cambiar el parámetro de DATEPART por "day" de modo que se pusiera el número de día del mes. Podemos jugar con los distintos valores del primer parámetro de DATEPART para conseguir otros periodos, como por ejemplo, si hacemos más de una copia al día, añadirle la hora de modo que tengamos más de un archivo diario.

¡Espero que te resulte útil!

Si quieres aprender a programar bien SQL Server, no te pierdas estos dos cursos de campusMVP (en inglés):

del MVP italiano Alessandro Alpi. Aprenderás a sacarle todo el partido a SQL Server ya optimizar tus aplicaciones.

José Manuel Alarcón José Manuel Alarcón
Fundador de campusMVP.es, el proyecto de referencia en formación on-line para programadores en lengua española. Autor de varios libros y cientos de artículos. Galardonado como MVP de Microsoft desde 2004. Gallego de Vigo, amante de la ciencia y la tecnología, la música y la lectura. Ayudando a la gente en Internet desde 1996.
Descarga GRATIS mi último libro (no técnico): "Tres Monos, Diez Minutos".
Banner

Comentarios (38) -

Colombia Henry Renza

Buenas tardes, he llevado a cabo los pasos pero no tengo mujy claro el paso 3. Especificamente cuales son los comandos que debo hacer y donde los debo de hacer ? - Tengo entendido que es en el CMD de windows y a que se refiere con la instancia del servidor en SERVIDOR\INSTANCIA

Muchas gracias por la yuda... Mi correo es [email protected]

Responder

Colombia Carlitoris

!woowwww!!!! que buen post mi hermano, lo hice tal cual y me funciono perfectamente, hace tiempo que andaba buscando un script para esto pero no era posible, ya que siempre encontraba información relacionada con el agente de sql server y nada de la version express.
muchas gracias.

Responder

Guatemala Erick Racancoj

Buenísimo, acaba de probarlo y todo perfecto, lo unico que al nombre de la instancia y del servidor hay que colocarlo dentro de comillas tambien. Probe BackUp y Restore y todo perfecto.

Responder

Dominican Republic Rene Guillon

Excelente post. Me vino de maravilla. El único cambio que hay que hacerle es las comillas que debe llevar la variable

cambiar esto:

PRINT CAST(GETDATE() AS nvarchar) + ' - COPIA DE SEGURIDAD INICIADA AL ARCHIVO: ' + @dest

por esto:

PRINT CAST(GETDATE() AS nvarchar) + ' - COPIA DE SEGURIDAD INICIADA AL ARCHIVO: ' + '@dest'

por otra parte, resulta que mi instancia no tenia nombre así que solo deje el nombre del servidor y me funcionó de manera perfecta.

Me gustaría saber si con este procedimiento puedo hacer algo similar con la base de datos de transacciones (log). Podrías colocar un post para esto?

Nuevamente gracias por el post.

Responder

Hola que tal he seguido todo pero no me funciona - creo que no veo el arbol en el bosque
mi archivo sql
-----
DECLARE @dest nvarchar(255)
SET @dest = N'D:\Users\wendres\Documents\sql\applus_' + CAST(DATEPART(weekday, GETDATE()) AS nvarchar(1)) + '.bak'

BACKUP DATABASE [applus-databaseSQL] TO  DISK = '@dest' WITH NOFORMAT, INIT,  NAME = N'applus-databaseSQL', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
GO
declare @backupSetId as int
select @backupSetId = position from msdb..backupset where database_name=N'applus-databaseSQL' and backup_set_id=(select max(backup_set_id) from msdb..backupset where database_name=N'applus-databaseSQL' )
if @backupSetId is null begin raiserror(N'Error de comprobación. No se encuentra la información de copia de seguridad para la base de datos ''applus-databaseSQL''.', 16, 1) end
RESTORE VERIFYONLY FROM  DISK = '@dest' WITH  FILE = @backupSetId,  NOUNLOAD,  NOREWIND
GO
-------

el archivo bat:

PRINT CAST(GETDATE() AS nvarchar) + ' - COPIA DE SEGURIDAD INICIADA AL ARCHIVO: ' + '@dest'
"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE" -S PV65N1\CRD -i "D:\Users\wendres\Documents\sql\backup-database.sql" >> log.txt

no genera el archivo de backup

que esta mal

porfavor necestio su ayuda

Responder

Muy bueno hermano gracias!!!

Responder

Wolf quitas las comillas de la variable.

DISK = '@dest'     deberia ser asi:

DISK = @dest

Saludos

Responder

Mexico error consulta

hola buanas tardes como sustituyo o cual es la sintaxis correcta para sustituir la variable @dest por la ruta he probado muchas combinaciones pero me sigue marcadi errores.

Responder

Spain jordi estrada

todo bien detallado

Responder

Excelente articulo!

Una preg. es cierto que se tiene que detener la instancia de la BD antes de respaldar?

Como seria?

Responder

Spain José M. Alarcón

Hola:

No, no hay que detener la instancia para hacer copia de seguridad. ¡Solo faltaría! Imagínate qué pasaría en servidores que necesitan alta disponibilidad si fuera así...

Saludos.

Responder

Mexico Edgar F Delgado Z

Gracias Jose M Alarcon.

Un favor,  podrias orientarme o dirigirme a una liga donde explique a detalle (como este blog)  de que manera se puede RESTAURAR el respaldo creado.

Saludos!!!

Responder

Spain Juan Jose Romo

Excelente amigo me sirvio mucho

Responder

pregunton

Intesante JOse. Gracias !!

También un bat con schtasks para configurar tareas programadas, o un powershell.

Imagino también se podría para configurar e invocar Jobs? Lo desconozco

Responder

That was great. Thank you very much brother. Was hard at first, but finally i've made it. Thanks.

Responder

Beginning*

Responder

Gracias! Funciona perfecto!!!

Una pregunta, en este tipo de instancias "express" como se puede llegar a comprimir la copia? Hay algún metodo alternativo dado que es una limitación del propio SQL Express? Necesito comprimirla y no veo el como.

Saludos y Gracias por tu trabajo!

Responder

by Jose M. Alarcon

Hola:

En la edición express no se puede comprimir, al menos que yo sepa, precisamente por lo que dices: tienes una limitación de la licencia.

Saludos.

Responder

Correcto! ;)

La pregunta es más bien sobre si hay alguna manera de hacerla comprimida por línea de comandos o por algún software de terceros o alguna alternativa ;)

Saludos y Gracias!

Responder

by Jose M. Alarcon

Hola:

Pues imagino que no sería muy problemático, si tienes los permisos adecuados, lanzar un 7-zip o similar por línea de comandos para que lo comprima usando xp_cmdshell . No lo he intentado pero supongo que no hay problema.

Aquí tienes otro post mío explicando como usar ese comando, pero para copiar a carpetas de red: www.jasoft.org/.../...-4105-4ddb-b547-d0d1e1c.aspx

Saludos.

Responder

Felipe Soto

hola Buenas, me salio excelente la prueba que hice con el codigo, muy buen aporte, pero me sale este error al final en el log:

Msg 137, Level 15, State 2, Server SERVIDOR\INSTANCIA, Line 4
Debe declarar la variable escalar "@dest".
Msg 319, Level 15, State 1, Server SERVIDOR\INSTANCIA, Line 4
Sintaxis incorrecta junto a la palabra clave 'with'. Si esta instrucci¢n es una expresi¢n de tabla com£n, una cl usula xmlnamespaces o una cl usula de contexto de seguimiento de cambios, la instrucci¢n anterior debe terminarse con punto y coma.

Infomacion adicional:
Trabajo con windows 10 home, build 10.0.14393
Microsoft SQL Server 2012 Express

incluyo esa info por que al dejarlo por administrador de tareas el log no se genera, solo la base de datos, pero si ejecuto directamente el bat si lo genera.

en resumen, se ejecuta correctamente pero me tira ese error, aqui va el codigo del script generado:

DECLARE @dest nvarchar(255)

SET @dest = 'C:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\Backup\DBFarmacalLocal_' + CAST(DATEPART(weekday, GETDATE()) AS nvarchar(1)) + '.bak'

PRINT CAST(GETDATE() AS nvarchar) + ' - COPIA DE SEGURIDAD INICIADA AL ARCHIVO: ' + @dest

BACKUP DATABASE [DBFarmacalLocal] TO  DISK = @dest WITH NOFORMAT, INIT,  NAME = N'DBFarmacalLocal-Completa Base de datos Copia de seguridad', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
GO
declare @backupSetId as int
select @backupSetId = position from msdb..backupset where database_name=N'DBFarmacalLocal' and backup_set_id=(select max(backup_set_id) from msdb..backupset where database_name=N'DBFarmacalLocal' )

if @backupSetId is null begin raiserror(N'Error de comprobación. No se encuentra la información de copia de seguridad para la base de datos ''DBFarmacalLocal''.', 16, 1) end
RESTORE VERIFYONLY FROM  DISK = @dest WITH  FILE = @backupSetId,  NOUNLOAD,  NOREWIND
GO

Bueno te agradeceria si me pudieras orientar en esto Jose M. Alarcon

de antemano gracias nuevamente.

Responder

by Jose M. Alarcon

El error te lo da en la parte final porque tienes varios GO por el medio y las variables declaradas delante de un GO dejan de estar disponibles después de éste. Quítale los GO y seguro que ya not e da ese error.

Saludos.

Responder

Felipe Soto

Jose M. Alarcon, muchas gracias, justamente era eso, te vuelvo a agradecer por tus post, que me han sido de gran ayuda, gracias por ayudar y compartir tus conocimientos!!

Se agradece.

Responder

pregunton

Mejor el código en gist :-)

Responder

Alexander Orlas Gutiérrez

Tengo dos preguntas, aunque una fuera del contexto del artículo:

1. Después de meses de haber probado la solución, estuve revisando mis BackUps y resulta que al revisar el tamaño de la base de datos comparado con el tamaño del backup, el backup pesa muchísimo mas que la misma base de datos, ¿hay alguna cosa que haya hecho mala?

2. Actualmente estoy buscando la manera de realizar un planes de mantenimiento en la base de datos sobre la cual trabajo (chequeo de integridad y  referencias, desfragmentación de índices, etc) y resulta que mi empresa maneja es la versión express, no la standard, ¿habrá alguna manera de programar dichos planes de mantenimiento con scripts personalizados y el programador de tareas de windows?

Recientemente me encontré con los scripts de Ola Hallengren, pero los scripts son muy largos.

Un saludo de antemano.

Responder

by Jose M. Alarcon

Hola:

Es posible que el backup te ocupe más que la base de datos si lo estás haciendo en modo de recuperación total o has usado la opción de anexar las copias al mismo backup (por lo que se acumulan), o algo por el estilo, pero es raro.

Puedes hacer los mantenimientos del mismo modo que se explica en este post, usando .bats con SQLCOMD.exe y programando tareas.

Los scripts esos no los conozco, pero si son largos será por que se necesita y en cualquier caso te da igual para usar la técnica  que comento de .bats + tareas programadas.

Saludos.

Responder

Hola Jose, acabo de hacer el script, y tal cual lo explicaste anduvo muy bien, pero es verdad que duplica el tamaño del archivo al sobreescribirlo, como dice Alexander, me paso lo siguiente:
genera el archivo de backup (ejemplo): copia3.bak de 4826 kb, cuando vuelvo a generar la copia, o sea ejecuto el .bat nuevamente me muestra: copia3.bak de 9652 kb y asi sucesivamente , en mi caso lo aumenta en 4826kb..porque será...
Desde ya muchas gracias por tu aporte, saludos, y sigo investigando!!!

Responder

Bueno, claramente era ver un poquito mas, y si como decias Jose, es porque se genera dentro del mismo archivo .bak, lo que hice fue cambiarle esa opcion en tareas de copia de seguridad del Sql Managment, generé el script nuevamente, y listo..funcionó, ya no aumenta el tamaño cada vez que hago la copia.
Saludos

Responder

Alexander Orlas Gutièrrez

¿Me podrías mandar como queda el script o decirme qué es lo que hay que cambiarle en sí para que no me siga sobreocupando espacio en el disco?

Muchas gracias, Adriana.

Saludos.

Responder

Hola! he estado probado esto y croe que casi lo tengo listo.

Lo que no logro hacer es que se ejecute el bat correctamente, no se si es porque en algun punto pide credenciales o algo por el estilo.

Como puedo hacer para que lleve credenciales el .bat

Es una instancia de Sql Server 2012

Responder

Mi Archivo .bat es asi

"C:\Program Files\Microsoft SQL Server\110\Tools\Binn\SQLCMD.EXE" -S SERVIDOR\MSSQLSERVER -i "C:\Users\Administrador\Documents\BackupAMTPRD.sql"


Mis SQL es el siguiente :

DECLARE @dest nvarchar(255)
SET @dest = N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup\AmtPrd_' + cast(GETDATE() AS nvarchar(8)) + '.bak'


BACKUP DATABASE [BASE] TO  DISK = @dest
WITH NOFORMAT, INIT,  NAME = N'BASE-Full Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
GO
declare @backupSetId as int
select @backupSetId = position from msdb..backupset where database_name=N'DB_AUTOMOTO_PRD' and
backup_set_id=(select max(backup_set_id) from msdb..backupset where database_name=N'BASE' )
if @backupSetId is null begin raiserror(N'Verify failed. Backup information for database ''BASE'' not found.', 16, 1) end
RESTORE VERIFYONLY FROM  DISK = @dest WITH FILE = @backupSetId,  NOUNLOAD,  NOREWIND
GO


Y el resultado es el siguiente :

BACKUP DATABASE successfully processed 93782 pages in 17.412 seconds (42.078 MB/sec).
Msg 137, Level 15, State 2, Line 5
Must declare the scalar variable "@dest".
Msg 319, Level 15, State 1, Line 5
Incorrect syntax near the keyword 'with'. If this statement is a common table expression, an xmlnamespaces clause or a change tracking context clause, the previous statement must be terminated with a semicolon.

Responder

Preguntón cojonero

IMHO, mejor el código en gist o pastebin.

Para todo lo demás, stack overflow

Problema sintaxis.

Atención opción noformat vs format

Responder

hola javier, yo tengo el mismo mensaje que tu, pregunta, lo pudiste resolver?

cristian

Responder

Hola, muy buen post me puedes ayudar por favor con alguna referencia para realizar este tipo de procedimiento pero con replicaciones???

Muchas gracias

Responder

Muchisimas gracias!

Responder

hola,  después de ejecutar tengo el siguiente mensaje, quien me puede ayudar, gracias

Processed 2 pages for database 'KBT1', file 'COSERCO3_log' on file 1.
BACKUP DATABASE successfully processed 149442 pages in 17.154 seconds (68.060 MB/sec).
Msg 137, Level 15, State 2, Line 4
Must declare the scalar variable "@dest".
Msg 319, Level 15, State 1, Line 4
Incorrect syntax near the keyword 'with'. If this statement is a common table expression, an xmlnamespaces clause or a change tracking context clause, the previous statement must be terminated with a semicolon.

Responder

Daniel Martinez

Hola oye primero que nada gracias por este gran aporte, solo que necesito que si de favor me dices como seria el codigo para hacer mas de una copia de seguridad al dia...

Responder

Jesus Garcia

ayuda por favor segui los pasos pero no me hace el back up de la base de datos el .bat si corre pero no se genera el back up

el contenido del .bat
"C:\Program Files\Microsoft SQL Server\110\Tools\Binn\SQLCMD.EXE" -S JOBBOSSN\MSSQLSERVER -i "C:

\Users\Administrador\Documents\SQLQuery1.Sql" >> log.txt

el contenido del Query
DECLARE @dest nvarchar(255)

SET @dest = 'C:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\Backup\PRODUCTION_' +

CAST(DATEPART(weekday, GETDATE()) AS nvarchar(1)) + '.bak'


BACKUP DATABASE [PRODUCTION] TO  DISK = N'C:\Program Files\Microsoft SQL Server

\MSSQL11.MSSQLSERVER\MSSQL\Backup\PRODUCTION' WITH NOFORMAT, INIT,  NAME = N'PRODUCTION-Full

Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
GO
declare @backupSetId as int
select @backupSetId = position from msdb..backupset where database_name=N'PRODUCTION' and

backup_set_id=(select max(backup_set_id) from msdb..backupset where database_name=N'PRODUCTION' )
if @backupSetId is null begin raiserror(N'Verify failed. Backup information for database

''PRODUCTION'' not found.', 16, 1) end
RESTORE VERIFYONLY FROM  DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER

\MSSQL\Backup\PRODUCTION' WITH  FILE = @backupSetId,  NOUNLOAD,  NOREWIND
GO

Responder

Agregar comentario