sql >> Base de Datos >  >> RDS >> Sqlserver

Bases de datos del sistema de SQL Server – Restaurar bases de datos del sistema

En los artículos anteriores de la serie Bases de datos del sistema SQL Server, aprendimos el propósito de todas las bases de datos del sistema SQL Server que vienen como parte de la instalación de SQL Server y comprendimos las mejores prácticas que se implementarán para ellas. También hemos entendido las bases de datos Tempdb y MSDB con más detalle. Dado que la copia de seguridad y restauración de la base de datos del sistema es ligeramente diferente en comparación con las bases de datos de usuario, en este artículo veremos en detalle cómo hacer una copia de seguridad de las bases de datos del sistema y restaurar la base de datos del sistema desde las copias de seguridad.

Copia de seguridad de la base de datos SQL

El término Copia de seguridad se refiere a copiar los datos dentro de una base de datos como un archivo de respaldo que se puede usar para restaurar o recuperar más los datos.

Una copia de seguridad completa de una base de datos contendrá las copias de datos en archivos de datos y archivos de registro para restaurar como una base de datos o realizar la restauración de un punto en el tiempo en caso de desastres o fallas catastróficas. Por lo tanto, las copias de seguridad completas periódicas del sistema, así como las bases de datos de los usuarios, son cruciales.

Además de la copia de seguridad completa, SQL Server admite varias otras opciones de copia de seguridad, como la copia de seguridad diferencial, la copia de seguridad del registro transaccional, la copia de seguridad de archivos, etc., pero no nos vamos a centrar en ellas porque están fuera del alcance de este artículo.

Se debe programar una copia de seguridad completa de la base de datos para que se ejecute periódicamente o después de cualquier cambio de configuración específico. Aunque SQL Server puede aceptar la copia de seguridad completa de la base de datos en diferentes extensiones de archivo, se recomienda guardar esa copia de seguridad como un archivo *.bak para facilitar la clasificación y el mantenimiento.

La sintaxis de la base de datos de copia de seguridad tiene muchas opciones disponibles, pero solo nos centraremos en los comandos fundamentales necesarios para realizar la copia de seguridad completa de cualquier base de datos. La sintaxis completa está presente en el artículo de MSDN.

Sintaxis de BACKUP DATABASE (mínima)

BACKUP DATABASE <Database_name> 
TO DISK = <File_Path>
GO

Copia de seguridad de bases de datos de usuarios

Para realizar una copia de seguridad completa de AdventureWorks base de datos, simplemente reemplace el Nombre de la base de datos y Ruta del archivo en el comando anterior BACKUP DATABASE y ejecútelo:

BACKUP DATABASE [AdventureWorks] 
TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\AdventureWorks_Full.bak'
GO

Bases de datos del sistema de copia de seguridad

Con el comando BACKUP DATABASE anterior, podemos realizar una copia de seguridad completa de las bases de datos del sistema, como master, msdb y model:

BACKUP DATABASE master 
TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\master_Full.bak'
GO
BACKUP DATABASE model 
TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\model_Full.bak'
GO
BACKUP DATABASE msdb 
TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\msdb_Full.bak'
GO

Podemos navegar a la ruta de la carpeta anterior, y allí vemos las copias de seguridad completas de la base de datos creadas con éxito tanto para la base de datos del usuario como para las bases de datos del sistema:

¿Es posible hacer una copia de seguridad de la base de datos tempdb?

Intentemos realizar una copia de seguridad completa de la base de datos del sistema tempdb utilizando la misma sintaxis de BACKUP DATABASE:

BACKUP DATABASE tempdb 
TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\tempdb_Full.bak'
GO

Como comentamos en artículos anteriores, tempdb es la única base de datos para la que una Copia de seguridad no se puede tomar . La base de datos tempdb se creará nuevamente cada vez que se inicien los servicios de SQL Server. Por lo tanto, si hay algún problema con tempdb, reiniciar el servicio de SQL Server ayudará a resolverlo.

Restaurar base de datos

La restauración de una base de datos desde una copia de seguridad completa (*.bak) recupera la base de datos con datos completos o "hace retroceder" una base de datos a un punto en el tiempo. El comando RESTORE también se puede usar para restaurar archivos, grupos de archivos o registros de transacciones, pero no es el alcance del artículo actual.

Para restaurar una copia de seguridad completa de la base de datos , podemos usar la siguiente sintaxis. Nota:Al igual que el comando BACKUP, el comando RESTORE tiene muchas opciones, pero apelaremos solo a las básicas. Puede encontrar información detallada sobre esas opciones en un artículo dedicado de MSDN.

Sintaxis de RESTORE DATABASE

RESTORE DATABASE <Database_Name> 
FROM  DISK = <File Path>
WITH  REPLACE
GO

Restaurar base de datos de usuario

Para restaurar AdventureWorks base de datos de la copia de seguridad completa que hicimos anteriormente, podemos usar el comando RESTORE DATABASE, reemplazando el Nombre de la base de datos y Ruta del archivo como se muestra a continuación:

RESTORE DATABASE [AdventureWorks] 
FROM DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\AdventureWorks_Full.bak' 
WITH REPLACE
GO

Restaurar base de datos del modelo

Intentemos restaurar la base de datos del sistema modelo usando el comando RESTORE DATABASE:

RESTORE DATABASE model 
FROM DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\model_Full.bak' 
WITH REPLACE
GO

La copia de seguridad de la base de datos del modelo se puede restaurar con éxito usando el comando predeterminado RESTORE DATABASE.

Restaurar base de datos maestra

Ahora, intentemos restaurar la base de datos maestra del sistema usando el comando RESTORE DATABASE:

RESTORE DATABASE master 
FROM  DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\master_Full.bak' 
WITH  REPLACE
GO

Lanzó un error que indicaba que la instancia de SQL Server debería ejecutarse en el modo de usuario único para restaurar la base de datos maestra. Como indica el mensaje de error, debemos iniciar nuestra instancia de SQL Server en el modo de usuario único y luego intentar restaurar la base de datos maestra.

Para iniciar una instancia de SQL Server en el modo de usuario único, podemos aplicar uno de los siguientes métodos:

  • Símbolo del sistema
  • Parámetros de inicio de SQL Server en el Administrador de configuración de SQL Server.

Enfoque del símbolo del sistema

Para iniciar la instancia de SQL Server en un modo de usuario único a través del símbolo del sistema, abra el Símbolo del sistema con Ejecutar como administrador opción como se muestra a continuación:

Una vez hecho esto, escriba el comando:

NET STOP <SQL_Server_Service_Name>

El SQL_Server_Service_Name se puede obtener a través del Administrador de configuración de SQL Server o services.msc

Administrador de configuración de SQL Server

Servicios.msc

Dado que nuestro servicio SQL Server es la instancia predeterminada, podemos usar el nombre MSSQLSERVER como se destacó anteriormente. Una vez ingresado, solicitará confirmación para detener todos los servicios dependientes. También podemos detener el servicio del Agente SQL Server escribiendo Y para .

Cuando se detiene el servicio de SQL Server, podemos iniciarlo en modo de usuario único. Ejecute el siguiente comando donde /m significa iniciar SQL Server Service en modo de usuario único.

NET START MSSQLSERVER /m

Cuando se realiza, podemos intentar restaurar la base de datos maestra. Ejecute el comando RESTORE BACKUP como antes:

Al iniciar la instancia de SQL Server en modo de usuario único, podemos restaurar la base de datos del sistema maestro con éxito desde la última copia de seguridad completa de la base de datos conocida sin ningún problema. Por lo tanto, hemos aprendido que para restaurar la base de datos maestra, la instancia de SQL Server debe estar en modo de usuario único.

Con la instancia de SQL Server en modo de usuario único, solo un usuario puede conectarse y, una vez completadas nuestras actividades de restauración, debemos volver a cambiarlo al modo multiusuario deteniendo la instancia de SQL Server e iniciando la instancia de SQL Server sin la opción /m, como se muestra. a continuación:

NET STOP MSSQLSERVER
NET START MSSQLSERVER

Una vez iniciado en modo normal o modo multiusuario, todos los usuarios pueden conectarse a la instancia de SQL Server y realizar sus actividades. También podemos verificar que la base de datos maestra se restauró al momento en que se realizó la copia de seguridad completa y cualquier cambio de configuración realizado después de eso debe realizarse nuevamente.

Algunas cosas a tener en cuenta mientras la instancia de SQL Server está en modo de usuario único:

  • Cuando la instancia de SQL Server está en modo de usuario único, solo una sesión de usuario puede conectarse a ella. Por lo tanto, asegúrese de que el servicio del Agente SQL Server y todos los demás servicios relacionados con SQL Server estén en el estado detenido. estado. De lo contrario, esas conexiones pueden establecerse primero y, si sucede, no podemos conectarnos a SQL Server para restaurar la base de datos.
  • Mientras se conecta a través de SSMS en un modo de usuario único, desconecte el Explorador de objetos y conéctese solo a través de la ventana de consulta. Si se establece una conexión desde el Explorador de objetos, se establece una única conexión. Por lo tanto, no puede conectarse desde la ventana de consulta. Consulte la siguiente captura de pantalla:muestra cómo conectar solo la ventana Nueva consulta sin conectarse a través del Explorador de objetos:

Parámetro de inicio de SQL Server en Configuration Manager

Aquellos que se sientan más cómodos con la GUI en lugar del símbolo del sistema pueden aplicar el siguiente enfoque.

1). Abra el Administrador de configuración de SQL Server escribiendo MSSQLManager13.msc en el símbolo del sistema. Aquí, 13 se refiere a SQL Server 2016, así que use los números correspondientes correctos para otras versiones de SQL Server:

  • Servidor SQL 2012SQLServerManager11.msc
  • Servidor SQL 2014SQLServerManager12.msc
  • Servidor SQL 2016SQLServerManager13.msc
  • Servidor SQL 2017SQLServerManager14.msc
  • Servidor SQL 2019SQLServerManager15.msc

2). Expanda Servicios de SQL Server :

3). Haga clic con el botón derecho en el servicio de SQL Server identificado como SQL Server (MSSQLSERVER) > Propiedades .

4). Seleccione los Parámetros de inicio pestaña del menú.

5). Haga clic en -m en Especificar un parámetro de inicio campo, luego haga clic en Agregar para iniciar el servicio de SQL Server en modo de usuario único.

6). Haga clic en Aceptar y reinicie el servicio de SQL Server para iniciar el servicio de SQL Server en modo de usuario único.

Para modificar la instancia de SQL Server del modo de usuario único al modo multiusuario o al modo normal después de restaurar la base de datos maestra, simplemente haga clic en el parámetro -m de Parámetro existente s , Haga clic en Quitar y reinicie el servicio de SQL Server.

Restaurar base de datos MSDB

Ahora, intentemos restaurar la copia de seguridad de la base de datos del sistema msdb usando el comando RESTORE DATABASE predeterminado:

RESTORE DATABASE msdb 
FROM  DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\msdb_Full.bak' 
WITH  REPLACE
GO

Este intento nos trae un error que indica No se pudo obtener acceso exclusivo porque la base de datos está en uso . Este mensaje de error indica que algún otro proceso está usando msdb . Por lo tanto, debemos aplicar uno de los siguientes enfoques para restaurar la base de datos msdb correctamente:

  • Inicie la instancia o el servicio de SQL Server en el modo de usuario único como hicimos anteriormente para evitar que alguien se conecte y acceda a msdb base de datos.
  • O trae el msdb base de datos al modo de usuario único sin que ningún usuario se conecte a ella.

Dado que sabemos cómo cambiar la instancia o el servicio de SQL Server al modo de usuario único mientras se restaura la base de datos del sistema maestro, probaremos la segunda opción cambiando la base de datos msdb al modo de usuario único para restaurar la copia de seguridad de la base de datos msdb.

Ejecute el siguiente comando:

USE [master]
GO
ALTER DATABASE [msdb] SET  SINGLE_USER WITH ROLLBACK IMMEDIATE
GO

Importante :La ejecución del comando anterior puede fallar en los siguientes casos:

  • El servicio del Agente SQL Server está activo y funcionando. Para solucionar el error, detenga el servicio del Agente SQL Server y vuelva a intentarlo.
  • Cualquier sesión de usuario está conectada a la base de datos msdb. Podemos encontrar conexiones activas a msdb u otra base de datos usando la siguiente consulta:
use master
GO
select spid
from sys.sysprocesses
where dbid = db_id('msdb')

Si esta consulta arroja algún resultado, indica que algunas sesiones de usuario están conectadas a la base de datos msdb. En este caso, deberíamos matar esas sesiones con el comando KILL y reemplazar el spid obtenido de la ejecución de la consulta anterior:

KILL <spid>

Cuando no hay sesiones conectadas a msdb base de datos, podremos llevar con éxito la base de datos msdb al modo de usuario único. Siempre que una base de datos esté en modo de usuario único, podremos ver la palabra (Usuario único) que se muestra cerca de la base de datos como se destaca a continuación para la base de datos msdb:

Intentemos restaurar el msdb base de datos ahora usando nuestro comando RESTORE DATABASE:

Con la base de datos msdb en modo de usuario único, pudimos restaurar msdb base de datos correctamente desde la última copia de seguridad completa buena conocida de msdb base de datos. Restaurar una base de datos desde la copia de seguridad la traerá de forma predeterminada al modo multiusuario y, si todavía está en modo de usuario único por algún motivo, podemos ejecutar el siguiente comando para devolverla al modo multiusuario:

USE [master]
GO
ALTER DATABASE [msdb] SET MULTI_USER
GO

Reconstruir bases de datos del sistema

Para cualquier producción ideal entornos, es fundamental contar con una copia de seguridad completa de las bases de datos del sistema para restaurar las bases de datos del sistema sin pérdida de datos en caso de errores accidentales por parte de los usuarios o daños en la base de datos o recuperación ante desastres.

En el peor de los casos, si no se pueden iniciar los servicios de SQL Server, primero tendríamos que intentar restaurar las bases de datos del sistema desde las últimas copias de seguridad completas conocidas y si no tenemos copias de seguridad completas disponibles y no podemos iniciar los servicios de SQL Server, entonces estamos queda con una sola opción final, es decir, Reconstruir las bases de datos del sistema. Nota :La reconstrucción de las bases de datos del sistema borrará todas las configuraciones de nivel de servidor almacenadas en todas las bases de datos del sistema y es posible que perdamos todas las configuraciones de nivel de servidor/instancia, como inicios de sesión, configuraciones del Agente SQL Server, otros detalles críticos almacenados en las bases de datos del sistema que hemos visto en nuestros artículos anteriores.

Echemos un vistazo rápido a cómo reconstruir las bases de datos del sistema (como se mencionó anteriormente, este proceso debe realizarse como última medida para recuperar la instancia de SQL Server en ausencia de copias de seguridad completas de las bases de datos del sistema).

Para reconstruir las bases de datos del sistema, necesitaríamos los medios de instalación de SQL Server, ya sea montados o copiados en el servidor donde está instalada nuestra instancia de SQL Server. Una vez hecho esto, debemos seguir los siguientes pasos:

  1. En el símbolo del sistema, navegue hasta la ruta donde se encuentran los archivos de instalación de SQL Server (setup.exe):

    C:\Archivos de programa\Microsoft SQL Server\130\Setup Bootstrap\SQLServer2016
  2. Ejecute el siguiente comando, reemplazando todos los parámetros con valores válidos. Valor ACCIÓN =RECONSTRUIR BASE DE DATOS indica que todas las bases de datos del sistema se reconstruirán después de ejecutar ese comando.
Setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=InstanceName /SQLSYSADMINACCOUNTS=accounts [ /SAPWD= StrongPassword ] [ /SQLCOLLATION=CollationName]

Los parámetros que se cambiarán incluyen:

  • Nombre de instancia – el Nombre de Instancia de SQL Server, en nuestro caso es RRJ
  • Cuentas – el nombre de la cuenta de administrador del sistema, en nuestro caso es sa
  • Contraseña fuerte – una contraseña segura para el sa cuenta de administrador del sistema.
  • Nombre de la colación – el Nombre de intercalación de la base de datos de SQL Server si es necesario cambiarlo.

Conclusión

Hemos aprendido cómo hacer una copia de seguridad y restaurar las bases de datos del usuario y del sistema y hemos entendido las medidas adicionales necesarias para restaurar las bases de datos del sistema, como las bases de datos del sistema maestro y msdb. En caso de que falten copias de seguridad completas de las bases de datos del sistema, también aprendimos cómo reconstruir las bases de datos del sistema a partir de los medios de instalación de SQL Server y comprendimos las pérdidas de datos relacionadas con la configuración involucradas durante la reconstrucción de las bases de datos del sistema. Para resumir, comprendimos indirectamente la importancia de programar copias de seguridad completas para las bases de datos del sistema además de las bases de datos de los usuarios.

Gracias por su tiempo, nos volveremos a encontrar pronto con otro artículo interesante.