De: Atif Shehzad | Actualizat: 2009-06-15 | Comentarii (4) | Related: Mai multe > Backup

Problemă

Am implementat un plan de backup pentru bazele mele de date SQL Server. Efectuez zilnic un backup complet susținut de backup-uri diferențiale din oră în oră. Un plan de restaurare este documentat pe baza acestui plan de backup împreună cu locația și ora backup-urilor menționateîn plan. Deseori sunt nevoit să actualizez serverul de testare sau de dezvoltare cu o copie recentă a bazei de date de producție. În acest scop, fac o copie de rezervă completă a bazei de date solicitate. Problema este că astfel de copii de rezervă ad-hoc îmi întrerup secvența de recuperare planificată în cazul unei recuperări necesare. Există vreo modalitate prin care copiile mele de rezervă ad-hoc să nu întrerupă secvența planului meu de copie de rezervă?

Soluție

Din fericire, în SQL Server 2005 și mai departe avem o opțiune de copie de rezervă pentru o astfel de situație. Această opțiune de backup este cunoscută sub numele de Copy Only backups. Această opțiuneeste special pentru a crea o copie de rezervă ad-hoc care nu va perturba secvența de restaurare planificată pentru baza de date respectivă.

Copy Only backups poate fi folosit pentru a crea o copie de rezervă completă sau o copie de rezervă a jurnalului de tranzacții. Această opțiune nu este implementată pentru copiile de rezervă diferențiale. În scenarii practice, rareori veți avea nevoie să creați o copie de rezervă a jurnalului Copy Only, însă opțiunea Copy Only poate fi utilizată frecvent cu copiile de rezervă complete.

Deși opțiunea Copy Only este disponibilă pentru SQL Server 2005, nu există posibilitatea de a le crea folosind SSMS în SQL 2005. Dacă aveți SSMS 2008 puteți folosiGUI sau trebuie să folosiți o instrucțiune T-SQL pentru a crea copii de rezervă Copy Only.

În primul rând, să vedem cum se poate face acest lucru folosind SSMS 2008 pentru a crea Copy Onlybackup

  • Veți la fereastra bazei de date de backup așa cum ați face-o pentru un backup normal
  • Just sub meniul „Backup type”, veți găsi o căsuță de selectare pentru „Copy OnlyBackup”
  • Click pe această căsuță de selectare
  • Completați toate celelalte informații aferente așa cum ați face-o pentru o copie de rezervă normală și faceți clic pe OK

Nota: Căsuța de selectare pentru „Copy Only Backup” va fi, de asemenea, activă pentru copiile de rezervă diferențiale, dar nu va avea alt efect decât crearea unei copii de rezervă diferențiale normale.

În al doilea rând, pentru a crea o copie de rezervă numai pentru copiere cu T-SQL puteți lansa următoarea comandă:

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

Demonstrarea conceptului

Înainte de a merge mai departe va fi bine să rezumăm conceptul că o copie de rezervă completăcu opțiunea numai pentru copiere este independentă de secvența celorlalte copii de rezervă normale.Astfel, după ce creați o copie de rezervă cu opțiunea „copy only”, veți putea lucra cu planul de recuperare bazat pe copiile de rezervă programate, fără ca acest lucru să afecteze procesul de restaurare.

Vom folosi informațiile LSN (log sequence number) pentru a urmări copia de rezervă completă care este baza pentru copiile de rezervă diferențiale. Mai întâi vom nota LSN-ul pentru baza diferențială a bazei de date AdventureWorks.

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

Baza_diferențială_lsn afectează secvența în care combinația de copii de rezervă urmează să fie restaurată într-o recuperare. De asemenea, puteți obține informații detaliate despreLSN a oricărei baze de date din tabelul msdb..backupset.

Acum trebuie să confirmăm că o copie de rezervă completă fără opțiunea Copy Only va actualiza differential_base_lsn. În acest scop, vom emite o comandă de backup complet fără opțiunea Copy Only și vom nota modificarea LSNpentru a dovedi că LSN-ul bazei diferențiale actualizate este LSN-ul ultimului nostru backup complet.

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

În următorul set de rezultate, putem verifica faptul că LSN-ul a fost modificat pentru baza de restaurare a backup-ului diferențial și se potrivește cu LSN-ul backup-ului nostru complet. Ambele LSN-uri marcate de mai jos sunt aceleași, ceea ce confirmă faptul că ultima copie de rezervă este baza noastră diferențială.

Acum vom crea o copie de rezervă completă cu opțiunea „Copy Only” și se va dovedi că această copie de rezervă completă cu opțiunea „Copy Only” nu va afecta LSN-ul bazei diferențiale a bazei noastre de date. Cu alte cuvinte, salvarea completă cu opțiunea Copy Only nu va afecta salvarea completă de bază pentru salvările diferențiale.

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

În imaginea următoare putem verifica că după o copie de rezervă completă cu opțiuneaCopy Only LSN-ul de bază diferențial este neschimbat și se potrivește cu LSN-ul din copia de rezervă completă anterioară (ambele sunt marcate cu roșu). Observați, de asemenea, că ultima copie de rezervă completă cu opțiunea Copy Only este, de asemenea, acolo (marcată cu verde).

Următoarele considerații vor fi utile în timpul utilizării copiilor de rezervă cu opțiunea Copy Only.

  • Opțiunea Copy Only va funcționa, de asemenea, pentru bazele de date de nivel de compatibilitate 80 într-o instanță SQL Server 2005
  • Salvările de rezervă ale jurnalelor de tranzacție cu opțiunea Copy Only păstrează punctul de arhivare a jurnalului existent, prin urmare nu va trunchia jurnalele de tranzacție ale acelei baze de date.
  • Nu sunt necesare considerații îmbunătățite în timpul restaurării unei copii de rezervă create cu opțiunea Copy Only.
  • O copie de rezervă completă cu opțiunea Copy Only nu poate fi utilizată ca bază pentru restaurarea unor copii de rezervă diferențiale
  • O copie de rezervă a jurnalului cu opțiunea Copy Only poate fi creată pentru bazele de date cu model de restaurare full sau bulk logged only.
  • O copie de rezervă completă cu opțiunea Copy Only poate fi creată pentru bazele de date cu orice model de recuperare.
Pași următori

În timp ce scoateți orice copie de rezervă din planul de rezervă, luați în considerare utilizarea opțiunii Copy Only pentru a evita orice confuzie și perturbare a planului de recuperare. Ținând cont de faptul că copiile de rezervă Copy Only sunt independente de copiile de rezervă normale.

  • Așa că data viitoare când aveți nevoie să vă reîmprospătați mediile de testare sau de dezvoltareconsiderați utilizarea opțiunii Copy Only pentru a nu vă întrerupe procesul de recuperare
  • Pentru informații despre modelele de recuperare a bazelor de date faceți clic aici sau aici
  • Aici este un sfat conex despre copiile de rezervăCOPY ONLY

Ultima actualizare: 2009-06-15

Despre autor
Atif Shehzad este un DBA SQL Server pasionat, revizor tehnic și autor de articole.
Vezi toate sfaturile mele
Resurse conexe

  • Mai multe sfaturi SQL Server DBA…

Lasă un răspuns

Adresa ta de email nu va fi publicată.