11 Consejos para Hacer Copias de Seguridad con SMO, VB, C# PowerShell y Línea de Comandos

Introducción

Algunas veces necesitamos crear copias de seguridad utilizando código, y necesitamos hacerlo de forma manual o automática, o tal vez programáticamente utilizando C#, VB, Powershell. Este tutorial te enseñará 11 formas de hacerlo.

Consejo 1: La copia de seguridad simple

La forma más sencilla de crear una copia de seguridad es utilizando el SQL Server Management Studio (Administrador Corporativo) con un click derecho en la base de datos y seleccionado Tasks (Tareas)>Backup (Copia de Seguridad).

Puedes elegir la ruta por defecto para realizar la copia de seguridad y especificar otras opciones de la copia de seguridad en el diálogo que aparece.

Consejo 2: Generar código T-SQL para realizar la copia de seguridad automáticamente

Para generar el código T-SQL, necesitas utilizar la opción del menú Script Action to New Query Window (Nueva Ventana de Consulta) o to File (Archivo) o Clipboard (Portapapeles).  Estas opciones generaran el código T-SQL para realizar la copia de seguridad automáticamente.

El código creado automáticamente:

BACKUP DATABASE [test] TO  DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup\test.bak' WITH NOFORMAT, NOINIT,  NAME = N'test-Full Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10

GO


Consejo 3: Copia de seguridad utilizando la línea de comandos


Algunas veces necesitamos utilizar la línea de comandos para realizar la copia de seguridad. Para esos casos, puedes utilizar la utilidad sqlcmd que viene con SQL Server. Para iniciarla, en una ventana de línea de comandos ejecuta el comando SQLCMD. En una máquina local la utiliza se conectará a la instancia, en otro caso deberías especificar el nombre del servidor de la siguiente forma:



Sqlcmd –S dominio\nombreinstancia


Para realizar la copia de seguridad de la base de datos estariamos utilizando el T-SQL que generamos en el Consejo 2, en un archivo llamado sqlbackup.sql.Para ejecutar el script ejecuta este comando en la ventana de línea de comandos:



Sqlcmd –i c:\sqlbackup.sql


Este comando ejecuta el archivo .sql y crea una copia de seguridad.



Consejo 4: Crea una copia de seguridad programada utilizando Jobs del mismo SQL Server


Los jobs o trabajos nos dejan programar diferentes tareas para administración y mantenimiento. Puede programar que una copia de seguridad se realice diariamente a una hora especifica. La forma más fácil de hacerlo es seleccionar "Script Action to Job" en la ventana mencionada en Consejo 1.





El trabajo es creado automáticamente.





Y puedes especificar la programación en la que se realizará la copia de seguridad.







Consejo 5: Programar una copia de seguridad sin el SQL Agent


Alguna veces solo tienes la edición SQL Express, la cual no incluye el SQL Agent. En este caso puedes utilizar el Consejo 3 dentro de un archivo por lotes como el siguiente:



Nombre de Archivo:Backup.bat



Sqlcmd –i c:\sqlbackup.sql


Luego puedes utilizar el programador de tareas que viene con el sistema operativo Windows y llamar el archivo .bat.







Consejo 6: Crear una copia de seguridad utilizando PowerShell


PowerShell es una herramienta muy poderosa que puede ser utilizada para tareas administrativas automatizadas relacionadas con el sistema operativo, bases de datos, servidor web, servidor de correo, etc. Es algo bastante útil que con unas cuantas líneas de código nos hace la vida más sencilla.



Para iniciar PowerShell, haz click derecho en Databases (Bases de datos) en el SQL Server Management Studio y selecciona Iniciar Powershell.





Necesitaremos el archivo sqlbackup1.sql creado en el consejo 3. Para invocar el script SQL con PowerShell, ejecuta la siguiente línea:



Invoke-Sqlcmd -InputFile "C:\sqlbackup1.sql"


Consejo 7: El asistente de Planes de Mantenimiento (Maintenance plan wizard)


SQL Server trae incluído un asistente para generar copias de seguridad, mantenimiento de índices, reducir bases de datos, etc. Para iniciar el asistente, vamos a Management>Maintenance Plan y seleccionamos el Maintenance Plan Wizard.





Puedes revisar la integridad de bases de datos, reducir, reorganizar índices, etc. En este caso queremos ejecutar la copia de seguridad de una base de datos.





Puedes seleccionar múltiples bases de datos para realizar la copia de seguridad desde este diálogo.



Consejo 8: El Plan de Mantenimiento



Algunas veces necesitamos personalizar un plan de mantenimiento y el asistente no nos puede ayudar lo suficiente. En este caso creamos un nuevo plan de mantenimiento (maintenance plan).





Esta herramienta te deja crear tareas y puedes conectar las tareas gráficamente. Puedes cambiar el orden de las tareas cuando sean ejecutadas o ejecutar diferentes tareas en caso una falle.







Consejo 9: SQL Server Data Tools


Si tienes SQL Server 2008 o 2005 esta aplicación se llama SQL Server Business Intelligence (BIDS), pero en SQL Server 2012 fue renombrada a SQL Server Data Tools.





En SSDT, puedes abrir un Integration Service Project y luego puedes combinar la copia de seguridad con otras tareas como enviar email, tareas de FTP, ejecutar procesos. Por ejemplo puedes recibir un email si la copia de seguridad falla o subirla a un FTP. También puedes invocar archivos por lotes, llamar servicios web o ejecutar scripts C#.





Consejo 10. ADO.net



Para Windows Forms y ASP.net es común utilizar ADO.net. ADO.net es utilizado en aplicaciones para insertar, eliminar o actualizar datos. Sin embargo puedes hacer una copia de seguridad de una base de datos utilizando ADO.net. el siguiente es un ejemplo de como realizar una copia de seguridad.



//C# codigo para crear una copia de seguridad con ADO.net
using System.Data.SqlClient;


//Crear una conexión a la base de datos de prueba.


//Integrated security is Windows
//Authentication
string ConnectionString = @"Data Source=Localhost;" +
"Initial Catalog=test;Integrated Security=True";
SqlConnection cnn = new SqlConnection(ConnectionString);

//backup the database test in the c:\backup folder
SqlCommand cmd = new SqlCommand(@"BACKUP DATABASE [test] TO "+
@"DISK = N'C:\backup\test.bak'", cnn);
cmd.CommandType = CommandType.Text;

cnn.Open();
//Execute the command

cmd.ExecuteNonQuery();

Console.Write("Backup completed successfully");

cnn.Close();


Consejo 11. SMO


SMO o SQL Management Objects es una gran opción utilizada por C# y Visual Basic. El siguiente ejemplo muestra como realizar una copia de seguridad utilizando VB:



Necesitas agregar los siguiente ensamblados: 




  • Microsoft.SqlServer.ConnectionInfo.dll


  • Microsoft.SqlServer.Smo.dll


  • Microsoft.SqlServer.SmoEnum.dll


  • Microsoft.SqlServer.SqlEnum.dll


  • Microsoft.SqlServer.Management.Sdk.Sfc.dll 



Luego crear el código:



Imports Microsoft.SqlServer.Management.Smo
Sub Main()

'Enter the name of the database
backupmethod("test")

End Sub
'Method to make the Backup
Private Sub backupmethod(bd)
Dim Myserver As Server = New Server("localhost")
'Create the instance of the class backup
Dim backup As Backup = New Backup()
'Use windows authentication
Myserver.ConnectionContext.LoginSecure = True
Try
'Connect to the server
Myserver.ConnectionContext.Connect()
Console.WriteLine("*** Backing up ***")
Dim path As String
'Set the path of the backup
path = "C:\Testd.bak"
backup.Devices.AddDevice(path, DeviceType.File)
backup.Database = bd

'select the type of backup action (you can also make backup
'copies of records and archives)
backup.Action = BackupActionType.Database
'If the backup is not incremental set to false
backup.Incremental = False

backup.Initialize = True
backup.LogTruncation = BackupTruncateLogType.Truncate
backup.SqlBackup(Myserver)
Console.ReadKey()
'close the connection to server
Myserver.ConnectionContext.Disconnect();
Catch ex As Exception
Console.WriteLine("Connection failed.")
End Try

End Sub


Conclusiones



Cuando trabajas con SQL Server necesitas conectar con otras aplicaciones utilizando métodos diferentes. El tutorial presente muestra algunas herramientas para crear copias de seguridad. Dependiendo de las circunstancias puedes necesitar un método diferente.

No hay comentarios: