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

Cómo migrar trabajos de SQL Server de una instancia de SQL Server a otra

Introducción

En un artículo anterior, destacamos que la base de datos msdb almacena prácticamente todos los objetos relacionados con la automatización. En este artículo, revisaremos el caso de mover trabajos y objetos entre las instancias de SQL Server.

Comencemos con la lista de objetos almacenados en msdb en esta instancia de SQL Server.

Tenemos varios trabajos creados con un plan de mantenimiento (ver el artículo Creando Planes de Mantenimiento en SQL Server). También tenemos dos alertas y un operador. Msdb también almacena alertas y operadores (consulte la Figura 1). Eliminaremos estos objetos y luego los recuperaremos restaurando una copia de seguridad de la base de datos msdb.

Visualización de objetos almacenados en msdb

Si consultamos objetos del sistema relevantes, también vemos estos objetos devueltos como el conjunto de resultados. (Consulte el Listado 1, Figura 2). Msdb también almacena los catálogos del sistema con registros de trabajos, registros de respaldo, operadores, lugares de mantenimiento, correo de base de datos y otros elementos relacionados con la automatización.

-- Listing 1: Check List of Jobs in the Instance
use msdb
go
select @@SERVERNAME as ServerName
select name from sysjobs;

Copia de seguridad msdb

Para ilustrar el concepto de una sola instancia de SQL Server, primero hacemos una copia de seguridad de la base de datos msdb. En escenarios de producción, las copias de seguridad periódicas de las bases de datos de su sistema deben ser parte de su estrategia. Por lo general, son lo suficientemente pequeños como para caber cómodamente en un programa de copia de seguridad completo diario.

Por supuesto, cuando me refiero a una base de datos del sistema, esto no incluye necesariamente tempdb. Además, es posible que tampoco se requiera una copia de seguridad diaria para una base de datos modelo; una copia de seguridad semanal es suficiente. Para las copias de seguridad diarias completas, considere master y msdb.

Usando el código simple en el Listado 2, hacemos una copia de seguridad de la base de datos msdb.

-- Listing 2: Backup msdb Database 
backup database msdb to disk = 'E:\DriveF\msdb_18072020.bak';

Abandono de trabajos

Una vez que la copia de seguridad está lista, soltamos los trabajos en la instancia. Tenga en cuenta que eliminar los trabajos creados por un plan de mantenimiento requiere eliminar los planes de mantenimiento que los crearon (consulte la Figura 3).

Los trabajos regulares se pueden eliminar eliminándolos con la GUI. Otra forma es ejecutar el código del Listado 3, seguido del código del Listado 4.

El Listado 3 genera el conjunto de scripts necesarios para descartar los trabajos. Luego, en el Listado 4, ejecutamos los scripts generados en el Listado 3.

Puede usar este enfoque aunque los nombres de trabajo en su instancia probablemente sean diferentes a los míos.

-- Listing 3: Generate Script to Drop Jobs
USE [msdb]
GO
select 'EXEC msdb.dbo.sp_delete_job @job_name=N''' + [name] + ''', @delete_unused_schedule=1' from sysjobs;
GO
-- Listing 4: Drop SQL Agent Jobs
EXEC msdb.dbo.sp_delete_job @job_name=N'DB1_BackupTransactionLog', @delete_unused_schedule=1
EXEC msdb.dbo.sp_delete_job @job_name=N'syspolicy_purge_history', @delete_unused_schedule=1

Después de descartar los trabajos, podemos verificar que no quedan trabajos. Use el mismo script, como se muestra en el Listado 1. Consideramos dos formas para el escenario:

  1. Alguien ha borrado accidentalmente trabajos y objetos similares en una instancia.
  2. Queremos importar trabajos de una instancia a otra.

Restauración de msdb

Iniciamos la operación de restauración utilizando el script del Listado 5. En ese script, comenzamos configurando la base de datos en modo de usuario único. Como alguien o algo (¿una cuenta del Agente SQL?) podría estar conectado a esta base de datos, es necesario.

Luego, emitimos el comando "restaurar" y configuramos la nueva base de datos msdb en multi_usuario. Tenga en cuenta que usamos la opción REEMPLAZAR en la declaración de restauración. Si está migrando msdb a una nueva instancia, será necesaria la cláusula REPLACE. Sin él, SQL Server puede devolver un error sobre el conjunto de copia de seguridad que no pertenece a la base de datos msdb en la instancia.

-- Listing 5: Restore msdb database
use master
go
alter database msdb set single_user with rollback immediate;
GO
restore database msdb from disk = 'E:\DriveG\msdb_18072020.bak'
with replace;
GO
alter database msdb set multi_user;
GO

Una vez que se completa la operación de restauración, se recuperan los trabajos que faltan y otros objetos. Vienen completos con sus respectivas historias laborales. Todas las relaciones entre los trabajos con bases de datos y otros objetos están intactas. Los trabajos funcionan como si nadie ni nada los hubiera borrado nunca.

Conclusión

Podemos migrar fácilmente trabajos y objetos similares de una instancia de SQL Server a otra. Para eso, necesitamos un proceso de copia de seguridad y restauración de msdb. Del mismo modo, podemos recuperar estos objetos en una instancia de SQL Server si se pierden por algún motivo.