Skip to content

Un script para el backup del esquema de bases de datos SQL Server 2000

20/09/2012

  En muchas oportunidades he tenido que implementar políticas de backup para servidores de bases de datos SQL Server. Pero muchas veces estas políticas, aunque protegen completamente los datos en cada base, no son del todo convenientes si lo que se quiere proteger es el esquema de una base. Por ejemplo, en un servidor de desarrollo es más importante tener protegido el código TSQL de un stored procedure o la definición de una vista que las tablas de la base, que seguramente contendrán datos de prueba poco útiles.

Es por esto que he diseñado un script de VBScript para realizar en forma simple y rápida el backup del esquema de bases de datos de un servidor. El script permite realizar backup en forma simultánea de varias bases de datos y puede ser automatizada su ejecución mediante las tareas programadas de Windows.

Para su funcionamiento es necesario definir en el servidor SQL un login de SQL Server que se llame “SchemaBackup” y este login debe tener asignado el rol de DDLAdmin. Esto permite que el script pueda leer la estructura de las bases a resguardar.

Aquí les dejo el script

'Autor:	Horacio A. Gonzalez (Microsoft Certified Database Administrator SQL Server 2000)
'Fecha	12/05/2009
'Parámetros: Primer parámetro carpeta donde se guardan los backups, luego separado por espacios todos los nombres de las bases a generar scripts
'Aclaraciones: Debe existir en cada base a procesar un usuario asociado al login SchemaBackup con el rol de DDLAdmin
'Constantes:
' SERVIDOR:Nombre del servidor SQL Server donde se ejecuta el script
' MAX_DAYS: Cantidad de días que se conservará cada backup realizado

Option Explicit

const SERVIDOR="NombreServidor"

Dim oSS
Dim oDb
Dim oT
Dim aDatabases
Dim i
Dim sDatabase
Dim sPath

set aDatabases=WScript.Arguments
sPath=aDatabases(0)

for i=1 to aDatabases.count-1
   GenerateScript aDatabases(i), sPath
Next

DeleteHistory sPath

Sub GenerateScript(Database, Path)

Set oSS = CreateObject("SQLDMO.SQLServer")
Set oDb = CreateObject("SQLDMO.Database")
Set oT = CreateObject("SQLDMO.Transfer")
oSS.Connect SERVIDOR, "SchemaBackup", "passwordloginSchemaBackup" 'Se debe utilizar el password usado en el login SchemaBackup
Set oDb = oSS.Databases(Database)
oT.CopyAllObjects = True
oT.DropDestObjectsFirst=False
oT.IncludeDependencies=True
oT.IncludeLogins=True
oT.IncludeUsers=True
oT.Script2Type=8388608 'NO collation

oDb.ScriptTransfer oT,2,Path & "\Schema_" & Database & "_" & YEAR(now) & Pd(Month(now),2) & Pd(DAY(now),2) & ".sql"
Set oT = Nothing
Set oDB = Nothing
Set oSS = Nothing

End Sub

Sub DeleteHistory (Path)

Dim colFiles
Dim oFileSystem
Dim objFolder
Dim objFile
Dim dLimit
dim sLimit
Const MAX_DAYS=3
dLimit=now
dLimit=dateadd ("d",-1*MAX_DAYS,dLimit)
sLimit=YEAR(dLimit) & Pd(Month(dLimit),2) & Pd(DAY(dLimit),2)
set oFileSystem= CreateObject("Scripting.FileSystemObject")
set objFolder=oFileSystem.GetFolder(Path)
Set colFiles = objFolder.Files
For Each objFile in colFiles
 if mid(objFile.name,1,7)="Schema_" then
  if left(right(objFile.name,12),8)<sLimit then
      objFile.Delete
  end if
 end if
Next

End Sub

Function pd(n, totalDigits)
    if totalDigits > len(n) then
        pd = String(totalDigits-len(n),"0") & n
    else
        pd = n
    end if
End Function

Este script posee como requerimiento que sea ejecutado en el servidor local que almacena las bases de datos a resguardar y solo funciona para la versión SQL Server 2000. En otra nota publicada en este blog les presento otra alternativa para encarar este asunto que se basa en el .NET Framework y que es compatible con SQL Server 2005 en adelante (ver esta nota)

From → Microsoft, SQL Server

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: