Id. de artículo: 224071 - Última revisión: lunes, 04 de enero de 2010 - Versión: 15.5

Cómo mover bases de datos de SQL Server a una nueva ubicación mediante las funciones Separar y Adjuntar de SQL Server

Nota acerca de su sistema operativoEste artículo se aplica a un sistema operativo distinto al que usa. El contenido del artículo que puede que no sea importante para usted, se deshabilitará

En esta página

Expandir todo | Contraer todo

Resumen

En este artículo se describe cómo cambiar la ubicación de los archivos de datos y de registro para una base de datos de Microsoft SQL Server 2005, SQL Server 2000 o SQL Server 7.0.

Para obtener más información acerca de cómo mover bases de datos en SQL Server 2008, consulte el tema "Mover bases de datos del sistema" de Libros en pantalla de SQL Server. Para ver este tema, visite el siguiente sitio web de Microsoft Developer Network (MSDN):
http://msdn2.microsoft.com/es-es/library/ms345408.aspx (http://msdn.microsoft.com/es-es/library/ms345408.aspx)

Más información

Los pasos que debe seguir para cambiar la ubicación de algunas bases de datos del sistema de SQL Server no son los mismos que los empleados para cambiar la ubicación de las bases de datos de usuario. Estos casos especiales se describen independientemente.

Nota Las bases de datos del sistema de SQL Server 7.0 no son compatibles con SQL Server 2000. No asocie a SQL Server 2000 las bases de datos master, model, msdb o de distribución de SQL Server 7.0. Si está utilizando SQL Server 2005, sólo puede adjuntar bases de datos de SQL Server 2005 a una instancia. En todos los ejemplos de este artículo se supone que SQL Server está instalado en la carpeta D:\Mssql7. Además, se supone que todos los archivos de datos y de registro se encuentran en la carpeta D:\Mssql7\Data predeterminada. En los ejemplos se mueven los archivos de datos y de registro de todas las bases de datos a la carpeta E:\Sqldata.

La ubicación predeterminada de los datos en las ediciones SQL 2000 y 2005 son:

Requisitos previos

  • Haga una copia de seguridad actual de todas las bases de datos, especialmente de master, desde su ubicación actual.
  • Debe poseer privilegios de administrador del sistema (sa).
  • Debe saber el nombre y la ubicación actual de todos los datos y archivos de registro de la base de datos.

    Nota Puede determinar el nombre y la ubicación actual de todos los archivos que usa una base de datos con el procedimiento almacenado sp_helpfile:
    use <database_name>
    go
    sp_helpfile
    go
  • Debe tener acceso exclusivo a la base de datos que va a mover. Si experimenta problemas durante el proceso y no tiene acceso a una base de datos que ha movido, o no puede iniciar SQL Server, busque en el registro de errores de SQL Server y en los Libros en pantalla de SQL Server los detalles relativos a los errores que experimenta.

Mover bases de datos de usuario

En el ejemplo siguiente se mueve una base de datos denominada mydb. Esta base de datos contiene un archivo de datos, Mydb.mdf, y un archivo de registro, Mydblog.ldf. Si la base de datos que va a mover tiene más archivos de datos o de registro, especifíquelos en una lista delimitada por comas en el procedimiento almacenado sp_attach_db. El procedimiento sp_detach_db no cambia, con independencia del número de archivos que contenga la base de datos, porque dicho procedimiento no los enumera.
  1. Desconecte la base de datos del modo siguiente:
    use master
       go
       sp_detach_db 'mydb'
       go
  2. Después, copie los archivos de datos y de registro desde la ubicación actual (D:\Mssql7\Data) a la nueva ubicación (E:\Sqldata).
  3. Vuelva a adjuntar la base de datos. Señale a los archivos de la nueva ubicación del modo siguiente:
    use master
      go
      sp_attach_db 'mydb','E:\Sqldata\mydbdata.mdf','E:\Sqldata\mydblog.ldf'
      go
    Compruebe el cambio en las ubicaciones de archivos con el procedimiento almacenado sp_helpfile:
    use mydb
       go
       sp_helpfile
       go
    Los valores de la columna nombreDeArchivo deberían reflejar las nuevas ubicaciones.
Nota El artículo 922804 de Microsoft Knowledge Base describe un problema de las bases de datos de SQL Server 2005 en un almacenamiento conectado a una red. Para obtener más información, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
922804  (http://support.microsoft.com/kb/922804/ ) REVISIÓN: Después de separar una base de datos de Microsoft SQL Server 2005 que reside en un almacenamiento conectado a una red, no puede volver a adjuntar esa base de datos de SQL Server
Considere este problema. Además, considere los permisos que se aplican a una base de datos cuando se separa en SQL Server 2005. Para obtener más información, vea la sección sobre cómo separar y adjuntar una base de datos (?Detaching and Attaching a Database?) del tema que trata la protección de los archivos de datos y de registro (?Securing Data and Log Files?) de los Libros en pantalla de SQL Server. Para ver este tema, visite el siguiente sitio Web de Microsoft Developer Network (MSDN):
http://msdn2.microsoft.com/es-es/library/ms189128.aspx (http://msdn.microsoft.com/es-es/library/ms189128.aspx)

Mover bases de datos de ejemplo

Para mover las bases de datos de ejemplo pubs y Neptuno en SQL Server 2000 o en SQL Server 7.0, o bien para mover las bases de datos de ejemplo AdventureWorks y AdventureWorksDW en SQL Server 2005, siga el mismo procedimiento que para mover las bases de datos de usuario.

Mover la base de datos modelo

SQL Server 7.0

  1. Compruebe que no se está ejecutando actualmente el Agente SQL Server.
  2. Siga el mismo procedimiento para mover las bases de datos de usuarios.

SQL Server 2005 y SQL Server 2000

En SQL Server 2005 y SQL Server 2000, no se pueden desconectar bases de datos del sistema con el procedimiento almacenadosp_detach_db. Al intentar ejecutar la instrucción sp_detach_db 'model', recibe el mensaje de error siguiente:
Servidor: Msg 7940, Nivel 16, Estado 1, Línea 1
No se puede separar las bases de datos de sistema: master, model, msdb y tempdb.
Para mover la base de datos model, debe iniciar SQL Server junto con las opciones -c, -m y el marcador de seguimiento 3608. El marcador de seguimiento 3608 evita que SQL Server recupere cualquier base de datos excepto master.

Nota Después de hacer esto, no tendrá acceso a las bases de datos de usuario. Mientras utilice este marcador de seguimiento, no debe realizar ninguna operación además de los pasos siguientes. Para agregar el marcador de seguimiento 3608 como parámetro de inicio de SQL Serveren SQL Server 2000, siga estos pasos:
  1. En el Administrador corporativo de SQL Server, haga clic con el botón secundario del mouse en el nombre del servidor y, después, haga clic en Propiedades.
  2. En la ficha General, haga clic en Parámetros de inicio.
  3. Agregue el nuevo parámetro siguiente:
    - c -m - T3608
Si está utilizando SQL Server 2005 pede utilizar el Administrador de configuración de SQL Server para cambiar los parámetros de inicio del servicio SQL Server. Para obtener más información acerca de cómo cambiar los parámetros de inicio, visite el siguiente sitio web de Microsoft Developer Network (MSDN):
http://msdn2.microsoft.com/es-es/library/ms190737.aspx (http://msdn.microsoft.com/es-es/library/ms190737.aspx)
Después de agregar la opción -c, la opción -m y el marcador de seguimiento 3608, siga estos pasos:
  1. Detenga y reinicie SQL Server.
  2. Desasocie la base de datos model con los comandos siguientes:
    use master
       go
       sp_detach_db 'model'
       go
  3. Mueva los archivos Model.mdf y Modellog.ldf de la carpeta D:\Mssql7\Data a la carpeta E:\Sqldata.
  4. Vuelva a adjuntar la base de datos model con los comandos siguientes:
    use master
       go
       sp_attach_db 'model','E:\Sqldata\model.mdf','E:\Sqldata\modellog.ldf'
       go
  5. Quite -c -m -T3608 de los parámetros de inicio en el Administrador corporativo de SQL Server o el Administrador de configuración de SQL Server.
  6. Detenga y reinicie SQL Server. Puede comprobar el cambio en las ubicaciones de archivos con el procedimiento almacenado sp_helpfile. Por ejemplo, use el comando siguiente:
    use model
       go
       sp_helpfile
       go

Mover la base de datos MSDB

SQL Server 7.0

Nota Si va a usar este procedimiento al mover las bases de datos msdb y modelo, en primer lugar debe volver a conectar la base de datos modelo y, a continuación, la base de datos msdb. Siga estos pasos:
  1. Compruebe que no se está ejecutando actualmente el Agente SQL Server.
  2. Siga el mismo procedimiento para mover las bases de datos de usuarios.
Nota Si el Agente SQL Server está en ejecución, el procedimiento almacenado sp_detach_db no tendrá éxito y aparecerá el mensaje siguiente:
Servidor: Msj 3702, Nivel 16, Estado 1, Línea 0
No se puede quitar la base de datos 'msdb' porque está en uso.
Ejecución de DBCC completada. Si hay mensajes de error, consulte al administrador del sistema.

SQL Server 2005 y SQL Server 2000

Para mover la base de datos MSDB, debe iniciar SQL Server junto con las opciones -c y -m, y el marcador de seguimiento 3608. El marcador de seguimiento 3608 evita que SQL Server recupere cualquier base de datos, excepto master. Para agregar las opciones -c, -m y el marcador de seguimiento 3608, siga los pasos de la sección "Mover la base de datos model". Después de agregar las opciones -c, -m y el marcador de seguimiento 3608, siga estos pasos:
  1. Detenga y reinicie SQL Server.
  2. Compruebe que no se está ejecutando actualmente el servicio Agente SQL Server.
  3. Desasocie la base de datos msdb del modo siguiente:
    use master
    go
    sp_detach_db 'msdb'
    go
  4. Mueva los archivos Msdbdata.mdf y Msdblog.ldf desde la ubicación actual (D:\Mssql8\Data) a la ubicación nueva (E:\Mssql8\Data).
  5. Quite -c -m -T3608 del cuadro de parámetros de inicio del Administrador corporativo.
  6. Detenga y reinicie SQL Server.

    Nota Si intenta volver a adjuntar la base de datos msdb iniciando SQL Server junto con la opción -c, la opción -m y el marcador de seguimiento 3608, puede recibir el mensaje de error siguiente:
    Servidor: Msg 615, Nivel 21, Estado 1, Línea 1
    No se encuentra la base de datos con Id. 3 y nombre 'model'.
  7. Vuelva a adjuntar la base de datos msdb del siguiente modo:
    use master
    go 
    sp_attach_db 'msdb','E:\Mssql8\Data\msdbdata.mdf','E:\Mssql8\Data\msdblog.ldf' 
    go
Nota Si utiliza este procedimiento a la vez que mueve la base de datos model, está intentando separar la base de datos msdb mientras separa la base de datos model. Al hacer esto, debe volver a adjuntar primero la base de datos model y, a continuación, volver a adjuntar la base de datos msdb. Si adjunta de nuevo la base de datos msdb primero, al intentar volver a adjuntar la base de datos model, recibe el mensaje de error siguiente:
Msj 0, Nivel 11, Estado 0, Línea 0
Error grave en el comando actual. Los resultados, si hay alguno, se deberían descartar.
En este caso, debe separar la base de datos msdb, volver a adjuntar la base de datos model y, a continuación, volver a adjuntar la base de datos msdb

Después de mover la base de datos msdb, puede aparecer el mensaje de error siguiente:
Error 229: Permiso EXECUTE denegado para el objeto 'nombreDeObjeto', base de datos 'master', propietario 'dbo'.
Este problema se produce porque se ha roto la cadena de propiedad. Los propietarios de la base de datos msdb y master no son los mismos. En este caso, se había cambiado la propiedad de la base de datos msdb. Para evitar este problema, ejecute las instrucciones de Transact-SQL siguientes. Puede hacer esto con la utilidad de línea de comandos Osql.exe (SQL Server 7.0 y SQL Server 2000) o Sqlcmd.exe (SQL Server 2005):
USE MSDB 
Go 
EXEC sp_changedbowner 'sa' 
Go
Para obtener más información, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
272424  (http://support.microsoft.com/kb/272424/ ) La comprobación de las cadenas de posesión de objetos en distintas bases de datos depende del inicio de sesión asignado a los propietarios de objetos

Mover la base de datos maestra

SQL Server 7.0 y SQL Server 2000

  1. Cambie la ruta de acceso de los archivos de datos y de registro de master en el Administrador corporativo de SQL Server.

    Nota También puede cambiar aquí la ubicación del registro de errores.
  2. Haga clic con el botón secundario del mouse en el Administrador corporativo de SQL Server y, después, haga clic en Propiedades.
  3. Haga clic en Parámetros de inicio para ver las siguientes entradas:
    -dD:\MSSQL7\data\master.mdf -eD:\MSSQL7\log\ErrorLog -lD:\MSSQL7\data\mastlog.ldf
    -d es la ruta de acceso completa al archivo de datos de la base de datos maestra.

    -e es la ruta de acceso completa para el archivo del registro de errores.

    -l es la ruta de acceso completa al archivo de registro de la base de datos master.
  4. Cambie estos valores de la manera siguiente:
    1. Quite las entradas actuales para los archivos Master.mdf y Mastlog.ldf.
    2. Agregue nuevas entradas que especifiquen la nueva ubicación:
      -dE:\SQLDATA\master.mdf
            -lE:\SQLDATA\mastlog.ldf
  5. Detenga SQL Server.
  6. Copie los archivos Master.mdf y Mastlog.ldf en la nueva ubicación (E:\Sqldata).
  7. Reinicie SQL Server.

SQL Server 2005

Para obtener más información acerca de cómo mover la base de datos maestra y la base de datos de recursos, visite el siguiente sitio web de MSDN: http://msdn2.microsoft.com/es-es/library/ms345408.aspx (http://msdn.microsoft.com/es-es/library/ms345408.aspx) Puede producirse un error al mover la base de datos maestra y la base de datos de recursos. Para obtener más información, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
918695  (http://support.microsoft.com/kb/918695/ ) Puede producirse un error al instalar SQL Server 2005 Service Pack 1 en una instancia de SQL Server 2005

Mover la base de datos tempdb

Los archivos de tempdb se pueden mover mediante la instrucción ALTER DATABASE.
  1. Determine los nombres de archivo lógicos para la base de datos tempdb utilizando sp_helpfile como sigue:
    use tempdb
    go
    sp_helpfile
    go
    El nombre lógico para cada archivo está contenido en la columna name. Este ejemplo utiliza los nombres de archivo predeterminados de tempdev y templog.
  2. Utilice la instrucción ALTER DATABASE, especificando el nombre de archivo lógico del siguiente modo:
    use master
    go
    Alter database tempdb modify file (name = tempdev, filename = 'E:\Sqldata\tempdb.mdf')
    go
    Alter database tempdb modify file (name = templog, filename = 'E:\Sqldata\templog.ldf')
    go
    Debe recibir los mensajes siguientes para confirmar el cambio:
    Mensaje 1
    Archivo 'tempdev' modificado en sysaltfiles. Elimine el archivo antiguo después de reiniciar SQL Server.
    Mensaje 2
    Archivo 'templog' modificado en sysaltfiles. Elimine el archivo antiguo después de reiniciar SQL Server.
  3. El uso de sp_helpfile en tempdb no confirmará estos cambios hasta que reinicie SQL Server.
  4. Detenga y reinicie SQL Server.

Referencias

Para obtener más información al respecto, haga clic en los números de artículo siguientes para verlos en Microsoft Knowledge Base:
912397  (http://support.microsoft.com/kb/912397/ ) El servicio SQL Server no se puede iniciar cuando cambia un parámetro de inicio de una instancia de clúster de SQL Server 2000 o de SQL Server 2005 a un valor que no es válido
274188  (http://support.microsoft.com/kb/274188/ ) PRB: El tema "Solucionar problemas de usuarios huérfanos" de los Libros en pantalla está incompleto
246133  (http://support.microsoft.com/kb/246133/ ) Cómo transferir inicios de sesión y contraseñas entre servidores SQL Server
168001  (http://support.microsoft.com/kb/168001/ ) Los permisos e inicios de sesión de usuario en una base de datos pueden ser incorrectos cuando la base de datos se ha restaurado

Para obtener más información al respecto, consulte los libros siguientes:
Microsoft Corporation
Microsoft SQL Server 7.0 System Administration Training Kit
Microsoft Press, 2001
Microsoft Corporation
MCSE Training Kit: Microsoft SQL Server 2000 System Administration (http://www.microsoft.com/mspress/books/sampchap/4885e.aspx)
Microsoft Press, 2001
Microsoft Corporation
Kit de recursos de Microsoft SQL Server 2000 (http://www.microsoft.com/mspress/books/index/4939.aspx)
Microsoft Press, 2001

La información de este artículo se refiere a:
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Workgroup Edition
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
Palabras clave: 
kbinfo KB224071