6
Respaldar bases de datos de SQL Server con Visual Basic .NET Por Juan Carlos Rojas Vargas <Kubical ORG, Costa Rica> Página 1 de 6 Introducción Generalmente cuando se desarrolla una aplicación para un cliente, una de las preguntas importantes que se nos hacen es: ¿Y los respaldos de la base de datos? Con SQL Server tenemos la posibilidad de crear planes de mantenimiento a los que podemos indicarles ciertas opciones, como por ejemplo, la notificación por correo electrónico. De esta forma dejamos de lado el trabajo de incluir en nuestro proyecto un módulo u otra aplicación externa para llevar a cabo los respaldos de información. Personalmente, la desventaja de crear un plan de mantenimiento es que éste se ejecutará con base a los parámetros que le hayamos establecido y no cuando el cliente desee crear un respaldo de su base de datos. También, para modificar y/o ejecutar un plan de mantenimiento (en el momento que se decida), es necesario que el cliente (o el usuario final de la aplicación) tenga un poco de conocimientos de SQL Server, lo cual, si el mismo no cuenta con los conocimientos, significaría realizar una capacitación en esa área y como consecuencia perderíamos tiempo y nuestro cliente deberá desembolsar más dinero. Este pequeño documento se ha creado para indicar a los desarrolladores como llevar a cabo un respaldo de una base de datos utilizando Transact-SQL y Visual Basic .NET. Cabe mencionar que, actualmente con la tecnología .NET es posible crear planes de mantenimiento desde nuestra aplicación, pero este no es nuestro caso, ya que lo haremos directamente con Transact-SQL. Pasos para crear un respaldo desde nuestra aplicación Esta es una breve lista de los pasos que debemos llevar a cabo para desarrollar una aplicación sencilla que nos permita generar respaldos de forma fácil (pensado para usuarios finales sin muchos conocimientos): 1. Obtener la lista de servidores SQL de la red 2. Suministrar los datos de conexión (entiéndase como usuario y contraseña) 3. Obtener el nombre de las bases de datos almacenadas en el servidor 4. Indicar la ubicación y el nombre del respaldo (generalmente el nombre de un respaldo es: el nombre de la base de datos con la fecha y la hora en que se realiza (también incluye la extensión .bak), por ejemplo: kubicalorg- 20090320-134706.bak) 5. Crear el respaldo de la base de datos seleccionada 6. Informar al usuario de lo sucedido

Respaldar bases de datos de SQL Server con Visual Basic .NET

Embed Size (px)

DESCRIPTION

Creacion de respaldos de bases de datos de SQL Server con Visual Basic .NET.

Citation preview

Page 1: Respaldar bases de datos de SQL Server con Visual Basic .NET

Respaldar bases de datos de SQL Server con Visual Basic .NET Por Juan Carlos Rojas Vargas <Kubical ORG, Costa Rica>

Página 1 de 6

Introducción Generalmente cuando se desarrolla una aplicación para un cliente, una de las preguntas importantes que se nos hacen es: ¿Y los respaldos de la base de datos? Con SQL Server tenemos la posibilidad de crear planes de mantenimiento a los que podemos indicarles ciertas opciones, como por ejemplo, la notificación por correo electrónico. De esta forma dejamos de lado el trabajo de incluir en nuestro proyecto un módulo u otra aplicación externa para llevar a cabo los respaldos de información. Personalmente, la desventaja de crear un plan de mantenimiento es que éste se ejecutará con base a los parámetros que le hayamos establecido y no cuando el cliente desee crear un respaldo de su base de datos. También, para modificar y/o ejecutar un plan de mantenimiento (en el momento que se decida), es necesario que el cliente (o el usuario final de la aplicación) tenga un poco de conocimientos de SQL Server, lo cual, si el mismo no cuenta con los conocimientos, significaría realizar una capacitación en esa área y como consecuencia perderíamos tiempo y nuestro cliente deberá desembolsar más dinero. Este pequeño documento se ha creado para indicar a los desarrolladores como llevar a cabo un respaldo de una base de datos utilizando Transact-SQL y Visual Basic .NET. Cabe mencionar que, actualmente con la tecnología .NET es posible crear planes de mantenimiento desde nuestra aplicación, pero este no es nuestro caso, ya que lo haremos directamente con Transact-SQL. Pasos para crear un respaldo desde nuestra aplicación Esta es una breve lista de los pasos que debemos llevar a cabo para desarrollar una aplicación sencilla que nos permita generar respaldos de forma fácil (pensado para usuarios finales sin muchos conocimientos):

1. Obtener la lista de servidores SQL de la red 2. Suministrar los datos de conexión (entiéndase como usuario y contraseña) 3. Obtener el nombre de las bases de datos almacenadas en el servidor 4. Indicar la ubicación y el nombre del respaldo (generalmente el nombre de

un respaldo es: el nombre de la base de datos con la fecha y la hora en que se realiza (también incluye la extensión .bak), por ejemplo: kubicalorg-20090320-134706.bak)

5. Crear el respaldo de la base de datos seleccionada 6. Informar al usuario de lo sucedido

Page 2: Respaldar bases de datos de SQL Server con Visual Basic .NET

Respaldar bases de datos de SQL Server con Visual Basic .NET Por Juan Carlos Rojas Vargas <Kubical ORG, Costa Rica>

Página 2 de 6

Creación de la interfaz de la aplicación En la siguiente imagen puede observarse la apariencia de la aplicación:

Cada uno le da la apariencia que desee, o que crea más conveniente para que el usuario se sienta más cómodo. Lo importante es que, para desarrollar el ejemplo, la interfaz cuente con todos los controles que se muestran en la imagen anterior. A continuación se presenta una lista con los tipos, nombres y propiedades de los controles más importantes que vamos a utilizar:

LISTA DE CONTROLES A UTILIZAR

TIPO NOMBRE PROPIEDAD VALOR

ComboBox cboServidor DropDownStyle DropDownList cboBD DropDownStyle DropDownList TextBox txtUsuario txtContrasena txtDestino ReadOnly Trae BackColor Window Button btnConectar Text C&onectar btnRespaldar Text &Respaldar btnCerrar Text &Cerrar

Page 3: Respaldar bases de datos de SQL Server con Visual Basic .NET

Respaldar bases de datos de SQL Server con Visual Basic .NET Por Juan Carlos Rojas Vargas <Kubical ORG, Costa Rica>

Página 3 de 6

Programando la utilidad de respaldos Ya que tenemos lista la interfaz procederemos a agregar el código para darle vida a nuestro programa. Pero antes, debemos agregar las siguientes referencias:

1. Microsoft.SQLServer.ConnectionInfo 2. Microsoft.SQLServer.Smo 3. Microsoft.SQLServer.SmoEnum

Para agregar las referencias podemos hace clic en la opción Agregar referencia, ubicada en el menú Proyecto. En el formulario que se nos presenta buscamos el nombre de las mencionadas anteriormente y listo. También, vamos a agregar al inicio de nuestra clase (o formulario) las siguientes líneas: Imports Microsoft.SqlServer.Management.Smo Imports system.Data.SqlClient Con todo esto listo, comenzaremos a escribir el código necesario para que la aplicación comience a funcionar. Lo primero que programaremos será un procedimiento con el cual vamos a obtener el nombre de los servidores SQL. Private Sub psServidores() Me .cboServidor.Items.Clear() For Each svrServidor As RegisteredServers.RegisteredServer In _ SmoApplication.SqlServerRegistrations.EnumRegis teredServers Me.cboServidor.Items.Add(svrServidor.Name) Next If Me.cboServidor.Items.Count > 0 Then _ Me.cboServidor.SelectedIndex = 0 End Sub Para cargar nuestro ComboBox con la lista de servidores, llamamos al procedimiento psServidores en el evento Load del formulario: Private Sub frmPrincipal_Load( ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load Call Me.psServidores() End Sub Ahora vamos a programar el evento Click del botón btnConectar. Por medio del siguiente código verificamos que se haya seleccionado un servidor SQL y proporcionado el nombre de usuario (la contraseña no se verifica, ya que en muchos casos hay personas que la dejan en blanco; un gran riesgo de seguridad).

Page 4: Respaldar bases de datos de SQL Server con Visual Basic .NET

Respaldar bases de datos de SQL Server con Visual Basic .NET Por Juan Carlos Rojas Vargas <Kubical ORG, Costa Rica>

Página 4 de 6

Con el siguiente código obtenemos el nombre de las bases de datos almacenadas en el servidor seleccionado por el usuario: Private Sub btnConectar_Click( ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnConectar.Click If Me.cboServidor.Text <> "" And Me.txtUsuario.Text.Trim <> "" Then Dim svrServidor As New Server( Me.cboServidor.Text) Me.cboBD.Items.Clear() Try With svrServidor .ConnectionContext.LoginSecure = False .ConnectionContext.Login = Me.txtUsuario.Text.Trim .ConnectionContext.Password = Me.txtContrasena.Text.Trim For Each bdBase As Database In svrServidor.Databases Me.cboBD.Items.Add(bdBase.Name) Next End With If Me.cboBD.Items.Count > 0 Then Me.cboBD.SelectedIndex = 0 Catch ex As Exception Me.cboBD.Items.Clear() MsgBox(ex.Message, MsgBoxStyle.Critical ) End Try Else If Me.cboServidor.Text.Trim = "" Then If MsgBox( "No se encontraron servidores SQL ¿Desea " _ & "actualizar la lista?" , MsgBoxStyle.Exclamation + _ MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then Call Me.psServidores() End If Else MsgBox( "Por favor, digite el nombre de usuario." , _ MsgBoxStyle.Critical) Me.txtUsuario.Clear() : Me.txtUsuario.Focus() End If End If End Sub Perfecto, ya nuestra aplicación obtiene el nombre de los servidores SQL encontrados y además, nos muestra el nombre de las bases de datos almacenadas en cualquiera de ellos. Vamos a agregar el código para el evento Click del botón btnExaminar, así permitiremos al usuario elegir el directorio donde se almacenará el respaldo: Private Sub btnExaminar_Click( ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnExaminar.Click Dim dlgDestino As New FolderBrowserDialog With dlgDestino .Description = "Seleccione el directorio de destino:" If .ShowDialog = Windows.Forms.DialogResult.OK Then

Page 5: Respaldar bases de datos de SQL Server con Visual Basic .NET

Respaldar bases de datos de SQL Server con Visual Basic .NET Por Juan Carlos Rojas Vargas <Kubical ORG, Costa Rica>

Página 5 de 6

Dim strDestino As String = .SelectedPath.ToString If Not strDestino.EndsWith( "\" ) Then strDestino = strDestino & "\" End If Me.txtDestino.Text = strDestino End If End With End Sub Casi lista la aplicación; lo único que nos falta es crear el respaldo de la base de datos seleccionada por el usuario. Para ello vamos a crear una conexión al servidor SQL y ejecutar el comando de Transact-SQL que nos permitirá crearlo. Además, realizaremos una verificación para determinar si el usuario ha seleccionado una base de datos y especificado el directorio de destino del respaldo. El nombre del respaldo será asignado automáticamente, el formato será el siguiente: nombreoriginal-fecha-hora.bak. Private Sub btnRespaldar_Click( ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnRespaldar.Click If Me.cboBD.Text <> "" And Me.txtDestino.Text.Trim <> "" Then Dim conConexion As New SqlConnection( "data source=" _ & Me.cboServidor.Text & ";user id=" & Me.txtUsuario.Text.Trim _ & ";password=" & Me.txtContrasena.Text.Trim & ";initial " _ & "catalog=" & Me.cboBD.Text & ";" ) Try Dim strNombre_Respaldo As String = Me.cboBD.Text _ & "-" & Date .Now.ToString( "yyyyMMdd" ) & "-" _ & Date .Now.ToString( "HHmmss") & ".bak" conConexion.Open() Dim coSQL As New SqlCommand( "BACKUP DATABASE [" _ & Me.cboBD.Text & "] TO DISK='" & Me.txtDestino.Text _ & strNombre_Respaldo & "'" , conConexion) coSQL.ExecuteNonQuery() MsgBox( "Respaldo creado correctamente :)" , _ MsgBoxStyle.Information) Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.Critical ) Finally conConexion.Close() End Try Else If Me.cboBD.Text = "" Then If Me.cboServidor.Text <> "" Then MsgBox( "Por favor, conéctese al servidor." , _ MsgBoxStyle.Critical) Me.btnConectar.Focus() End If Else

Page 6: Respaldar bases de datos de SQL Server con Visual Basic .NET

Respaldar bases de datos de SQL Server con Visual Basic .NET Por Juan Carlos Rojas Vargas <Kubical ORG, Costa Rica>

Página 6 de 6

MsgBox( "Especifique el destino del respaldo." , _ MsgBoxStyle.Critical) Me.btnExaminar.Focus() End If End If End Sub Notas finales del autor Este es el final del artículo, el código no está comentado ni tampoco se da mucha información acerca de para que sirve cada cosa; pero en fin, espero que haya sido de su ayuda. El código ha sido desarrollado de la forma más simple para que todos los entiendan. Para obtener más información acerca del comando BACKUP de Transact-SQL, puede consultar la siguiente información en la ayuda de SQL Server 2005: ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.en/tsqlref9/html/89a4658a-62f1-4289-8982-f072229720a1.htm Esto lo he dejado para el final, el ejemplo se ha desarrollado utilizando Visual Basic .NET 2005 y SQL Server 2005, pero debería funcionar con cualquier versión de las aplicaciones mencionadas. Si usted tiene dudas acerca de lo mencionado en este documento, sugerencias, correcciones u otras inquietudes, por favor, póngase en contacto con el autor por medio de correo electrónico. Este documento puede distribuirse completa o parcialmente por cualquier medio, siempre y cuando se mencionen los datos del autor.

Juan Carlos Rojas Vargas Kubical ORG, Costa Rica

E-mail: [email protected]