By: Atif Shehzad | Updated: 2009-06-15 | Komentarze (4) | Powiązane: More > Backup

Problem

Wdrożyłem plan tworzenia kopii zapasowych dla moich baz danych SQL Server. Wykonuję codzienną pełną kopię zapasową wspomaganą cogodzinnymi różnicowymi kopiami zapasowymi. Plan przywracania jest dokumentowany w oparciu o ten plan kopii zapasowych wraz z lokalizacją i czasem wykonania kopii zapasowych wymienionych w planie. Często muszę aktualizować serwer testowy lub deweloperski za pomocą aktualnej kopii produkcyjnej bazy danych. W tym celu wykonuję pełną kopię zapasową wymaganej bazy danych. Problem polega na tym, że takie doraźne kopie zapasowe przerywają zaplanowaną przeze mnie sekwencję odzyskiwania w przypadku konieczności odzyskania danych. Czy jest jakiś sposób, aby moje kopie zapasowe ad hoc nie przerywały sekwencji mojego planu backupu?

Rozwiązanie

Na szczęście w SQL Server 2005 i nowszych mamy opcję backupu dla takiej sytuacji. Ta opcja jest znana jako kopie zapasowe tylko do kopiowania. Opcja ta jest przeznaczona specjalnie do tworzenia kopii zapasowych ad hoc, które nie zakłócą zaplanowanej sekwencji przywracania dla danej bazy danych.

Kopia zapasowa tylko do kopiowania może być używana do tworzenia pełnej kopii zapasowej lub kopii zapasowej dziennika transakcji. Opcja ta nie jest dostępna dla kopii różnicowych. W praktycznych scenariuszach rzadko będziesz potrzebował tworzyć kopie zapasowe logów Copy Only, jednak opcja Copy Only może być często używana z pełnymi kopiami zapasowymi.

Ale opcja Copy Only jest dostępna dla SQL Server 2005, nie ma możliwości tworzenia ich za pomocą SSMS w SQL 2005. Jeśli masz SSMS 2008, możesz użyć GUI lub musisz użyć instrukcji T-SQL, aby utworzyć kopie zapasowe Copy Only.

Najpierw przyjrzyjmy się, jak można to zrobić, używając SSMS 2008 do tworzenia Copy Onlybackup

  • Przejdź do okna bazy danych kopii zapasowej, tak jak w przypadku normalnej kopii zapasowej
  • Tuż poniżej menu „Typ kopii zapasowej”, znajduje się pole wyboru „Kopiuj tylko kopię zapasową”
  • Kliknij to pole wyboru
  • Wypełnij wszystkie inne powiązane informacje tak jak w przypadku normalnej kopii zapasowej i kliknij OK

Uwaga: Pole wyboru „Kopiuj tylko kopię zapasową” będzie również aktywne dla kopii zapasowych różnicowych, ale nie będzie miało żadnego wpływu poza utworzeniem normalnej różnicowej kopii zapasowej.

Po drugie, aby utworzyć kopię zapasową tylko do kopiowania za pomocą języka T-SQL, można wydać następujące polecenie:

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

Dowodowanie słuszności koncepcji

Przed przejściem dalej dobrze będzie podsumować koncepcję, że pełna kopia zapasowa z opcją tylko do kopiowania jest niezależna od kolejności innych normalnych kopii zapasowych.Tak więc po utworzeniu kopii zapasowej z opcją tylko kopia będzie można pracować z planem odzyskiwania opartym na zaplanowanych kopiach zapasowych bez wpływu na proces przywracania.

Użyjemy informacji LSN (log sequence number) do śledzenia pełnej kopii zapasowej, która jest podstawą dla kopii różnicowych. Najpierw zanotujemy numer LSN dla bazy różnicowej bazy danych 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_różnicowa_lsn wpływa na kolejność, w jakiej kombinacje kopii zapasowych mają być przywracane podczas odzyskiwania. Szczegółowe informacje o numerze LSN dowolnej bazy danych można również uzyskać z tabeli msdb..backupset.

Teraz musimy potwierdzić, że pełna kopia zapasowa bez opcji Copy Only zaktualizuje differential_base_lsn. W tym celu wydamy polecenie wykonania pełnej kopii zapasowej bez opcji Tylko kopiuj i odnotujemy zmianę w LSN, aby udowodnić, że zaktualizowany LSN bazy różnicowej jest zgodny z LSN naszej ostatniej pełnej kopii zapasowej.

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

W poniższym zestawie wyników możemy zweryfikować, że LSN został zmieniony dla bazy przywracania kopii różnicowej i jest zgodny z LSN naszej pełnej kopii zapasowej. Obie zaznaczone wartości LSN poniżej są takie same, co potwierdza, że ostatnią kopią zapasową jest nasza baza różnicowa.

Teraz utworzymy pełną kopię zapasową z opcją Copy Only i okaże się, że pełna kopia zapasowa z opcją Copy Only nie będzie miała wpływu na LSN bazy różnicowej naszej bazy danych. Innymi słowy, pełny backup z opcją Copy Only nie będzie miał wpływu na bazowy pełny backup dla kopii różnicowych.

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

Na poniższym obrazie możemy sprawdzić, że po utworzeniu pełnej kopii zapasowej z opcją Tylko kopia LSN bazy różnicowej jest niezmieniony i odpowiada LSN poprzedniej pełnej kopii zapasowej (obie są zaznaczone na czerwono). Należy również zauważyć, że ostatnia pełna kopia zapasowa z opcją Copy Only również tam jest (zaznaczona na zielono).

Poniższe uwagi będą pomocne podczas korzystania z kopii zapasowych z opcją Copy Only.

  • Opcja Copy Only będzie również działać dla baz danych poziomu zgodności 80 w instancji SQL Server 2005
  • Kopie zapasowe dziennika transakcji z opcją Copy Only zachowują istniejący punkt archiwizacji dziennika, dlatego nie spowodują obcięcia dzienników transakcji tej bazy danych.
  • Nie ma zwiększonej uwagi wymaganej podczas przywracania kopii zapasowej utworzonej z opcją Copy Only.
  • Pełna kopia zapasowa z opcją Copy Only nie może być użyta jako podstawa do przywracania różnicowych kopii zapasowych.
  • Kopia zapasowa dziennika z opcją Copy Only może być utworzona dla baz danych z modelem odzyskiwania tylko pełnych lub zbiorczych dzienników.
  • Pełna kopia zapasowa z opcją Copy Only może być utworzona dla baz danych z dowolnym modelem odzyskiwania.
Kolejne kroki

Wybierając jakąkolwiek kopię zapasową z planu tworzenia kopii zapasowych, rozważ użycie opcji Copy Only, aby uniknąć zamieszania i zakłócenia planu odzyskiwania. Należy pamiętać, że kopie zapasowe Copy Only są niezależne od normalnych kopii zapasowych.

  • Więc następnym razem, gdy trzeba będzie odświeżyć środowisko testowe lub deweloperskie, warto rozważyć użycie opcji Copy Only, aby nie przerywać procesu odzyskiwania
  • W celu uzyskania informacji o modelach odzyskiwania baz danych kliknij tutaj lub tutaj
  • Tutaj znajduje się powiązana wskazówka dotycząca kopii zapasowych Copy ONLY

Ostatnia aktualizacja: 2009-06-15

O autorze
Atif Shehzad jest pasjonatem SQL Server DBA, recenzentem technicznym i autorem artykułów.
Zobacz wszystkie moje porady
Powiązane zasoby

  • Więcej porad SQL Server DBA…

.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.