sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan migrerer du SQL Server-job fra en SQL Server-instans til en anden

Introduktion

I en tidligere artikel fremhævede vi, at msdb-databasen gemmer praktisk talt alle objekter relateret til automatisering. I denne artikel gennemgår vi tilfældet med flytning af job og objekter mellem SQL Server-instanserne.

Lad os starte med listen over objekter, der er gemt i msdb på denne forekomst af SQL Server.

Vi har flere job oprettet med en vedligeholdelsesplan (se artiklen Oprettelse af vedligeholdelsesplaner i SQL Server). Vi har også to alarmer og en operatør. Msdb gemmer også alarmer og operatører (se figur 1). Vi skal slette disse objekter og derefter gendanne dem ved at gendanne en sikkerhedskopi af msdb-databasen.

Visning af objekter gemt i msdb

Hvis vi forespørger på relevante systemobjekter, ser vi også disse objekter returneret som resultatsættet. (Se liste 1, figur 2). Msdb gemmer også systemkatalogerne med optegnelser over job, backup-logfiler, operatører, vedligeholdelsessteder, databasemail og andre elementer relateret til automatisering.

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

Backup msdb

For at illustrere konceptet for en enkelt forekomst af SQL Server tager vi først en backup af msdb-databasen. I produktionsscenarier bør regelmæssige sikkerhedskopier af dine systemdatabaser være en del af din strategi. De er normalt små nok til at passe ind i en daglig fuld backup tidsplan.

Selvfølgelig, når jeg henviser til en systemdatabase, inkluderer dette ikke tempdb nødvendigt. Desuden er en daglig backup af en modeldatabase muligvis heller ikke nødvendig – en ugentlig backup er tilstrækkelig. Overvej master og msdb for den fulde daglige backup.

Ved at bruge den simple kode i liste 2 tager vi en sikkerhedskopi af msdb-databasen.

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

Slet job

Når backupen er klar, dropper vi jobs på instansen. Bemærk, at slette de job, der er oprettet af en vedligeholdelsesplan, kræver at de vedligeholdelsesplaner, der oprettede dem, slettes (se figur 3).

Almindelige job kan fjernes ved at slette dem med GUI. En anden måde er at køre koden fra liste 3, efterfulgt af koden fra liste 4.

Liste 3 genererer det sæt scripts, der er nødvendige for at droppe opgaverne. Derefter, i liste 4, udfører vi scripts genereret i liste 3.

Du kan bruge denne tilgang, selvom jobnavne i dit tilfælde sandsynligvis er forskellige fra mine.

-- 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

Efter at have droppet jobs, kan vi bekræfte, at der ikke er nogen job tilbage. Brug det samme script, som vist i liste 1. Vi overvejer to måder for scenariet:

  1. Nogen har ved et uheld slettet jobs og lignende objekter i en instans.
  2. Vi ønsker at importere job fra én instans til en anden.

Gendannelse af msdb

Vi starter gendannelsesoperationen ved hjælp af scriptet fra liste 5. I det script begynder vi med at sætte databasen til single_user mode. Da nogen eller noget (SQL Agent-konto?) muligvis er logget ind i denne database, er det nødvendigt.

Derefter udsteder vi kommandoen "gendan" og indstiller den nye msdb-database til multi_user. Bemærk, at vi brugte REPLACE-indstillingen i gendannelsessætningen. Hvis du migrerer msdb til en ny instans, vil REPLACE-sætningen være nødvendig. Uden den kan SQL Server returnere en fejl om sikkerhedskopieringssættet, der ikke hører til msdb-databasen på instansen.

-- 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

Når gendannelsen er fuldført, er de manglende job og andre objekter tilbage. De kommer komplet med deres respektive jobhistorier. Alle relationer mellem jobs med databaser og andre objekter er intakte. Jobbene fungerer, som om ingen og intet nogensinde har slettet dem.

Konklusion

Vi kan nemt migrere job og lignende objekter fra en SQL Server-instans til en anden. Til det har vi brug for en backup- og gendannelsesproces af msdb. På samme måde kan vi gendanne disse objekter på en SQL Server-instans, hvis de går tabt af en eller anden grund.


  1. Sådan installeres MySQL 8.0 på CentOS 8 / RHEL 8

  2. psycopg2 indsætter faktisk ikke data

  3. Hvordan får jeg lokale data ind i en skrivebeskyttet database ved hjælp af dplyr?

  4. SQL Server-ydelse TOP CPU-forespørgsel -1