2011-05-03 39 views
6

Investigué las posibilidades de crear copias de seguridad de bases de datos a través de SMO con C#. La tarea es bastante fácil y el código directo. Tengo una sola pregunta: ¿cómo puedo verificar si realmente se creó la copia de seguridad?SQL Server realizar copia de seguridad con C#

SqlBackup.SqlBackup método no devuelve ningún parámetro y ni siquiera sé si arroja alguna excepción. (Lo único que sé es que está bloqueando, porque también hay un método SqlBackupAsync)

Agradecería cualquier ayuda.

+0

Nunca lo he usado yo mismo, pero supongo que al escanear los documentos podría adjuntar un controlador de eventos a [Completar] (http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management .smo.backuprestorebase.complete.aspx) para ver si devuelve un código de error. Pero no estoy 100% seguro de que se llamará en el caso no asincrónico, ¡y debe haber una manera mejor! – Rup

Respuesta

1

se puede y es muy posible hacer lo que usted pidió,

pero hacer la copia de seguridad que uno mismo utilizando SMO no es muy difícil, pero la parte difícil es la gestión de la copia de seguridad y la restauración.

sería difícil poner todo el código aquí, pero no cabría. así que haré todo lo posible para poner las líneas que necesita.

SqlBackup.SqlBackup no devuelve ningún valor, es una función anulada. pero se necesita un parámetro que es "Servidor", intente con el siguiente código:

Server srvSql; 

//Connect to Server using your authentication method and load the databases in srvSql 
// THEN 

Backup bkpDatabase = new Backup(); 
bkpDatabase.Action = BackupActionType.Database; 
bkpDatabase.Incremental = true; // will take an incemental backup 
bkpDatabase.Incremental = false; // will take a Full backup 
bkpDatabase.Database = "your DB name"; 
BackupDeviceItem bDevice = new BackupDeviceItem("Backup.bak", DeviceType.File); 
bkpDatabase.Devices.Add(bDevice); 

bkpDatabase.PercentCompleteNotification = 1;// this for progress 
bkpDatabase.SqlBackup(srvSql); 
bkpDatabase.Devices.Clear(); 
+0

Creo que él quiere saber si el trabajo falló. ¿Cómo puedes probar eso? – Rup

+0

Ya tengo el código que me proporcionó :) Lo que quiero es estar 100% seguro de que la operación de copia de seguridad fue exitosa, lo cual es crucial para lo que quiero hacer. – kubal5003

+0

¿puedes verificarlo en el evento completo? – Arrabi

0

He investigado el problema con Reflector.NET (supongo que esto es legal desde Redgate es la Sra Gold Certified Partner y el reflector .NET abre bibliotecas .NET listas para usar). Como puede observar, el método emite dos tipos de excepciones:

FailedOperationException - en la mayoría de los casos, otras excepciones se "traduce" (supongo que traducir significa crear nuevos FailedOperationException y el establecimiento de InnerException a lo que realmente estaba tirado)

UnsupportedVersionException - (¿qué es el servidor SQL 2008), en un caso cuando el truncamiento del registro se establece en TRUNCATEONLY y el servidor de versión principal es más o igual a 10

Esto resuelve mi problema parcialmente, porque no estoy 100% Seguro que si algo sale mal esos e xcepciones en realidad se lanzarán.

Cuestiones relacionadas