Af: Atif Shehzad | Opdateret: 2009-06-15 | Kommentarer (4) | Relateret: Mere > Backup

Problem

Jeg har implementeret en backup-plan for mine SQL Server-databaser. Jeg tager en dailyfull backup understøttet med differentielle backups hver time. En gendannelsesplan er dokumenteret på baggrund af denne backup-plan sammen med placering og tidspunkt for de backups, der er nævnt i planen. Ofte er jeg nødt til at opdatere test- eller udviklingsserveren med en nyere kopi af produktionsdatabasen. Til dette formål tager jeg en fuld sikkerhedskopi af den nødvendige database. Problemet er, at sådanne ad hoc-backups afbryder min planlagte genopretningssekvens i tilfælde af en nødvendig genopretning. Er der nogen måde, hvorpå mine ad hoc-backups ikke afbryder sekvensen i min backup-plan?

Løsning

Glædeligvis har vi i SQL Server 2005 og fremefter en backup-mulighed for en sådan situation. Denne backupmulighed er kendt som Copy Only-backups. Denne mulighed er specielt beregnet til at oprette en ad hoc-backup, der ikke forstyrrer den planlagte gendannelsessekvens for den pågældende database.

Copy Only-backups kan bruges til at oprette en fuld backup eller en transaktionslogbackup. Denne indstilling er ikke implementeret til differentielle sikkerhedskopier. I praktiske scenarier vil du sjældent have brug for at oprette en Copy Only-logbackup, men Copy Only-muligheden kan ofte anvendes i forbindelse med fulde backups.

Men selv om Copy Only-muligheden er tilgængelig for SQL Server 2005, er der ikke mulighed for at oprette dem ved hjælp af SSMS i SQL 2005. Hvis du har SSMS 2008, kan du bruge GUI’en, eller du skal bruge en T-SQL-anvisning til at oprette Copy Only-backups.

Først skal vi se på, hvordan dette kan gøres ved hjælp af SSMS 2008 for at oprette Copy Onlybackup

  • Gå til backupdatabasevinduet, som du ville gøre for en normal backup
  • Lige under menuen “Backup type”, finder du et afkrydsningsfelt for “Copy OnlyBackup”
  • Klik på dette afkrydsningsfelt
  • Udfyld alle andre relaterede oplysninger, som du ville gøre det for en normal sikkerhedskopi, og klik på OK

Notat: Afkrydsningsfeltet for “Copy Only Backup” vil også være aktivt for differentielle sikkerhedskopier, men det vil ikke have nogen anden effekt end at oprette en normal differentiel sikkerhedskopi.

For det andet kan du for at oprette en Copy Only-backup med T-SQL bruge følgende kommando:

-- Create full backup with Copy Only optionBACKUP DATABASE AdventureWorks TO DISK = 'D:\WithoutCopyOnly_AdventureWorks.bak'WITH COPY_ONLYGO

Beviser konceptet

Hvor vi går videre, vil det være godt at opsummere konceptet om, at en fuld backup med Copy Only-indstillingen er uafhængig af rækkefølgen af dine andre normale backups.Så efter at du har oprettet en sikkerhedskopi med copy only-indstillingen, vil du kunne arbejde med genoprettelsesplanen baseret på dine planlagte sikkerhedskopier uden at dette påvirker din gendannelsesproces.

Vi vil bruge LSN-oplysninger (log sequence number) til at spore den fulde sikkerhedskopi, som er grundlaget for de differentielle sikkerhedskopier. Først vil vi notere LSN for den differentielle base for AdventureWorks-databasen.

--Script # 1: Note current differential base LSNSELECT DB_NAME(database_id) AS ,differential_base_lsn AS 'Note differential base LSN'FROM sys.master_filesWHERE database_id = DB_ID('AdventureWorks')AND type_desc = 'ROWS'GO

Differential_base_lsn påvirker den rækkefølge, i hvilken kombination af sikkerhedskopier skal gendannes i en gendannelse. Du kan også få detaljerede oplysninger omLSN for en hvilken som helst database fra tabellen msdb..backupset.

Nu skal vi bekræfte, at en fuld sikkerhedskopi uden Copy Only-indstillingen vil opdatere differential_base_lsn. Til dette formål vil vi udsende en fuld backupkommando uden Copy Only-indstillingen, og vi vil notere ændringen i LSN for at bevise, at den opdaterede differentialbase-LSN er LSN for vores sidste fulde backup.

--Script # 2: Create full backup and compare LSN information-- Create full backup -- Run script after changing Backup pathBACKUP DATABASE AdventureWorks TO DISK = 'D:\WithoutCopyOnly_AdventureWorks.bak'GO-- Get differential_base_lsn after full backupSELECT DB_NAME(database_id) AS ,differential_base_lsn AS 'Updated differential base LSN'FROM sys.master_filesWHERE database_id = DB_ID('AdventureWorks')AND type_desc = 'ROWS'GO-- Get LSN of recent full backup for match purposeSELECT database_name, backup_start_date, is_copy_only,first_lsn as 'LSN of full bakup'FROM msdb..backupset WHERE database_name = 'AdventureWorks'ORDER BY backup_start_date DESCGO

I det følgende resultatsæt kan vi verificere, at LSN er blevet ændret for den differentielle backupgendannelsesbase og matcher vores LSN for den fulde backup. Begge markeredeLSN’er nedenfor er de samme, hvilket bekræfter, at den sidste sikkerhedskopi er vores differentialbase.

Nu vil vi oprette en fuld sikkerhedskopi med Copy Only-indstillingen, og det vil blive bevist, at den fulde sikkerhedskopi med Copy Only-indstillingen ikke vil påvirke vores databases LSN for differentielbase. Med andre ord vil den fulde sikkerhedskopi med Copy Only-indstillingen ikke påvirke den fulde basissikkerhedskopi for de differentielle sikkerhedskopier.

--Script # 3: Create full backup with copy only option and compare LSN information-- Create full backup with copy only option-- Run script after changing Backup pathBACKUP DATABASE AdventureWorks TO DISK = 'D:\CopyOnly_AdventureWorks.bak'WITH COPY_ONLYGO-- Get differential_base_lsn after full backup with copy only optionSELECT DB_NAME(database_id) AS ,differential_base_lsn AS 'Un changed differential base LSN'FROM sys.master_filesWHERE database_id = DB_ID('AdventureWorks')AND type_desc = 'ROWS'GO-- Get LSN of recent full backup with copy only option for match purposeSELECT database_name, backup_start_date, is_copy_only,first_lsn as 'LSN of last full bakup'FROM msdb..backupset WHERE database_name = 'AdventureWorks'ORDER BY backup_start_date DESCGO

I det følgende billede kan vi konstatere, at efter en fuld sikkerhedskopiering med indstillingen Copy Only er det differentielle basis-LSN uændret, og det svarer til LSN for den foregående fulde sikkerhedskopi (begge er markeret med rødt). Bemærk også, at den sidste fulde sikkerhedskopi med Copy Only-indstillingen også er der (markeret grønt).

Følgende overvejelser vil være nyttige, når du bruger sikkerhedskopier med Copy Only-indstillingen.

  • Kopier kun-indstillingen vil også fungere for kompatibilitetsniveau 80-databaser i en SQL Server 2005-instans
  • Transaktionslog-backups med Copy Only-indstillingen bevarer det eksisterende log-arkivpunkt, og derfor vil den ikke afbryde transaktionslogfilerne for den pågældende database.
  • Der kræves ingen forbedrede overvejelser, når du gendanner en sikkerhedskopi, der er oprettet med Copy Only-indstillingen.
  • En fuld sikkerhedskopi med Copy Only-indstillingen kan ikke bruges som grundlag for gendannelse af differentielle sikkerhedskopier
  • En logbackup med Copy Only-indstillingen kan oprettes for databaser med recoverymodel full eller bulk logged only.
  • En fuld backup med Copy Only-indstillingen kan oprettes for databaser med en hvilken som helst genoprettelsesmodel.
Næste trin

Når du tager en backup ud af din backup-plan, skal du overveje at bruge Copy Only-indstillingen for at undgå forvirring og forstyrrelser i din genoprettelsesplan. Husk på, at Copy Only-backups er uafhængige af normale backups.

  • Så næste gang du skal opdatere dine test- eller udviklingsmiljøerovervej at bruge Copy Only-optionen, så du ikke afbryder din gendannelsesproces
  • For oplysninger om databasegenoprettelsesmodeller klik her eller her
  • Her er et relateret tip omCOPY ONLY-backups

Sidst opdateret: 2009-06-15

Om forfatteren
Atif Shehzad er en passioneret SQL Server DBA, teknisk reviewer og artikelforfatter.
Se alle mine tips
Relaterede ressourcer

  • Mere SQL Server DBA-tips…

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.