Regeneración de las bases de datos del sistema

Se aplica a:SQL Server

Las bases de datos del sistema deben volver a generarse para corregir problemas por daños en las bases de datos maestra, modelo, msdb o de recursos, o para modificar la intercalación de nivel de servidor predeterminada. En este artículo se ofrecen instrucciones paso a paso para volver a generar las bases de datos del sistema en SQL Server.

Limitaciones y restricciones

Cuando se vuelven a generar las bases de datos del sistema master, model, msdb, y tempdb, las bases de datos se quitan y se vuelven a crear en su ubicación original. Si se especifica una nueva intercalación en la instrucción para volver a generar las bases de datos del sistema, estas se crearán con esa configuración de intercalación. Se perderán las modificaciones que los usuarios hayan realizado en esas bases de datos. Por ejemplo, es posible que haya objetos definidos por los usuarios en la base de datos master, trabajos programados en msdb o cambios en la configuración predeterminada de la base de datos model.

Requisitos previos

Realice las tareas siguientes antes de volver a generar las bases de datos del sistema para asegurarse de que puede restaurar la configuración actual de las mismas.

  1. Registre todos los valores de configuración del servidor.

    SELECT * FROM sys.configurations;
    
  2. Registre todas las correcciones aplicadas a la instancia de SQL Server y la intercalación actual. Debe aplicar estas correcciones de nuevo después de recompilar las bases de datos del sistema.

    SELECT
    SERVERPROPERTY('ProductVersion ') AS ProductVersion,
    SERVERPROPERTY('ProductLevel') AS ProductLevel,
    SERVERPROPERTY('ResourceVersion') AS ResourceVersion,
    SERVERPROPERTY('ResourceLastUpdateDateTime') AS ResourceLastUpdateDateTime,
    SERVERPROPERTY('Collation') AS Collation;
    
  3. Registre la ubicación actual de todos los archivos de registro y datos de las bases de datos del sistema. Al volver a generar las bases de datos del sistema, todas ellas se instalan en su ubicación original. Si ha movido los archivos de registro o datos de las bases de datos del sistema a otra ubicación, deberá volver a moverlos.

    SELECT name, physical_name AS current_file_location
    FROM sys.master_files
    WHERE database_id IN (DB_ID('master'), DB_ID('model'), DB_ID('msdb'), DB_ID('tempdb'));
    
  4. Busque la copia de seguridad actual de las bases de datos master, model, y msdb.

  5. Si la instancia de SQL Server se configura como Distribuidor de replicación, busque la copia de seguridad actual de la base de datos distribution.

  6. Asegúrese de que tiene los permisos adecuados para volver a generar las bases de datos del sistema. Para realizar esta operación, debe ser miembro del rol fijo de servidor sysadmin . Para obtener más información, vea Roles de nivel de servidor.

  7. Compruebe que haya copias de los datos master, model, msdb y archivos de plantilla de registro en el servidor local. La ubicación predeterminada de los archivos de plantilla es C:\Program Files\Microsoft SQL Server\MSSQL<xx>.MSSQLSERVER\MSSQL\Binn\Templates (donde <xx> es la versión que ha instalado). Estos archivos se usan durante el proceso de volver a generar las bases de datos y deben estar presentes para que la instalación se realice correctamente. Si no lo están, ejecute la característica de reparación del programa de instalación o copie los archivos manualmente desde el disco de instalación. Para buscar los archivos en el soporte de instalación, vaya al directorio de plataforma adecuado (x86 o x64) y, a continuación, vaya a setup\sql_engine_core_inst_msi\Pfiles\SqlServr\MSSQL.X\MSSQL\Binn\Templates.

Regeneración de las bases de datos del sistema

Con el procedimiento siguiente se vuelve a generar la base de datos de recursos master, model, msdb, y tempdb. No se pueden especificar las bases de datos del sistema que se van a volver a generar. En el caso de las instancias en clúster, este procedimiento se debe realizar en el nodo activo y desconectar el recurso de SQL Server del grupo de aplicaciones en clúster antes de realizar el procedimiento.

Este procedimiento no vuelve a generar la base de datos de resource. Vea la sección Procedimiento para volver a generar la base de datos del sistema de recursos más adelante en este mismo artículo.

Volver a generar las bases de datos del sistema para una instancia de SQL Server

  1. Inserte el disco de instalación de SQL Server en la unidad de disco o en el símbolo del sistema, cambie el directorio a la ubicación del servidor local donde se encuentra el archivo setup.exe. Para SQL Server 2022 (16.x), la ubicación predeterminada en el servidor es C:\Program Files\Microsoft SQL Server\160\Setup Bootstrap\SQLServer2022.

  2. En una ventana del símbolo del sistema, escriba el siguiente comando. Los parámetros entre corchetes son opcionales. No escriba corchetes. Cuando se usa un sistema operativo Windows que tiene el Control de cuentas de usuario (UAC) habilitado, para ejecutar el programa de instalación se requieren privilegios elevados. El símbolo del sistema se debe ejecutar como Administrador.

    setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=InstanceName /SQLSYSADMINACCOUNTS=accounts [ /SAPWD= StrongPassword ] [ /SQLCOLLATION=CollationName ]
    
    Nombre de parámetro Descripción
    /QUIET o /Q Especifica que el programa de instalación se ejecute sin ninguna interfaz de usuario.
    /ACTION=REBUILDDATABASE Especifica que el programa de instalación vuelva a crear las bases de datos del sistema.
    /INSTANCENAME=InstanceName Nombre de la instancia de SQL Server. Para la instancia predeterminada, escriba MSSQLSERVER.
    /SQLSYSADMINACCOUNTS=accounts Especifica las cuentas individuales o de grupos de Windows que se agregarán al rol fijo de servidor sysadmin . Si especifica varias cuentas, sepárelas con un espacio en blanco. Escriba, por ejemplo, BUILTIN\Administrators MyDomain\MyUser. Cuando está especificando una cuenta que contiene un espacio en blanco dentro del nombre, agregue la cuenta entre comillas tipográficas. Escriba, por ejemplo, NT AUTHORITY\SYSTEM.
    [ /SAPWD=StrongPassword ] Especifica la contraseña de la cuenta SA de SQL Server. Este parámetro es obligatorio si la instancia usa el modo Autenticación mixta (Autenticación de SQL Server y de Windows).

    Nota de seguridad: La cuenta sa es una cuenta conocida de SQL Server y suele ser el objetivo de usuarios malintencionados. Es importante que use una contraseña segura en el inicio de sesión sa.

    No especifique este parámetro para el modo Autenticación de Windows.
    [ /SQLCOLLATION=CollationName ] Especifica una nueva intercalación de nivel de servidor. Este parámetro es opcional. Cuando no se especifica, se usa la intercalación actual del servidor.

    Importante: Al cambiar la intercalación de nivel de servidor, no se cambia la de las bases de datos de usuario existentes. Todas las bases de datos de usuario nuevas usarán la nueva intercalación de manera predeterminada.

    Para obtener más información, vea Configurar o cambiar la intercalación del servidor.
    [ /SQLTEMPDBFILECOUNT=númeroDeArchivos ] Especifica el número de archivos de datos de tempdb. Este valor se puede aumentar hasta 8 o hasta el número de núcleos, lo que sea mayor.

    Valor predeterminado: 8 o el número de núcleos, lo que sea menor.
    [ /SQLTEMPDBFILESIZE=tamañoDeArchivoEnMB ] Especifica el tamaño inicial de cada archivo de datos de tempdb en MB. El programa de instalación permite que el tamaño alcance los 1024 MB.

    Valor predeterminado: 8
    [ /SQLTEMPDBFILEGROWTH=tamañoDeArchivoEnMB ] Especifica el incremento de crecimiento de archivo en MB de cada archivo de datos de tempdb. El valor 0 indica que el crecimiento automático está desactivado y no se permite más espacio. El programa de instalación permite que el tamaño alcance los 1024 MB.

    Valor predeterminado: 64
    [ /SQLTEMPDBLOGFILESIZE=tamañoDeArchivoEnMB ] Especifica el tamaño inicial en MB del archivo de registro de tempdb. El programa de instalación permite que el tamaño alcance los 1024 MB.

    Valor predeterminado: 8.

    Rango permitido: Mín. = 8, Máx. = 1024.
    [ /SQLTEMPDBLOGFILEGROWTH=tamañoDeArchivoEnMB ] Especifica el incremento de crecimiento de archivo en MB del archivo de registro de tempdb. El valor 0 indica que el crecimiento automático está desactivado y no se permite más espacio. El programa de instalación permite que el tamaño alcance los 1024 MB.

    Valor predeterminado: 64

    Rango permitido: Mín. = 8, Máx. = 1024.
    [ /SQLTEMPDBDIR=Directorios ] Especifica los directorios de los archivos de datos de tempdb. Si especifica varios directorios, sepárelos con un espacio en blanco. Si se especifican varios directorios, los archivos de datos de tempdb se distribuirán por los directorios mediante round robin.

    Valor predeterminado: directorio de datos del sistema
    [ /SQLTEMPDBLOGDIR=Directorio ] Especifica el directorio del archivo de registro de tempdb.

    Valor predeterminado: directorio de datos del sistema
  3. Una vez completada la regeneración de las bases de datos del sistema, el programa de instalación regresa al símbolo del sistema sin mostrar ningún mensaje. Examine el archivo de registro Summary.txt para comprobar que el proceso se completó correctamente. Este archivo se encuentra en C:\Program Files\Microsoft SQL Server\160\Setup Bootstrap\Logs.

  4. El escenario RebuildDatabase elimina las bases de datos del sistema y las instala de nuevo en un estado limpio. Dado que el valor del recuento de archivos de tempdb no se conserva, el valor del número de archivos de tempdb no se conoce durante la instalación. Por lo tanto, el escenario RebuildDatabase no conoce el recuento de archivos de tempdb que se van a volver a agregar. Puede volver a proporcionar el valor del número de archivos de tempdb con el parámetro SQLTEMPDBFILECOUNT. Si no se proporciona el parámetro, RebuildDatabase agregará un número predeterminado de archivos de tempdb, que será de tantos archivos de tempdb como el recuento de CPU o de 8, lo que sea menor.

Tareas posteriores al proceso de volver a generar bases de datos

Después de volver a generar la base de datos, quizás deba realizar las tareas adicionales siguientes:

  • Restaurar las copias de seguridad completas más recientes de las bases de datos master, model, y msdb. Para obtener más información, vea Realizar copias de seguridad y restaurar bases de datos del sistema (SQL Server).

    Importante

    Si ha cambiado la intercalación del servidor, no restaure las bases de datos del sistema. Si lo hace, reemplazará la nueva intercalación por la antigua.

    Si no dispone de una copia de seguridad o si la copia de seguridad restaurada no es actual, vuelva a crear las entradas que no se encuentren. Por ejemplo, vuelva a crear todas las entradas que no se encuentren de las bases de datos de usuario, los dispositivos de copia de seguridad, los inicios de sesión de SQL Server, los puntos de conexión, etc. La mejor forma de volver a crear las entradas es ejecutar los scripts originales que se usaron para crearlas.

    Importante

    Se recomienda proteger los scripts para evitar que los modifiquen personas no autorizadas.

  • Si la instancia de SQL Server se configura como Distribuidor de replicación, debe restaurar la base de datos de distribution. Para obtener más información, vea Realizar copias de seguridad y restaurar bases de datos de SQL Server.

  • Mover las bases de datos del sistema a las ubicaciones registradas anteriormente. Para obtener más información, vea Mover bases de datos del sistema.

  • Comprobar que los valores de configuración de todo el servidor coinciden con los valores registrados anteriormente.

Recompile la base de datos resource

Con el procedimiento siguiente se vuelve a generar la base de datos resource. Al recompilar la base de datos resource, se pierden todas las correcciones y, por lo tanto, se deben volver a aplicar.

Regeneración de la base de datos resource

  1. Inicie el programa de instalación de SQL Server (setup.exe) desde los discos de distribución.

  2. En el área de navegación izquierda, haga clic en Mantenimientoy, a continuación, en Reparar.

  3. Las rutinas de archivo y de reglas auxiliares del programa de instalación se ejecutan para asegurarse de que el sistema tiene instalados los requisitos previos y que el equipo supera las reglas de validación del programa de instalación. Seleccione OKInstalar para continuar.

  4. En la página Seleccionar instancia, seleccione la instancia que desea reparar y, a continuación, haga clic en Siguiente.

  5. Las reglas de reparación se ejecutarán para validar la operación. Para continuar, seleccione Siguiente.

  6. En la página Listo para reparar, haga clic en Reparar. La página Operación completada indica que la operación ha finalizado.

Cree una nueva base de datos msdb

Si la base de datos msdb se daña o es sospechosa y no tiene una copia de seguridad de la base de datos msdb, puede crear una nueva msdb con el script instmsdb.

Advertencia

Al recompilar la base de datos msdb el script instmsdb.sql, eliminará toda la información almacenada en msdb como los trabajos, las alertas, los operadores, los planes de mantenimiento, el historial de copia de seguridad, la configuración de la administración basada en directivas, Correo electrónico de base de datos, Almacenamiento de datos de rendimiento, etc.

  1. Detenga todos los servicios que se conectan al motor de base de datos, incluido el Agente SQL Server, SSRS, SSIS y todas las aplicaciones que usan SQL Server como almacén de datos.

  2. Inicie SQL Server desde la línea de comandos usando el comando:

    NET START MSSQLSERVER /T3608
    

    Para más información, consulte Iniciar, detener, pausar, reanudar y reiniciar el motor de base de datos, Agente SQL Server o el Servicio SQL Server Browser. Para obtener más información sobre Marcas de seguimiento 3608, consulte TF3608.

  3. En otra ventana de la línea de comandos, separe la base de datos msdb ejecutando el siguiente comando y reemplazando <servername> por la instancia de SQL Server:

    SQLCMD -E -S<servername> -dmaster -Q"EXEC sp_detach_db msdb"
    
  4. Con el Explorador de Windows, cambie el nombre de los archivos de la base de datos msdb. De forma predeterminada, están en la subcarpeta DATA de la instancia de SQL Server.

  5. Con el Administrador de configuración de SQL Server, detenga y reinicie el servicio motor de base de datos normalmente sin marcas de seguimiento adicionales.

  6. En una ventana del símbolo del sistema, conéctese a SQL Server y ejecute el comando:

    SQLCMD -E -S<servername> -i"C:\Program Files\Microsoft SQL Server\MSSQLXX.INSTANCE_NAME\MSSQL\Install\instmsdb.sql" -o"C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Install\instmsdb.out"
    

    Reemplace <servername> con la instancia del motor de base de datos. Use la ruta de acceso al sistema de archivos de la instancia de SQL Server. Además, reemplace por MSSQLXX.INSTANCE_NAME el directorio que corresponde a la versión y a la instancia.

  7. Con el bloc de notas de Windows, abra el archivo instmsdb.out y compruebe si hay errores en la salida.

  8. Vuelva a aplicar las CPU instaladas en la instancia, que actualizarán msdb la base de datos al nivel de CU actual.

  9. Vuelva a crear el contenido de usuario almacenado en la base de datos msdb, como los trabajos, las alertas, etc.

  10. Realice una copia de seguridad de la base de datos msdb.

Recompile la base de datos tempdb

Si la base de datos tempdb está dañada y el motor de base de datos no se inicia, puede volver a recompilar tempdb sin necesidad de volver a generar todas las bases de datos del sistema.

  1. Cambie el nombre de los archivos tempdb.mdf y templog.ldf actuales, si existen.

  2. Inicie SQL Server desde un símbolo del sistema con el comando siguiente.

    sqlservr -c -f -T3608 -T4022 -s <instance> -mSQLCMD
    

    Para un nombre de instancia predeterminado, use MSSQLSERVER, para la instancia con nombre use MSSQL$<instance_name>. La marca de seguimiento 4022 deshabilita la ejecución de procedimientos almacenados de inicio. -mSQLCMD permite que solo sqlcmd.exe se conecte al servidor. Para obtener más información, consulte Otras opciones de startup.

    Nota:

    Asegúrese de que la ventana del símbolo del sistema permanece abierta después del inicio de SQL Server. Al cerrar la ventana del símbolo del sistema, finalizará el proceso.

  3. Conéctese al servidor mediante sqlcmd y, a continuación, use el siguiente procedimiento almacenado para restablecer el estado de la base de datos tempdb.

    exec master..sp_resetstatus tempdb
    
  4. Pulse Ctrl+C en la ventana del símbolo del sistema para apagar el servidor.

  5. Reinicie el servicio SQL Server. Esto crea un nuevo conjunto de archivos de la base de datos tempdb y recupera la base de datos tempdb.

Solucionar errores de recompilación

Los errores de sintaxis y otros errores en tiempo de ejecución se muestran en la ventana del símbolo del sistema. Examine la instrucción de instalación en busca de los siguientes errores de sintaxis:

  • La barra diagonal (/) no aparece delante de los nombres de los parámetros.

  • Se ha omitido el signo de igualdad (=) entre el nombre del parámetro y su valor.

  • Hay espacios en blanco entre el nombre del parámetro y el signo igual.

  • Presencia de comas (,) u otros caracteres que no se especifican en la sintaxis.

Cuando se haya completado la operación de recompilación, examine los registros de SQL Server en busca de errores. La ubicación de registro predeterminada es C:\Program Files\Microsoft SQL Server\160\Setup Bootstrap\Logs. Para encontrar el archivo de registro que contiene los resultados del proceso de volver a generar bases de datos, cambie el directorio a la carpeta Logs en un símbolo del sistema y, a continuación, ejecute findstr /s RebuildDatabase summary*.*. Esta búsqueda indicará los archivos de registro que contengan los resultados del proceso de volver a generar las bases de datos del sistema. Abra los archivos de registro y examine si contienen mensajes de error relevantes.

Consulte también