Desde que salieron las versiones “express” de Microsoft SQL Server, (a partir de la versión 2005),estas han tenido una gran aceptación debido a que una de sus principales ventajas es la utilización de forma gratuita tanto para el desarrollo como para el despliegue de aplicaciones a mediana escala.

Junto con estas versiones de SQL, Microsoft nos ofrece una herramienta (SQL Server Management Studio Express) para la administración de la base de datos. Y aunque con esta herramienta tenemos muchas de las opciones disponibles en las versiones de pago, una de las que mas se echa en falta es la capacidad de poder programar tareas (Jobs) de SQL Server, ya que el Agente de SQL Server no forma parte de la versión “Express”. Funcionalidad extremadamente útil en la programación de copias de seguridad.

Solución

Para lograr automatizar las copias de seguridad, lo primero que hay que hacer es crear un script de sql que las realice. Este puede ser tan complicado como se necesite. En mi caso un requerimiento era poder contar con una copia de seguridad de al menos una semana. A continuación les muestro el script que utilizo. Este script lo único que hace es incluir el nombre del día de la semana en la ruta del fichero de copia de seguridad, así cuando este se ejecute solo sobrescribirá el “.bak” una vez a la semana.

use master

declare @localServerPath varchar(100) -–ruta local en el servidor

set @localServerPath = 'C:\SqlServer\_BACKUP\' 

declare databasesToBackup cursor for 
select name from master..sysdatabases where name not in ('tempdb') 

open databasesToBackup 
declare 
@dbName varchar(100), 
@backupPath varchar(100) -–nombre del archivo de copia de seguridad incluida la ruta

fetch next  from databasesToBackup into @dbName 

While (@@fetch_status = 0) 
BEGIN 
   set @backupPath = @localServerPath +@dbName + '\' + CONVERT(VARCHAR,LOWER(Datename(DW, GETDATE()))) + '\' + @dbName + '.bak'
   backup database @dbName to disk = @backupPath with init 
   fetch next  from databasesToBackup into @dbName 
END 

close databasesToBackup 
deallocate databasesToBackup 

Una vez que tenemos el script que nos realiza la copia la copia de seguridad, podemos crear una tarea programada en Windows que ejecute un .bat como el que sigue.

Sqlcmd -E -S .\SQLEXPRESS -iC:\SqlServer\_BACKUP\DailyBackUp.sql

Donde DailyBackUp.sql es el fichero que contiene el script de sql antes mencionado.

Para la creación de la tarea programada abrimos el "Programador de Tareas de Windows"

Programador_de_Tareas

Le damos un nombre descriptivo

Tarea_Basica

Escogemos la periodicidad:

repeticion

y le damos el archivo .bat que queremos ejecutar.

iniciar_programa

y con esto tendríamos automatizadas las copias de seguridad a pesar de no contar con el agente de SQL Server.


SQL Server Management Studio permite la ejecución de Scripts de SQLCMD (mas información acerca de la utilidad SQLCMD en MSDN).

Para habilitar o deshabilitar SQLCMD en SQL Server Management Studio marque el checkbox
“By default, Open new queries in SQLCMD” de la ventana opciones ( Tools->Options->Query Execution –> SQL Server –> General)

sqlcmd

Una vez hecho esto todas las nuevas ventanas tendrán habilitada o deshabilitada la posibilidad de ejecutar código SQLCMD.

Si lo que quieres es habilitar o deshabilitar para una ventana en específico sin cambiar el valor global de configuración solo deberías activar o desactivar el botón de la barra de herramientas “SQLCMD Mode”

sqlcmd_toolbar

Una vez que habilites SQLCMD podrás ejecutar desde SQL Server Management Studio código como el que sigue a continuación.

:setvar DatabaseName "DB"
:setvar PrimaryFilePhysicalName "C:\DATA\DB.mdf"
:setvar PrimaryLogFilePhysicalName "C:\DATA\DB_log.ldf"

USE [master]

GO

IF (DB_ID(N'$(DatabaseName)') IS NULL) 
BEGIN
    CREATE DATABASE [$(DatabaseName)] ON ( NAME = N'PrimaryFileName', FILENAME = N'$(PrimaryFilePhysicalName)') LOG ON ( NAME = N'PrimaryLogFileName', FILENAME = N'$(PrimaryLogFilePhysicalName)') COLLATE Modern_Spanish_CI_AI 
END
GO

:on error exit

Este tipo de código es el que genera, por ejemplo, un proyecto de “Base de Datos” de Visual Studio.


 |