Roman Milert - Fotolia

Restaurar una base de datos desde otro servidor SQL Server

Restaurar una base de datos desde otro servidor SQL Server es simple –hacer coincidir los nombres de usuario y los accesos no lo es. Conozca los pasos que necesita para restaurar una base de datos desde otra en este consejo.

Hay muchas razones por las que usted querría mover una base de datos de un servidor a otro: la recuperación de desastres, la actualización de un entorno de prueba, el análisis de datos o tal vez algo más. La restauración de la base de datos es la parte fácil, pero entonces usted puede quedarse con inicios de sesión y usuarios de bases de datos que no coinciden. En este consejo veremos algunos de los pasos a seguir al restaurar una base de datos desde un servidor diferente.

La restauración

El primer paso en el proceso es restaurar la base de datos. Vamos a echar un vistazo a un par de los comandos que se pueden utilizar para mirar el contenido de los archivos de copia de seguridad, así como los comandos para realizar la restauración. Las restauraciones pueden llevarse a cabo utilizando los comandos T-SQL o mediante el administrador Enterprise Manager. Vamos a echar un vistazo a cómo lograr la restauración utilizando T-SQL.

RESTORE HEADERONLY

Para determinar qué se almacena en los archivos de copia de seguridad puede ejecutar este comando en el analizador de consultas (Query Analyzer).

RESTORE HEADERONLY FROM DISK = 'C:\SQL\Backup\North.bak'

Este comando le permite ver la información del encabezado de respaldo para todos los conjuntos de copia de seguridad en un dispositivo de respaldo en particular. La información incluida en este se muestra en la siguiente tabla. Este comando es útil cuando se tienen varios archivos con los que poder trabajar o si se obtiene un archivo de copia de seguridad de un servidor que usted no administra.

RESTORE FILELISTONLY

Esta es otro comando que se puede ejecutar en los archivos de copia de seguridad.

RESTORE FILELISTONLY FROM DISK = 'C:\SQL\Backup\North.bak'

Este comando le permite ver una lista de la base de datos y archivos log contenidos en el conjunto de respaldos, qué grupo de archivos que se incluyen y también el tamaño de los datos y archivos de registro. Para nuestro proceso de restauración el nombre lógico (LogicalName) y el nombre físico (PhysicalName) son elementos clave de datos. Estos serán utilizados en el siguiente paso cuando realmente ejecutemos la restauración.

RESTAURAR

Para restaurar la base de datos es posible que tengamos que utilizar la opción MOVE para mover los archivos físicos a una ubicación diferente y también la opción NORECOVERY si queremos restaurar varios archivos de copia de seguridad (es decir, registros log completos y diferenciales).

Digamos que estamos moviendo la base de datos de un servidor a otro, y las unidades lógicas son diferentes. En nuestros resultados anteriores, los archivos de datos se encuentra en el directorio C: \Archivos de programa\Microsoft SQL Server\MSSQL$TEST\datos, pero ahora tenemos que restaurar en las unidades D: y E: en un servidor diferente. El comando sería el siguiente.

RESTORE DATABASE NORTH

   FROM DISK = 'C:\SQL\Backup\North.bak'

   WITH MOVE 'NORTH_Data' TO 'D:\SQL\Data\North_Data.mdf',

        MOVE 'NORTH_Log' TO 'E:\SQL\Log\North_Log.ldf'

Si también tenemos que restaurar y mover tanto los respaldos de registros completos como los diferenciales, los comandos se verían así.

RESTORE DATABASE NORTH

   FROM DISK = 'C:\SQL\Backup\North.bak'

   WITH NORECOVERY,

  MOVE 'NORTH_Data' TO 'D:\SQL\Data\North_Data.mdf',

    MOVE 'NORTH_Log' TO 'E:\SQL\Log\North_Log.ldf'

RESTORE DATABASE NORTH

   FROM DISK = 'C:\SQL\Backup\North_Diff.bak'

   WITH NORECOVERY,

  MOVE 'NORTH_Data' TO 'D:\SQL\Data\North_Data.mdf',

     MOVE 'NORTH_Log' TO 'E:\SQL\Log\North_Log.ldf'

 RESTORE LOG NORTH

    FROM DISK = 'C:\SQL\Backup\North_Log.bak'

    WITH RECOVERY,

  MOVE 'NORTH_Data' TO 'D:\SQL\Data\North_Data.mdf',

     MOVE 'NORTH_Log' TO 'E:\SQL\Log\North_Log.ldf'

Usuarios

Ahora que la base de datos se ha restaurado correctamente tenemos que asegurarnos de que nuestros usuarios y los inicios de sesión coinciden en el servidor.

Al restaurar copias de seguridad desde otro servidor, lo más probable es que la información de inicio de sesión y el usuario no coinciden. La información de acceso se almacena en la tabla sysxlogins en la base de datos maestra. Esta tabla contiene una columna que guarda el SID (identificador de seguridad) que está vinculado a una entrada específica. Una tabla de correspondientes sysusers se almacena en cada base de datos de usuario y utiliza el SID para determinar si un inicio de sesión tiene acceso a la base de datos. Así que, aunque tal vez ya tenga los mismos inicios de sesión en el nuevo servidor, el SID puede no coincidir. Lo que hace que esto sea aún más confuso es que se pueden ver los nombres reales de los inicios de sesión y los usuarios, por lo que uno piensa que coincidirán de forma automática, pero el SID es lo que realmente está vinculado a la seguridad, no el nombre.

Así que si el inicio de sesión estándar ya existe en el servidor y el usuario existe en la base de datos, puede utilizar este procedimiento almacenado para volver a vincular el inicio de sesión estándar y el usuario.

sp_change_users_login

Este procedimiento almacenado tiene tres opciones: Auto_Fix, Report y Update_One. A continuación se muestra una breve descripción, pero puede encontrar más en la librería en línea de SQL Server 2000.

• La opción Auto_Fix enlazará los usuarios y los datos de acceso que tienen el mismo nombre.

• La opción de informe (Report) le mostrará una lista de usuarios en la base de datos actual que no están vinculados a un inicio de sesión.

• La opción Update_One le permite enlazar un usuario con un inicio de sesión que tal vez no tengan el mismo nombre exacto.

Nota: Para enlazar los inicios de sesión de Windows, consulte la sección “MOVER LOS INICIOS DE SESIÓN” que se muestra a continuación.

ELIMINACIÓN DE USUARIOS

Si hay usuarios en la base de datos y no hay una entrada correspondiente en el servidor, puede utilizar el siguiente comando para eliminar el usuario de la base de datos y limpiar la lista de usuarios.

 sp_revokedbaccess 'NorthDomain\Mike'

INICIOS DE SESIÓN

En el otro extremo de la seguridad se encuentran los inicios de sesión. Para averiguar qué acceso tiene un inicio de sesión en el servidor puede ejecutar el siguiente comando. Esto mostrará una lista de las bases de datos a las que tiene acceso el inicio de sesión, así como otra información sobre el inicio de sesión, como el SID.

sp_helplogins 'NorthDomain\Mike'

Si hay un usuario en su base de datos y no hay una entrada correspondiente en el servidor puede utilizar los siguientes comandos para crear el nuevo inicio de sesión.

Si va a crear un inicio de sesión estándar de SQL Server debería este comando para crear el inicio de sesión.

sp_addlogin

Si va a crear un inicio de sesión que va a utilizar la autenticación de Windows, utilice este comando.

 sp_grantlogin 'NorthDomain\Mary'

Para cambiar la base de datos predeterminada para un uso relacionado con los inicios de sesión, utilice este comando tanto para los inicios de sesión estándares o de Windows.

sp_defaultdb 'NorthDomain\Mary', 'master'

MOVER LOS INICIOS DE SESIÓN

En algunos casos puede ser necesario duplicar toda la lista de inicio de sesión de un servidor a otro. Esto se puede lograr de forma manual mediante la ejecución de los comandos anteriores, mediante el uso de DTS o puede utilizar el procedimiento almacenado que fue desarrollado por Microsoft. Al crear los inicios de sesión de forma manual o utilizando DTS, el SID original no se conserva y un nuevo SID se crea conforme se genera el inicio de sesión, por lo tanto, tendrá que vincular los inicios de sesión y los usuarios de la base de datos. Encuentre más información al respecto en el artículo 246133 de la base de conocimientos de Microsoft: Cómo transferir inicios de sesión y contraseñas entre instancias de SQL Server.

Si sus nombres de usuario y los inicios de sesión no coinciden, puede utilizar los siguientes comandos para vincular su información de inicio de sesión y el usuario. Microsoft no recomienda la actualización de las tablas del sistema directamente, por lo que sólo debe utilizarlo si usted entiende completamente lo que está haciendo y cómo recuperarse si hay un problema. También es necesario cambiar la configuración para permitir cambios a las tablas del sistema del servidor.

DECLARE @sysxlogins_sid VARBINARY(85)
SELECT @sysxlogins_sid = sid FROM master.dbo.sysxlogins WHERE name = 'NorthDomain\Joe'
UPDATE sysusers SET sid = @sysxlogins_sid WHERE name = 'Joe'

Cambio de propietario de la base

La última cosa que usted puede hacer es cambiar el propietario de la base de datos después de finalizar la restauración. Cuando se restaura una base de datos SQL, el usuario que ejecuta el comando de restauración se convierte en el propietario de la base de datos. Para cambiar el propietario, escriba este comando.

sp_changedbowner 'sa'

Resumen

Greg Robidoux

Como se puede ver, hay que hacer un poco más para el proceso de restauración que solamente restaurar los archivos de copia de seguridad. Mantener los inicios de sesión y usuarios en sincronía no siempre es una tarea sencilla, a menos que las máquinas sean completamente idénticas, lo cual rara vez ocurre. Los pasos anteriores junto con los comandos deberían ser todo lo que necesita para que sus bases de datos sean restauradas y sus usuarios se vinculen correctamente.

Sobre el autor: Greg Robidoux es el presidente y fundador de Edgewood Solutions LLC, una compañía de servicios de tecnología que presta servicios profesionales y soluciones de productos para Microsoft SQL Server. Es autor de numerosos artículos y ha realizado presentaciones en los grupos de usuarios regionales de SQL Server y eventos nacionales de SQL Server. Greg fue colaborador experto en los temas de Respaldo y Recuperación para nuestra publicación hermana, SearchSQLServer.com.

Investigue más sobre Office y software de Microsoft