Los motores de bases de datos siempre mantienen información interna e importante para operar y funcionar en varias bases de datos llamadas bases de datos de sistema. Algunas de estas bases de datos son utilizadas para guardar metadatos, otras para operaciones temporales, y otras más utilizadas por servicios adicionales. Cada motor organiza estas bases de datos de forma muy diversa y por tanto tiene nombres diferentes. En el caso de SQL Server las bases de datos de sistema son:
- Master
- Model
- Tempdb
- Resource
- Msdb
Base de datos Master
Es, dentro de las base de datos de sistema, la más importante de SQL Server, sin ella no puede arrancar todo el motor y es debido a que mantiene toda la información a nivel del sistema del motor relacional, incluye metadatos de la instancia, de los usuarios y sus privilegios, así como de los servidores vinculados, configuraciones del sistema y mantiene además el registro de la existencia y configuración de todas las demás bases de datos.
La base de datos Master se encuentra en master.mdf, El log se encuentra en mastlog.ldf. Puede crecer de manera indefinida, siempre y cuando no sobrepase los 2 TBytes.
Base de datos Model
Cuando un usuario crea una nueva base de datos en SQL Server esta nueva base de datos no se crea vacía; en realidad se crea utilizando una plantilla llamada Model. Esta base de datos de sistema es una plantilla con las tablas, registros, procedimientos, triggers y configuración que se desea tener con cada nueva base de datos de usuario en la instancia donde se encuentre, de tal manera que cada vez que se crea una nueva base de datos se está haciendo en realidad una copia de Model con el nombre de la base de datos, replicando todo el contenido de Master.
Los datos principales se ubican en model.mdf, y el nombre lógico con el que se le conoce es modeldev. Puede crecer de manera indefinida, siempre y cuando no sobrepase los 2 TBytes de tamaño
Base de datos Tempdb
Es una base de datos de almacenamiento temporal ya que es un recurso global al que todos tienen acceso y sirve para:
- Guardar recursos temporales (tablas, cursores, sps’s).
- Tablas para guardar resultados intermedios en una operación.
- Versiones de registros dentro de un transacción.
Prácticamente no tiene Log y se vacía cada vez que se inicia el motor se reinicia, guardándose en Tempdb.mdf y Templog.ldf (datos y log respectivamente)
Base de datos Resource
Esta es, de las bases de datos de sistema, la única de solo lectura que contiene la configuración de todos los objetos del motor (sys.objects) que, aunque lógicamente aparecen en cada base de datos del usuario, residen físicamente en Resource. Almacena y administra los metadatos de todas las estructuras de las bases de datos y reside físicamente en mssqlsytemresource.mdf y ldf (datos y log respectivamente).
En Resource hay tablas para saber qué bases de datos existen en la instancia (Sys. databases), para saber qué objetos existen (tablas, índices, restricciones, procedimientos, triggers, etc.) en Sys.objects, las columnas que hay en todas las tablas (Sys.columns) y un largo etcétera que se tendrá que revisar con detenimiento en artículos posteriores.
Base de datos MSDB
Es usada por agentde de SQL Server (SQL Server Agent) para administrar las tareas programadas y alertas. Se ubica en MSDBData.mdf y el log en MSDBLog.ldf.
Al igual que las anteriores, no se le puede dar Drop, cambiar la intercalación o siquiera renombrarla.
Consideraciones de performance
La naturaleza de cada base de datos de sistema es distinta, ya que tiene diversos usos y objetivos y hay algunas consideraciones de performance a tomar en cuenta, mismos que serán detallados en artículos posteriores.