Mostrando entradas con la etiqueta backup. Mostrar todas las entradas
Mostrando entradas con la etiqueta backup. Mostrar todas las entradas

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.

Script Para Restaurar Base de Datos Desde Unidad O Carpeta de Red

Cuando utilizamos la interfaz de Sql Server, parece ser que es imposible restaurar una base de datos si es que no está en el disco duro local. Pero eso no es cierto, el problema es que sólo puede hacerse con un script como el siguiente:

RESTORE DATABASE
DatabaseNameHere
FROM
DISK='\\server_name\folder\filename.bak'
WITH REPLACE

Ejecutar una Tarea SQL mediante un Archivo por Lotes o Batch

Cada persona encargada de una base de datos va a llegar a la situación en que debe realizar tareas de mantenimiento como realizar backups de bases de datos, reindexar tablas y otras tareas similares.

Esas tareas idealmente deben ser programadas, y ellas son ejecutadas en una agenda programada. Pero en el caso que la tarea deba ser ejecutada a voluntad ("On Demand", bajo demanda) necesitará intervención humana, y la persona obviamente necesitará tener conocimientos técnicos para poder desarrollarla.

Entonces, el reto esta ahí, y es que podamos hacer que cualquier persona, tenga habilidades técnicas o no, pueda ejecutar dichas tareas.

Una forma seria utilizar un script VBS y utilizar DMO para ejecutar la tarea. Otra forma, y al parecer más sencilla es ejecutar un comando osql en un archivo por lotes o batch.

La utilidad osql permite ejecutar sentencias Transact-SQL, procedimientos de sistema y archivos script. Esta utilidad utiliza ODBC para comunicarse con el servidor.

PRIMER PASO:
Ver si el trabajo a realizar puede ser ejecutado utilizando osql. Abrimos una ventana de comandos y ejecutamos la siguiente sentencia osql en ella:

osql -S "NOMBRE_INSTANCIA_SERVIDOR" -E -Q"exec msdb.dbo.sp_start_job ' BACKUPTEST ' "


Aquí "NOMBRE_INSTANCIA_SERVIDOR" es el nombre de la instanacia Sql Server ejecutandose en la computadora y sobre la cual se va a ejecutar la tarea. "BACKUPTEST" es el nombre de la tarea que ejecutará el trabajo de mantenimiento deseado. Despues de ejecutar el comando notaras que el procedimiento almacenado de sistema 'sp_start_job' ejecuta la tarea deseada sobre la instancia del servidor elegida.

SEGUNDO PASO:
El siguiente paso es crear un archivo por lotes. Abre el Bloc de Notas y escribe los siguientes comandos:

ECHO ejecutando tarea
ECHO.
pause
osql -S "NOMBRE_INSTANCIA_SERVIDOR" -E -Q"exec msdb.dbo.sp_start_job ' BACKUPTEST ' "
ECHO tarea ejecutada
pause
CLS
EXIT


Guarda el archivo como "Tarea.bat".

Luego, el archivo por lotes está listo para ser utilizado. Solo se hace doble click sobre el archivo y el trabajo de mantenimiento se realizará, sin necesidad de tener conocimientos de SQL Server.

SQL Server 2008 Database Backup Compression

SQL Server 2008 Database Backup Compression una nueva herramienta desarrollada por Microsoft, especialmente diseñada para los administradores y profesionales TIC que hacen copias de seguridad o backups y recuperación de bases de datos en SQL Server 2008.

Microsoft asegura que aunque la utilización del CPU aumenta debido a la tarea adicional de compresión, el tiempo de hacer un backup de la base de datos se reduce considerablemente.

Esta herramienta funciona en la versión 2008 de Sql Server, para versiones anteriores pueden utilizar una alternativa de backups con Winrar.

Enlaces:
Vnunet.es
Microsoft Technet

9 peligros de seguridad en Sql Server

En SearchSqlServer.com dan una lista con los 9 peligros de seguridad más comunes en el trabajo de un administrador de bases de datos:

  1. Ejecutar aplicaciones con privilegios de administrador y dejar al front-end controlar la seguridad del la base de datos.
  2. Los administradores de bases de datos usan cuentas de nivel de administrador para las tareas diarias que no requieren tales privilegios.
  3. Multiples administradores tienen en sus manos los mismos sistemas.
  4. Se comparten las cuentas de administrador de Windows para manejar la base de datos.
  5. No se usan procedimientos almacenados donde son posibles.
  6. No se crean vistas de la base de datos basadas en permisos de usuarios o grupos.
  7. Los registros de auditoría no son revisados.
  8. Multiples administradores para la administración del almacenamiento y copia de seguridad de la base de datos.
  9. Nula o casi inexistente clasificación para ubicar a cada base de datos sobre el mismo nivel de importancia.
Leer el artículo original.

Backups con Winrar de Bases de Datos

Utilizar Winrar para los Backups

Tengo un script que escribí hace tiempo con el cual hago una copia de seguridad completo o full backup de una base de datos y automaticamente lo comprimo con el Winrar, para luego hacer una copia en una ubicación de respaldo. De ese modo tenemos dos copias de seguridad en lugares diferentes, en caso haya algún desastre. El nombre se genera según la fecha y hora del sistema.

Previos: Hay que tener iniciado el Agente Sql Server e instalado Winrar.

El script lo tienen que ejecutar en el analizador de consultas, ahora también pueden crear un trabajo en el Agente Sql Server para programarlo y que se ejecute según lo crean conveniente.

Lo que tienen que cambiar para su entorno especifico, es la ruta del Winrar, y la carpeta donde se realiza el backup o copia de seguridad y donde se copia.


/*INICIO DEL SCRIPT*/
/*CARLOS MAYANGA

16-10-2004
ESTE TRABAJO REALIZA LA COPIA DE SEGURIDAD COMPLETA,
COLOCANDO COMO NOMBRE LA BASE DE DATOS
LA FECHA Y LA HORA
LUEGO COMPRIME EL BACKUP EN UN ARCHIVO RAR
PARA TERMINAR COPIA EL ARCHIVO HACIA OTRA UBICACION
SIRVE PARA BASE DE DATOS PEQUEÑAS
*/

/*HACER LA COPIA DE SEGURIDAD*/
DECLARE @NombreRAR varchar(8000)
DECLARE @NombreCompleto varchar(8000)
DECLARE @Ruta varchar(8000)
/*NombreBackup SE REFIERE AL NOMBRE DE LA COPIA DE SEGURIDAD, PODRIA SER EL MISMO DE LA BASE DE DATOS PARA QUE LA PUEDAN IDENTIFICAR, NO ES NECESARIO CREAR EL DISPOSITIVO DE BACKUP ANTES.*/
SET @NombreRAR='D:\Backup\NombreBackup' + + RTRIM(CONVERT(CHAR(16),GETDATE(),112)) + REPLACE(RTRIM(CONVERT(CHAR(16),GETDATE(),114)),':','') + '.rar'
SET @NombreCompleto='D:\Backup\NombreBackup' + RTRIM(CONVERT(CHAR(16),GETDATE(),112)) + REPLACE(RTRIM(CONVERT(CHAR(16),GETDATE(),114)),':','') + '.bak'
SET @Ruta='D:\Backup\'
/*AQUI SE REALIZA LA COPIA DE SEGURIDAD*/
BACKUP DATABASE [SHIOL_DATOS] TO DISK=@NombreCompleto
WITH INIT, NOUNLOAD, NAME = N'Admin - Nombre Backup backup', SKIP, STATS = 10, FORMAT

/*COMPRIMIR LA COPIA DE SEGURIDAD*/

DECLARE @Orden varchar(8000)
/*CON ESTA ORDEN SE COMPRIME LA COPIA DE SEGURIDAD Y LUEGO SE ELIMINA EL ARCHIVO ORIGINAL*/
SET @Orden ='c:\archiv~1\winrar\rar.exe a -m5 -df ' + @NombreRAR + ' ' + @NombreCompleto

EXEC master.dbo.xp_cmdshell @Orden

/*ESTA ES LA RUTA DE OTRA MAQUINA PARA HACER UNA COPIA DE ESE MODO TENEMOS DOS COPIAS DEL MISMO BACKUP*/
SET @Ruta = '\\maquina2\backup\'

/*COPIAR EL ARCHIVO COMPRIMIDO*/

SET @Orden ='copy ' + @NombreRar + ' ' + @Ruta
EXEC master.dbo.xp_cmdshell @Orden

Eso seria todo, no olviden de adaptar el script según su entorno.

Autor: Carlos Mayanga
Sitio: Programación Visual Basic con Sql Server


Actualización: Con la liberación de Google Knol, he creado un knol (una unidad de conocimiento), extendiendo un poco la explicación acá proporcionada. Visita mi Knol aquí.

Restaurar una base de datos en un punto especifico del tiempo

En mi otro blog PCT (Peleandome con todos), he publicado un post sobre como recuperar una base de datos en un punto especifico del tiempo. Cabe señalar que para poder realizar ese proceso y seguir los pasos indicados el modo de recuperación debe ser Completo o FULL, si no es así, debe seguirse otros pasos que no se han contemplado.

Aquí el enlace al post.