Compartir a través de


Procedimiento para restaurar contenido mediante programación

Última modificación: jueves, 04 de noviembre de 2010

Hace referencia a: SharePoint Foundation 2010

En este tema se explica cómo crear una aplicación que restaura un componente de contenido SharePoint Foundation desde una copia de seguridad. Se da por hecho que conoce los temas Introducción a la copia de seguridad y restauración de datos en SharePoint Foundation y Programación con el modelo de objetos de copia de seguridad y restauración de SharePoint Foundation.

Para restaurar un componente de contenido

  1. Agregue una referencia a Microsoft.SharePoint en el proyecto de Visual Studio y agregue instrucciones using para los espacios de nombres Microsoft.SharePoint.Administration y Microsoft.SharePoint.Administration.Backup en el archivo de código.

  2. En el método Main, cree un objeto SPRestoreSettings mediante el método estático GetRestoreSettings. Para el primer parámetros pase la ruta de acceso donde se almacena la copia de seguridad. Para el segundo parámetro pase una versión de cadena de uno los valores de SPRestoreMethodType.

    SPRestoreSettings settings = SPBackupRestoreSettings.GetRestoreSettings((@"\\Server\WSSBackups", "Overwrite");
    
    Dim settings As SPRestoreSettings = SPBackupRestoreSettings.GetRestoreSettings(("\\Server\WSSBackups", "Overwrite")
    
  3. Solicite al usuario que especifique el componente de contenido que desea restaurar y asigne el nombre a la propiedad IndividualItem. Para ver un desglose de los nombres de los componentes en la granja de servidores que se ha incluido en la última copia de seguridad completa y que puedan ser los objetos de las operaciones de restauración, ejecute el comando stsadm -o restore -showtree en la línea de comandos del servidor. Para especificar un paquete de copia de seguridad completa distinto, utilice el parámetro -backupid. También puede utilizar Operaciones > Realizar una restauración en la aplicación Administración central. Para especificar la granja de servidores completa, utilice "Farm" como nombre. (Si establece la propiedad en null también se seleccionará la granja de servidores completa para la copia de seguridad siempre y cuando utilice IndividualItem en todo el código subsiguiente para identificar el nombre del componente que desee restaurar. Por ejemplo, consulte el uso del método FindItems() en el paso 9.)

    Console.Write("Enter name of component to restore (default is whole farm):");
    settings.IndividualItem = Console.ReadLine();
    
    Console.Write("Enter name of component to restore (default is whole farm):")
    settings.IndividualItem = Console.ReadLine()
    
  4. Si desea restaurar a partir de una copia de seguridad que no sea la más reciente, identifique el paquete de copia de seguridad mediante la asignación del GUID a la propiedad BackupId. En spbrtoc.xml, en la raíz de la ubicación, se almacena un registro de cada operación de copia de seguridad para una ubicación de copia de seguridad determinada. Cada operación de copia de seguridad y de restauración se representa en el archivo mediante un elemento <SPHistoryObject>. Si la operación es una copia de seguridad, el elemento <IsBackup> secundario del elemento <SPHistoryObject> es "True". El elemento <SPId> del elemento <SPHistoryObject> contiene el GUID de la copia de seguridad.

    Nota

    Para obtener la lista de todas las operaciones de copia de seguridad y de restauración mediante programación, utilice el método GetHistory(). Este método devuelve un objeto SPBackupRestoreHistoryList que contiene los objetos SPBackupRestoreHistoryObject. Cada uno de los últimos representa una operación y contiene el GUID en la propiedad SelfId.

    settings.BackupId = new Guid("GUID");
    
    settings.BackupId = New Guid("GUID")
    
  5. Si lo desea, puede establecer una o ambas propiedades IsVerbose y UpdateProgress. (Para obtener más información sobre estas propiedades, consulte los temas de referencia.)

    settings.IsVerbose = true;
    settings.UpdateProgress = 10;
    
    settings.IsVerbose = True
    settings.UpdateProgress = 10
    
  6. Si fuese necesario, establezca las propiedades FarmAdminLoginName y FarmAdminLoginPassword().

    settings.FarmAdminLoginName = "Bob";
    settings.FarmAdminPassword = "7*j2U";
    
    settings.FarmAdminLoginName = "Bob"
    settings.FarmAdminPassword = "7*j2U"
    
  7. Cree la operación de restauración con el método CreateBackupRestore(). (También se crea un objeto de historial de la operación.)

    Guid restore = SPBackupRestoreConsole.CreateBackupRestore(settings);
    
    Dim restore As Guid = SPBackupRestoreConsole.CreateBackupRestore(settings)
    
  8. Si la interfaz tiene usuarios, escriba un nombre de componente en lugar de elegir uno de la lista. Debe asegurarse de que el nombre especificado coincide exactamente con un componente. Agregue la siguiente línea al método principal.

    SPBackupRestoreObject node = EnsureUniqueValidComponentName(settings, ref restore);
    
    Dim node As SPBackupRestoreObject = EnsureUniqueValidComponentName(settings, restore)
    
  9. Agregue la siguiente implementación del método EnsureUniqueValidComponentName. Utilice el método FindItems() para recuperar una colección de objetos de contenido cuyos nombres coincidan con el nombre escrito por el usuario. Si no hay ninguna coincidencia, solicite al usuario que vuelva a intentarlo. Si hay más de una, solicite al usuario que sea más específico en su elección. Si el nombre de componentes que el usuario ha especificado es válido y no ambiguo, obtenga una referencia al objeto SPBackupRestoreObject que represente el componente que el usuario desea restaurar.

    private static SPBackupRestoreObject EnsureUniqueValidComponentName(SPBackupRestoreSettings settings, ref Guid operationGUID)
    {
        SPBackupRestoreObjectCollection list = SPBackupRestoreConsole.FindItems(operationGUID, settings.IndividualItem);
        SPBackupRestoreObject component = null;
    
        if (list.Count <= 0)
        {
            Console.WriteLine("There is no component with that name. Run again with a new name.");
            Console.WriteLine("Press Enter to continue.");
            Console.ReadLine();
        }
        else if (list.Count > 1)  // The component name specified is ambiguous. Prompt user to be more specific.
        {
            Console.WriteLine("More than one component matches the name you entered.");
            Console.WriteLine("Run again with one of the following:");
            for (int i = 0; i < list.Count; i++)
            {
                Console.WriteLine("\t{0}", list[i].ToString());
            }
            Console.WriteLine("Press Enter to continue.");
            Console.ReadLine();
        }
        else
        {
            component = list[0];
        }
    
        return component;
    
    }
    
    Private Shared Function EnsureUniqueValidComponentName(ByVal settings As SPBackupRestoreSettings, ByRef operationGUID As Guid) As SPBackupRestoreObject
        Dim list As SPBackupRestoreObjectCollection = SPBackupRestoreConsole.FindItems(operationGUID, settings.IndividualItem)
        Dim component As SPBackupRestoreObject = Nothing
    
        If list.Count <= 0 Then
            Console.WriteLine("There is no component with that name. Run again with a new name.")
            Console.WriteLine("Press Enter to continue.")
            Console.ReadLine()
        ElseIf list.Count > 1 Then ' The component name specified is ambiguous. Prompt user to be more specific.
            Console.WriteLine("More than one component matches the name you entered.")
            Console.WriteLine("Run again with one of the following:")
            For i As Integer = 0 To list.Count - 1
                Console.WriteLine(vbTab & "{0}", list(i).ToString())
            Next i
            Console.WriteLine("Press Enter to continue.")
            Console.ReadLine()
        Else
            component = list(0)
        End If
    
        Return component
    
    End Function
    
  10. En el método Main, cree una estructura condicional que se ejecutará sólo si el método EnsureUniqueValidComponentName ha devuelto un nodo válido.

    if (node != null)
    {
        // TODO: Set the restore operation as the active operation
        // and run it.
    }
    
    If node IsNot Nothing Then
        ' TODO: Set the restore operation as the active operation
        ' and run it.
    End If
    
  11. Reemplace la línea "TODO" del paso anterior por el código siguiente. De este modo la operación se mantendrá activa con el método SetActive() y se comprobará que se ha realizado correctamente. Si se produce un error, que lo hará si otra operación de copia de seguridad o de restauración ya está en curso, cree un informe de error para la interfaz de usuario de la aplicación.

    if (SPBackupRestoreConsole.SetActive(restore) == true)
    {
        // TODO: Run the operation. See next step.
    }
    else
    {
        // Report through your UI that another backup
        // or restore operation is underway. 
        Console.WriteLine("Another backup or restore operation is already underway. Try again when it ends.");
    }
    
    If SPBackupRestoreConsole.SetActive(restore) = True Then
        ' TODO: Run the operation. See next step.
    Else
        ' Report through your UI that another backup
        ' or restore operation is underway. 
        Console.WriteLine("Another backup or restore operation is already underway. Try again when it ends.")
    End If
    
  12. En la bifurcación del código que se ejecuta si la llamada SetActive() se realiza correctamente, ejecute la operación con el método Run(). Compruebe que la operación se realiza correctamente. Si se produce un error, informe del mensaje de error de la operación a la interfaz de usuario. El siguiente código reemplazará a la línea "TODO" del paso anterior.

    if (SPBackupRestoreConsole.Run(restore, node) == false)
    {
        // Report "error" through your UI.
        String error = SPBackupRestoreConsole.Get(restore).FailureMessage;
        Console.WriteLine(error);
    }
    
    If SPBackupRestoreConsole.Run(restore, node) = False Then
        ' Report "error" through your UI.
        Dim [error] As String = SPBackupRestoreConsole.Get(restore).FailureMessage
        Console.WriteLine([error])
    End If
    
  13. Limpie la restauración con el método Remove(). Agregue el siguiente código justo antes de la llave de cierre que ha insertado en el paso 10.

    // Clean up the operation.
    SPBackupRestoreConsole.Remove(restore);
    
    Console.WriteLine("Restore attempt complete. Press Enter to continue.");
    Console.ReadLine();
    
    ' Clean up the operation.
    SPBackupRestoreConsole.Remove(restore)
    
    Console.WriteLine("Restore attempt complete. Press Enter to continue.")
    Console.ReadLine()
    

Ejemplo

En el código siguiente se muestra cómo programar una restauración de un componente de contenido. Reemplace el marcador de posición \\Server\WSSBackups con la ruta de acceso de la ubicación de la copia de seguridad. El tiempo de ejecución encontrará automáticamente la copia de seguridad más reciente en esa ubicación.

using System;
using Microsoft.SharePoint.Administration;
using Microsoft.SharePoint.Administration.Backup;

namespace MyCompany.SharePoint.Administration.Backup
{
    class Restore
    {
        static void Main(string[] args)
        {
            // Create the restore settings.
            SPRestoreSettings settings = SPBackupRestoreSettings.GetRestoreSettings(@"\\Server\WSSBackups", "Overwrite");

            // Identify the content component to restore.
            Console.Write("Enter name of component to restore (default is whole farm):");
            settings.IndividualItem = Console.ReadLine();
            
            // Set optional operation parameters.
            settings.IsVerbose = true;
            settings.UpdateProgress = 10;
            
            // Create the restore operation and return its ID.
            Guid restore = SPBackupRestoreConsole.CreateBackupRestore(settings);

            SPBackupRestoreObject node = EnsureUniqueValidComponentName(settings, ref restore);

            if (node != null)
            {
                // Set the restore as the active job and run it.
                if (SPBackupRestoreConsole.SetActive(restore) == true)
                {
                    if (SPBackupRestoreConsole.Run(restore, node) == false)
                    {
                        // Report "error" through your UI.
                        String error = SPBackupRestoreConsole.Get(restore).FailureMessage;
                        Console.WriteLine(error);
                    }
                }
                else
                {
                    // Report through your UI that another backup
                    // or restore operation is underway. 
                    Console.WriteLine("Another backup or restore operation is already underway. Try again when it ends.");
                }

                // Clean up the operation.
                SPBackupRestoreConsole.Remove(restore);

                Console.WriteLine("Restore attempt complete. Press Enter to continue.");
                Console.ReadLine();
            }
        }// end Main

        private static SPBackupRestoreObject EnsureUniqueValidComponentName(SPBackupRestoreSettings settings, ref Guid operationGUID)
        {
            SPBackupRestoreObjectCollection list = SPBackupRestoreConsole.FindItems(operationGUID, settings.IndividualItem);
            SPBackupRestoreObject component = null;

            if (list.Count <= 0)
            {
                Console.WriteLine("There is no component with that name. Run again with a new name.");
                Console.WriteLine("Press Enter to continue.");
                Console.ReadLine();
            }
            else if (list.Count > 1)  // The component name specified is ambiguous. Prompt user to be more specific.
            {
                Console.WriteLine("More than one component matches the name you entered.");
                Console.WriteLine("Run again with one of the following:");
                for (int i = 0; i < list.Count; i++)
                {
                    Console.WriteLine("\t{0}", list[i].ToString());
                }
                Console.WriteLine("Press Enter to continue.");
                Console.ReadLine();
            }
            else
            {
                component = list[0];
            }

            return component;

        }// end EnsureUniqueValidComponentName

    }// end Restore class
}// end namespace
Imports System
Imports Microsoft.SharePoint.Administration
Imports Microsoft.SharePoint.Administration.Backup

Namespace MyCompany.SharePoint.Administration.Backup
    Friend Class Restore
        Shared Sub Main(ByVal args() As String)
            ' Create the restore settings.
            Dim settings As SPRestoreSettings = SPBackupRestoreSettings.GetRestoreSettings("\\Server\WSSBackups", "Overwrite")

            ' Identify the content component to restore.
            Console.Write("Enter name of component to restore (default is whole farm):")
            settings.IndividualItem = Console.ReadLine()

            ' Set optional operation parameters.
            settings.IsVerbose = True
            settings.UpdateProgress = 10

            ' Create the restore operation and return its ID.
            Dim restore As Guid = SPBackupRestoreConsole.CreateBackupRestore(settings)

            Dim node As SPBackupRestoreObject = EnsureUniqueValidComponentName(settings, restore)

            If node IsNot Nothing Then
                ' Set the restore as the active job and run it.
                If SPBackupRestoreConsole.SetActive(restore) = True Then
                    If SPBackupRestoreConsole.Run(restore, node) = False Then
                        ' Report "error" through your UI.
                        Dim [error] As String = SPBackupRestoreConsole.Get(restore).FailureMessage
                        Console.WriteLine([error])
                    End If
                Else
                    ' Report through your UI that another backup
                    ' or restore operation is underway. 
                    Console.WriteLine("Another backup or restore operation is already underway. Try again when it ends.")
                End If

                ' Clean up the operation.
                SPBackupRestoreConsole.Remove(restore)

                Console.WriteLine("Restore attempt complete. Press Enter to continue.")
                Console.ReadLine()
            End If
        End Sub ' end Main

        Private Shared Function EnsureUniqueValidComponentName(ByVal settings As SPBackupRestoreSettings, ByRef operationGUID As Guid) As SPBackupRestoreObject
            Dim list As SPBackupRestoreObjectCollection = SPBackupRestoreConsole.FindItems(operationGUID, settings.IndividualItem)
            Dim component As SPBackupRestoreObject = Nothing

            If list.Count <= 0 Then
                Console.WriteLine("There is no component with that name. Run again with a new name.")
                Console.WriteLine("Press Enter to continue.")
                Console.ReadLine()
            ElseIf list.Count > 1 Then ' The component name specified is ambiguous. Prompt user to be more specific.
                Console.WriteLine("More than one component matches the name you entered.")
                Console.WriteLine("Run again with one of the following:")
                For i As Integer = 0 To list.Count - 1
                    Console.WriteLine(vbTab & "{0}", list(i).ToString())
                Next i
                Console.WriteLine("Press Enter to continue.")
                Console.ReadLine()
            Else
                component = list(0)
            End If

            Return component

        End Function ' end EnsureUniqueValidComponentName

    End Class ' end Restore class
End Namespace ' end namespace

Vea también

Tareas

Cómo: Hacer copias de seguridad de contenido mediante programación

Procedimiento para realizar la copia de seguridad y restaurar una única colección de sitios mediante programación

Procedimiento para crear una clase de contenido que se pueda restaurar y de la que se pueda hacer una copia de seguridad

Procedimiento para ampliar la utilidad STSADM

Referencia

Microsoft.SharePoint.Administration.Backup

Backup

Restore

Conceptos

Programación con el modelo de objetos de copia de seguridad y restauración de SharePoint Foundation

Otros recursos

Herramienta de línea de comandos Stsadm.exe