Ir al contenido principal

Como mover las bases de datos MASTER, MODEL, TEMPDB Y MSDB?

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ásapuntar 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.

Comentarios

Entradas populares de este blog

SQL Server Analysis Services Neural Network Data Mining Algorithm

Problem In data mining and machine learning circles, the neural network is one of the most difficult algorithms to explain. Fortunately, SQL Server Analysis Services allows for a simple implementation of the algorithm for data analytics.  Check out this tip to learn more. Solution In this tip, we show how to create a simple data mining model using the Neural Network algorithm in SQL Server Analysis Services 2012. In Visual Studio (also known from the start menu as SQL Server Data Tools), create a new Analysis Services Multidimensional and Data Mining Project. In this tip, we will name the project NeuralNetworkExample. Click on OK when finished with the New Project window. In the Solution Explorer window, right-click on the Data Sources folder and choose "New Data Source..." to initiate the Data Source Wizard. Click on "Next >". Choose your data connection, if one exists. If a data connection does not exist, click on "New..." to ...

Big Data Clusters in SQL Server 2019: A Game Changer for Data Analytics

 In today’s data-driven world, organizations are constantly seeking innovative ways to process and analyze vast amounts of data. SQL Server 2019 introduced Big Data Clusters (BDC) , a revolutionary feature that integrates SQL Server, Apache Spark, and Hadoop Distributed File System (HDFS) into a single platform. This feature allows enterprises to process structured and unstructured data efficiently, making it an essential tool for businesses handling large datasets. With the growing complexity of data ecosystems, enterprises require an integrated approach to manage, process, and analyze vast amounts of information. Traditional databases often struggle to handle such workloads efficiently, making big data solutions crucial. SQL Server 2019, with its Big Data Clusters , brings forth an innovative approach to handling large-scale data by bridging the gap between structured and unstructured datasets , enabling businesses to extract meaningful insights quickly. What is a Big Data Clus...

Habilitando Conexiones Remotas a SQL Server 2005

Habilitando conexiones remotas en SQL Server 2005 Hace unos pocos días me encontré ante el siguiente problema: desde una máquina virtual montada en VMWare con Windows XP y SQL Server 2005, necesitaba realizar una prueba consistente en conectar a otro servidor SQL Server 2005, instalado en la máquina principal con Windows Vista, para consultar una tabla existente en una de sus bases de datos. Pensando en que por defecto, la posibilidad de conexión ya estaría habilitada en el servidor SQL, intenté registrar desde la máquina virtual el SQL Server del equipo principal, obteniendo el error que vemos en la siguiente imagen. Tengo instalada la edición Developer de SQL Server 2005, y dado que evidentemente, la posibilidad de conectar a una instalación remota existente en otro servidor de datos no se encontraba establecida por defecto, había que habilitarla de forma manual. A continuación describimos los pasos a realizar para habilitar el establecimiento de conexiones remotas en SQL Se...