GuilleSQL :: Microsoft SQL Server, SSIS, y más !!

SQL Server FAQ: ¿Cómo mover las bases de datos del sistema? ¿Cómo mover MASTER, MODEL, MSDB ó TEMPDB?

Volver a: [SQL Server FAQ :: Preguntas y Respuestas Frecuentes de SQL Server :: Manual SQL Server]


Una buena práctica después de instalar SQL Server es cambiar la ubicación de las bases de datos del sistema a los discos y directorios que deseemos. Especialmente interesante es el hecho de cambiar la ubicación de TEMPDB, y también al instalar un Cluster de SQL Server, ya que hasta que no finalice el proceso de Instalación de SQL Server no podremos añadir discos adicionales Esta capítulo explica como mover las bases de datos del sistema (MASTER, MSSQLSYSTEMRESOURCE, MODEL, MSDB ó TEMPDB) en SQL Server 2005.

Una operación de mantenimiento básica después de instalar SQL Server, es tener que mover las Bases de Datos el sistema (MASTER, MODEL, MSDB ó TEMPDB), principalmente porque el programa de instalación no permite personalizar la ubicación de cada uno de los ficheros de cada una de las bases de datos del sistema. Esto tampoco es muy importante, es decir, es instalaciones pequeñas realmente es indiferente, y en instalaciones grandes o críticas suele cuidarse estos detalles (con programa de instalación más listo o menos listo ;-)

La importancia de ésta configuración, es debido a que puede interesarnos no sólo mantener separados los ficheros de Datos de los ficheros de LOG, sino que además, es posible que deseemos o necesitemos separar TEMPDB, es decir, cambiar la ubicación de TEMPDB a un disco (o discos) diferente, ya sea por tratarse de un disco muy rápido que permita mejorar el rendimiento de TEMPDB (y en consecuencia de toda la Instancia de SQL Server), o quizás para evitar problemas de crecimiento de TEMPDB, etc.

Un detalle a tener en cuenta antes de mover las bases de datos el sistema, es comprobar que el usuario utilizado para iniciar SQL Server tiene permisos sobre la nueva ubicación, ya que si por ejemplo movemos TEMPDB a una ubicación en la cual no se dispone de permisos, al reiniciar la Instancia de SQL Server ésta no podrá iniciar, excepto que concedamos permisos en el sistema de ficheros o cambiemos de nuevo la ubicación de TEMPDB (lo cual, podríamos hacer iniciando la Instancia de SQL Server en modo Usuario Unico - Single User) a una ubicación con permisos suficientes.

Antes de mover cualquier base e datos del sistema, también es interesante apuntar la ruta del fichero de ERRORLOG de la Instancia SQL Server sobre la que se va a realizar el cambio (para en caso de problemas, poder consultarlo rápidamente, aunque sea con el NotePad.exe), y además apuntar también la ruta de los ejecutables de la Instancia (ej: sqlservr.exe) en la que se va a realizar el cambio, para poder ubicarse en dicha ruta rápidamente e iniciar SQL Server desde el símbolo del sistema si fuese necesario.

Por ejemplo, podríamos tener instalada una Instancia por defecto de SQL Server 2005 en un Cluster MSCS, con la siguiente ruta del ERRORLOG (al ser un Cluster, se tratará de un disco compartido):

F:\Microsoft SQL Server\MSSQL.1\MSSQL\LOG

Y con la siguiente ruta de los ejecutables de la Instancia de SQL Server (se tratará de un disco local, sea Cluster o no ;-):

C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Binn

También es importante tener claro como arrancar una Instancia de SQL Server 2005 en modo Usuario Unico (Single User) desde el Símbolo del Sistema. Para ello, deberemos seguir los siguientes pasos:

  • Detener la Instancia de SQL Server.
  • Desde una ventana de Símbolo de Sistema (de esas tipo MSDOS de toda la vida ;-), nos posicionamos en el directorio en el que están los ejecutables de la Instancia de SQL Server deseada (ej: cd "C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Binn").
  • Iniciar la Instancia de SQL Server en modo Usuario Unico (Single User), lo cual se hace con el parámetro -m, y de forma adicional, con el parámetro -c al estar iniciando la Instancia desde fuera del controlador de servicios de Windows (vamos, que es por hacerlo a pelo). Ej: sqlservr.exe -c -m
  • Ahora nos podremos conectar a la Instancia SQL Server, ya sea a través de la utilidad sqlcmd.exe, a través de una nueva consulta de SQL Server Management Studio (SSMS), etc. Recordar que estamos en modo de Usuario Unico, es decir, si abrimos el Object Browser de SQL Server Management Studio, estaremos consumiendo esa única conexión, y cuando nos intentemos conectar con una nueva consulta, no podremos (la única conexión disponible está siendo utilizada por el Object Browser).
  • Cuando acabemos, para detener la Instancia de SQL Server, desde la ventana de Símbolo de Sistema de antes, pulsar Ctrl-C, y responder que sí cuando nos pregunten confirmación para detener la Instancia de SQL Server.

En el caso de estar trabajando con una Instancia de SQL Server en Cluster, se debe tener en cuenta, que para detener una Instancia de SQL Server en Cluster es recomendable hacerlo a través de la herramienta administrativa Cluster Administrator, seleccionando el Recurso correspondiente al Servicio de SQL Server, y poniéndolo OffLine (opción Take OffLine). Si hacemos esta operativa desde el Administrador de Servicios de Windows de uno de los Nodos, el Servicio de Cluster observará la detención del servicio de SQL Server, y se encargará de volver a iniciarlo, por lo cual no podremos detener la Instancia de SQL Server. Por el contrario, en caso de una Instancia de SQL Server que no esté montada en Cluster, si es posible detenerla desde el Administrador de Servicios de Windows (o con un comando NET STOP de los de toda la vida ;-).

También tener en cuenta el mismo detalle para iniciar una Instancia de SQL Server en Cluster: a ser posible, Cluster Administrator (opción Take OnLine).

Otro detalle a tener en cuenta, es recordar que consultando la vista del sistema sys.master_files podemos conocer las rutas de los ficheros de las bases de datos, por lo cual, nos sirve para chequear la ubicación de las bases de datos antes del cambio y después del cambio (ej: SELECT * FROM sys.master_files).

Con todo esto, ya estamos preparados para cambiar las bases de datos del sistema de ubicación (para moverlas). A continuación se detallan los pasos a seguir para mover las bases de datos del sistema de SQL Server:

  • Mover las bases de datos MASTER y MSSQLSYSTEMRESOURCE. Las bases de datos MASTER y MSSQLSYSTEMRESOURCE son hermanas, son dos bases de datos que estan juntas y relacionadas, siendo el principal motivo, que MSSQLSYSTEMRESOURCE es dónde persisten muchos de los objetos del sistema. En versiones anteriores de SQL Server toda esa información se almacenaba directamente en MASTER, pero a partir de SQL Server 2005 la mayoría de los objetos (prácticamente todos) del sistema quedan almacenado en MSSQLSYSTEMRESOURCE.

    Como consecuencia de esto, vamos a explicar el método para mover ambas bases de datos (MASTER y MSSQLSYSTEMRESOURCE). Los pasos a seguir son muy sencillos:

    Especificar la nueva ruta deseada para MASTER (y en consecuencia tambián para MSSQLSYSTEMRESOURCE) utilizando la herramienta SQL Server Configuration Manager. Seleccionaremos el nodo SQL Server 2005 Services, editaremos las propiedades del servicio correspondiente a la Instancia que deseamos modificar, y en la pestaña Advances modificaremos la propiedad Startup Parameters. Por defecto, se especificarán los parámetro -d, -l y -e, que especifican la ruta del fichero de datos de MASTER, el fichero de LOG de MASTER y el directorio del ERRORLOG. En consecuencia, sólo deberemos modificar los parámetro -d y -l para especificar la nueva ubicación.

    Detener la Instancia de SQL Server.

    Mover los ficheros de las bases de datos MASTER y MSSQLSYSTEMRESOURCE a la nueva ubicación. Esto puede hacerse fácilmente con el Explorador de Windows.

    Iniciar la Instancia de SQL Server.

    Realizados estos pasos, habremos conseguido cambiar la ubicación de las bases de datos del sistema MASTER y MSSQLSYSTEMRESOURCE.

  • Mover la base de datos TEMPDB. Es suficiente con ejecutar los correspondiente comandos ALTER DATABASE tempdb MODIFY FILE para cada uno de los ficheros de TEMPDB que deseemos mover de ubicación, teniendo en cuenta que el cambio tomará efecto al reiniciar la Instancia de SQL Server. Eso sí, al reiniciar la Instancia de SQL Server se crearán los nuevos ficheros de TEMPDB, pero deberemos eliminar manualmente los antiguos ficheros de TEMPDB (y así liberar espacio), por ejemplo, utilizando el Explorador de Windows. A continuación se incluye un ejemplo:
USE master
GO
ALTER DATABASE tempdb MODIFY FILE (NAME = tempdev, FILENAME = 'F:\tempdb.mdf')
GO
ALTER DATABASE tempdb MODIFY FILE (NAME = templog, FILENAME = 'F:\templog.ldf')
GO
  • Mover la base de datos MODEL. Es necesario iniciar la Instancia de SQL Server en modo Usuario Unico (Single User) y además con el Trace Flag 3608 que evita que se realice el Recovery de bases de datos (excepto de MASTER) en el inicio de la Instancia de SQL Server. Para ello, será necesario iniciar la Instancia de SQL Server ejecutando algo como:

    sqlservr.exe -c -m -T3608

    Seguidamente, debemos conectarnos a la Instancia de SQL Server y separar (detach) la base de datos MODEL, ejecutando en una consulta de SQL Server Management Studio (o de sqlcmd.exe), algo como:

USE master
GO
sp_detach_db 'model'
GO

Ahora, deberemos mover los ficheros de sitio, por ejemplo copiándolos con el Explorador de Windows. Una vez que tenemos disponibles los ficheros de MODEL en la ubicación deseada, debemos adjuntar (attach) la base de datos MODEL desde la nueva ubicación, ejecutando una consulta similar a la del siguiente ejemplo:

USE master
GO
sp_attach_db 'model', 'F:\model.mdf', 'F:\modellog.ldf'
GO

Y con esto hemos acabado, por lo que deberemos detener la Instancia de SQL Server (que seguirá en modo Usuario Unico), y podremos iniciarla normalmente.

  • Mover la base de datos MSDB. Es necesario iniciar la Instancia de SQL Server en modo Usuario Unico (Single User) y además con el Trace Flag 3608 que evita que se realice el Recovery de bases de datos (excepto de MASTER) en el inicio de la Instancia de SQL Server. Para ello, será necesario iniciar la Instancia de SQL Server ejecutando algo como:

    sqlservr.exe -c -m -T3608

    Seguidamente, debemos conectarnos a la Instancia de SQL Server y separar (detach) la base de datos MSDB, ejecutando en una consulta de SQL Server Management Studio (o de sqlcmd.exe), algo como:

USE master
GO
sp_detach_db 'msdb'
GO

Ahora, deberemos mover los ficheros de sitio, por ejemplo copiándolos con el Explorador de Windows.

Una vez que tenemos disponibles los ficheros de MSDB en la ubicación deseada, deberemos detener la Instancia de SQL Server (que seguirá en modo Usuario Unico), y seguidamente debemos iniciar la Instancia de SQL Server normalmente.

Después de iniciar la Instancia de SQL Server, debemos adjuntar (attach) la base de datos MSDB desde la nueva ubicación, ejecutando una consulta similar a la del siguiente ejemplo:

USE master
GO
sp_attach_db 'msdb', 'F:\msdbdata.mdf', 'F:\msdblog.ldf'
GO

Y con esto ya estará cambiada la ubicación de los ficheros de la base de datos MSDB.

Volver a: [SQL Server FAQ :: Preguntas y Respuestas Frecuentes de SQL Server :: Manual SQL Server]




Miembros de
Miembros de GITCA (Global IT Community Association)

Menu de Usuario
  Iniciar Sesión
  Registrarse
  Restablecer Contraseña
  Ventajas de Registrarse

Acerca de
  Contigo desde Oct 2007
  771 usuarios registrados
  86146 pageloads/mes
  Ranking Alexa 498160

Social Networks
Sigue a Portal GuilleSQL en Linkedin !!
Sigue a Portal GuilleSQL en Twitter !!



Archivo

Marzo de 2019 (1)
Octubre de 2018 (1)
Julio de 2018 (1)
Junio de 2018 (4)
Mayo de 2018 (5)
Abril de 2018 (3)
Marzo de 2018 (2)
Febrero de 2018 (7)
Enero de 2018 (1)
Diciembre de 2017 (15)
Noviembre de 2017 (7)
Junio de 2017 (3)
Mayo de 2017 (1)
Marzo de 2017 (3)
Enero de 2017 (4)
Junio de 2016 (1)
Mayo de 2016 (2)
Abril de 2016 (2)
Septiembre de 2015 (2)
Agosto de 2015 (2)
Junio de 2015 (10)
Mayo de 2015 (4)
Abril de 2015 (8)
Marzo de 2015 (11)
Octubre de 2014 (3)
Septiembre de 2014 (7)
Agosto de 2014 (5)
Julio de 2014 (2)
Mayo de 2014 (4)
Abril de 2014 (4)
Marzo de 2014 (4)
Febrero de 2014 (1)
Enero de 2014 (5)
Diciembre de 2013 (8)
Noviembre de 2013 (2)
Octubre de 2013 (7)
Septiembre de 2013 (6)
Agosto de 2013 (1)
Julio de 2013 (6)
Junio de 2013 (11)
Mayo de 2013 (7)
Abril de 2013 (6)
Febrero de 2013 (5)
Enero de 2013 (7)
Diciembre de 2012 (12)
Noviembre de 2012 (13)
Octubre de 2012 (5)
Septiembre de 2012 (3)
Agosto de 2012 (6)
Julio de 2012 (4)
Junio de 2012 (1)
Mayo de 2012 (2)
Abril de 2012 (7)
Marzo de 2012 (16)
Febrero de 2012 (9)
Enero de 2012 (5)
Diciembre de 2011 (10)
Noviembre de 2011 (10)
Octubre de 2011 (4)
Septiembre de 2011 (5)
Agosto de 2011 (2)
Julio de 2011 (2)
Junio de 2011 (4)
Mayo de 2011 (2)
Abril de 2011 (6)
Marzo de 2011 (4)
Febrero de 2011 (10)
Enero de 2011 (5)
Diciembre de 2010 (6)
Noviembre de 2010 (4)
Octubre de 2010 (8)
Septiembre de 2010 (4)
Agosto de 2010 (1)
Julio de 2010 (3)
Mayo de 2010 (5)
Abril de 2010 (6)
Marzo de 2010 (8)
Febrero de 2010 (3)
Enero de 2010 (1)
Diciembre de 2009 (9)
Noviembre de 2009 (14)
Octubre de 2009 (2)
Septiembre de 2009 (8)
Agosto de 2009 (2)
Julio de 2009 (10)
Junio de 2009 (9)
Mayo de 2009 (10)
Abril de 2009 (9)
Marzo de 2009 (3)
Febrero de 2009 (2)
Enero de 2009 (3)
Noviembre de 2008 (2)
Octubre de 2008 (2)
Septiembre de 2008 (2)
Agosto de 2008 (5)
Julio de 2008 (5)
Junio de 2008 (1)
Mayo de 2008 (3)
Abril de 2008 (2)
Marzo de 2008 (2)
Febrero de 2008 (2)
Enero de 2008 (5)
Noviembre de 2007 (2)
Octubre de 2007 (2)






Copyright © 2007 GuilleSQL, todos los derechos reservados.