Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule przedstawiono zachowanie skompresowanych kopii zapasowych podczas dołączania kopii zapasowych do istniejącego zestawu multimediów.
Oryginalna wersja produktu: SQL Server
Oryginalny numer KB: 2297053
Podsumowanie
Jednym z głównych ograniczeń dotyczących skompresowanych kopii zapasowych jest to, że skompresowane i nieskompresowane kopie zapasowe nie mogą współistnieć w zestawie multimediów. To ograniczenie jest udokumentowane w sekcji Kompresja kopii zapasowych (SQL Server).
Ten artykuł uzupełnia dokumentację i zawiera więcej informacji na temat oczekiwanego zachowania skompresowanych kopii zapasowych w odniesieniu do domyślnej kompresji kopii zapasowej opcji - konfiguracji serwera.
Symptomy
Rozważmy następujący scenariusz:
- Należy dołączyć kopię zapasową do istniejącego zestawu multimediów.
- Polegasz na opcji
backup compression defaultprocedury składowanej systemu sp_configure i nie określaszWITH COMPRESSIONklauzuli w instrukcji kopii zapasowej.
W tym scenariuszu zauważysz, że tworzenie kopii zapasowej zakończy się pomyślnie, ale może skończyć się w innym stanie kompresji niż oczekiwano.
Więcej informacji
Po dołączeniu kopii zapasowej do istniejącego zestawu multimediów kopia zapasowa dziedziczy ustawienie kompresji z zestawu multimediów.
Po utworzeniu zestawu multimediów informacje o ustawieniu kompresji tego zestawu multimediów są zapisywane w pliku nagłówka nośnika.
Kopie zapasowe pobrane do istniejącego zestawu multimediów mogą współistnieć tylko wtedy, gdy ustawienie kompresji tych kopii zapasowych jest takie samo jak w przypadku zestawu multimediów. Następujące trzy czynniki wpływają na zachowanie skompresowanych kopii zapasowych:
Opcja konfiguracji programu SQL Server — domyślna kompresja kopii zapasowej
Opcje zestawu kopii zapasowych — kompresja lub NO_COMPRESSION
W przypadku istniejących multimediów należy wziąć pod uwagę, czy zestaw multimediów zawiera obecnie skompresowaną, czy nieskompresowaną kopię zapasową.
W poniższej tabeli przedstawiono podsumowanie zachowania skompresowanych kopii zapasowych na podstawie trzech powyższych czynników:
| Instrukcja kopii zapasowej | Nowy zestaw multimediów | Dołączanie do istniejącego zestawu multimediów z skompresowaną kopią zapasową | Dołączanie do istniejącego zestawu multimediów z nieskompresowaną kopią zapasową |
|---|---|---|---|
Klauzula poziomu instrukcji WITH COMPRESSION |
Tworzenie kopii zapasowej zakończy się pomyślnie i zostanie skompresowane | Powodzenie | Błąd |
Klauzula poziomu instrukcji WITH NO_COMPRESSION |
Tworzenie kopii zapasowej zakończy się pomyślnie i nie zostanie skompresowane | Błąd | Powodzenie |
| Tworzenie kopii zapasowej instrukcji bez klauzuli kompresji na poziomie instrukcji | Tworzenie kopii zapasowej zakończy się pomyślnie, a kompresja zależy od opcji backup compression default procedury składowanej systemu sp_configure |
Tworzenie kopii zapasowej zakończy się pomyślnie i zostanie skompresowane | Tworzenie kopii zapasowej zakończy się pomyślnie i nie zostanie skompresowane |
Jak widać w powyższej tabeli, w przypadku użycia opcji backup compression default na serwerze i dołączenia skompresowanej kopii zapasowej do istniejącego zestawu multimediów kopia zapasowa nigdy nie zakończy się niepowodzeniem z powodu niezgodności ustawień kompresji. Działa, ale dziedziczy to ustawienie w nagłówku zestawu multimediów. Jeśli jednak określisz klauzulę WITH COMPRESSION lub WITH NO_COMPRESSION w instrukcji kopii zapasowej, zostanie zgłoszony błąd, jeśli istnieje niezgodność między kopią zapasową przechowywaną w zestawie multimediów a bieżącą kopią zapasową wykonywaną pod względem ustawienia kompresji.
Uwaga 16.
Bieżące ustawienie opcji backup compression default można znaleźć, uruchamiając procedurę sp_configure składowaną systemu w programie SQL Server Management Studio. Jeśli dołączasz skompresowaną kopię zapasową do istniejącego nośnika, możesz uzyskać informacje nagłówka przy użyciu instrukcji RESTORE HEADERONLY. Aby uzyskać więcej informacji, zobacz sekcję Przykłady .
Przykłady
Oto kilka przykładów skryptów, aby zademonstrować zachowanie w różnych przypadkach. Zachowanie jest takie samo, czy kopia zapasowa jest na taśmie, czy na dysku.
Przykład 1: Jeśli wartość opcji
backup compression defaultto0, użyj klauzuliWITH COMPRESSIONpoziomu instrukcji, aby dołączyć kopię zapasową do istniejącego zestawu multimediów z nieskompresowanym ustawieniem kopii zapasowej:Sprawdź wartość kompresji:
-- The value of the option "backup compression default" is 0 by default sp_configure 'backup compression default'Utwórz nowy zestaw multimediów przy użyciu klauzuli
WITH FORMAT:BACKUP DATABASE test TO DISK = N'E:\testbackup.bak' WITH FORMAT, INIT, NAME = N'testbackup-Full Database Backup', SKIP, NOUNLOAD, STATS = 10 GOSprawdź kopię zapasową i nagłówek i sprawdź, czy skompresowana wartość kolumny to 0:
RESTORE HEADERONLY FROM DISK = N'E:\testbackup.bak'Tworzenie kopii zapasowej bazy danych
testprzy użyciu klauzuliWITH COMPRESSION:-- The backup will fail as compressed and non compressed backups can't be mixed within the same media set BACKUP DATABASE test TO DISK = N'E:\testbackup.bak' WITH NAME = N'testbackup-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, COMPRESSION, STATS = 10 GOPo wykonaniu skryptu SQL mogą pojawić się komunikaty o błędach 3098 i 3013.
Przykład 2: Dołączanie kopii zapasowej do tego samego zestawu multimediów podczas ustawiania wartości opcji
backup compression defaultna1:Włącz na
backup compression defaultpoziomie serwera:-- The option "backup compression default" as this point is set to 1. sp_configure 'backup compression default', 1 GO RECONFIGURE GODołącz kopię zapasową do tego samego zestawu multimediów:
-- Given that you may expect the backup to be compressed and it will be if it is a new media set. -- However, if you have a backup and append the backup to the same media set, -- the backup works but results in an uncompressed backup. BACKUP DATABASE test TO DISK = N'E:\testbackup.bak' WITH NAME = N'testbackup-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10 GOPo wykonaniu skryptu SQL zobaczysz następujące dane wyjściowe:
Processed two pages for database `test`, file _test_log_ on file 2. BACKUP DATABASE successfully processed 162 pages in 6.211 seconds (0.203 MB/sec).Sprawdź nagłówek zestawu kopii zapasowych i multimediów:
-- Then, you will see that though Server default is set to compressed, the backup given that -- it is appended to an existing media set inherits the compression setting of the media set itself. -- You may expect this to have failed with the same error as when specifying the clause `WITH COMPRESSION` -- in the backup statement given that compressed and non compressed backups can't co-exist in the media set. RESTORE HEADERONLY FROM DISK = N'E:\testbackup.bak'
Przykład 3: Ustaw wartość opcji
backup compression defaultna0, a następnie dołącz kopię zapasową do istniejącego zestawu multimediów z skompresowanym ustawieniem kopii zapasowej:Utwórz nowy zestaw multimediów przy użyciu klauzuli
WITH FORMAT:-- If you create a new media set by using the FORMAT option, the current compression setting is inherited BACKUP DATABASE test TO DISK = N'E:\testbackup.bak' WITH FORMAT, INIT, NAME = N'testbackup-Full Database Backup', SKIP, NOUNLOAD, STATS = 10 GOSprawdź nagłówek zestawu kopii zapasowych i multimediów:
RESTORE HEADERONLY FROM DISK = N'E:\testbackup.bak'Ustaw opcję
backup compression defaultz powrotem na0:sp_configure 'backup compression default', 0 GO RECONFIGURE GOTworzenie kopii zapasowej bazy danych
testna tym samym nośniku ustawionym przy użyciu klauzuliWITH INIT:-- If you use the clause "WITH INIT", the backup sets are overwritten but the media header is not BACKUP DATABASE test TO DISK = N'E:\testbackup.bak' WITH INIT, NAME = N'testbackup-Full Database Backup', SKIP, NOUNLOAD, STATS = 10 GOSprawdź nagłówek zestawu kopii zapasowych i multimediów:
-- Note that even though we changed backup compression default to 0, the old media header is preserved which has it as 1, and the backup goes as compressed RESTORE HEADERONLY FROM DISK = N'E:\testbackup.bak'
Przykład 4: Skompresowane kopie zapasowe nie mogą współistnieć z kopiami zapasowymi NT, które mają nieskompresowane ustawienie:
Utwórz kopię zapasową NT i sprawdź nagłówek kopii zapasowej:
-- You can see that it is not a SQL backup and the value of compressed is 0 RESTORE HEADERONLY FROM TAPE = N'\\.\Tape0'Tworzenie kopii zapasowej bazy danych
testna tym samym nośniku ustawionym przy użyciu klauzulWITH INITiWITH COMPRESSION:BACKUP DATABASE test TO TAPE = N'\\.\Tape0' WITH INIT, COMPRESSION, NAME = N'testbackup-Full Database Backup', SKIP, NOUNLOAD, STATS = 10 GOPo wykonaniu skryptu SQL mogą pojawić się komunikaty o błędach 3098 i 3013.
Przykład 5: Nieskompresowane kopie zapasowe i kopie zapasowe NT, które mają nieskompresowane ustawienie, może współistnieć:
Tworzenie kopii zapasowej bazy danych
testna tym samym nośniku ustawionym bez inicjowania i bez kompresji:--The backups ( NT and non-compressed backup) can co-exist BACKUP DATABASE test TO TAPE = N'\\.\Tape0' WITH NAME = N'testbackup-Full Database Backup', SKIP, NOUNLOAD, STATS = 10 GOSprawdź nagłówek kopii zapasowej i zobacz kopię zapasową SQL i NT:
RESTORE HEADERONLY FROM TAPE = N'\\.\Tape0'Wymuś skompresowaną kopię zapasową na taśmie przy użyciu kopii zapasowej NT:
BACKUP DATABASE test TO TAPE = N'\\.\Tape0' WITH COMPRESSION, NAME = N'testbackup1 Full Database Backup', SKIP, NOUNLOAD, STATS = 10 GOPo wykonaniu skryptu SQL mogą pojawić się komunikaty o błędach 3098 i 3013.
Komunikaty o błędach 3098 i 3013
Komunikat o błędzie 3098
Msg 3098, Level 16, State 2, Line 1 The backup cannot be performed because 'COMPRESSION' was requested after the media was formatted with an incompatible structure. To append to this media set, either omit 'COMPRESSION' or specify 'NO_COMPRESSION'. Alternatively, you can create a new media set by using WITH FORMAT in your BACKUP statement. If you use WITH FORMAT on an existing media set, all its backup sets will be overwritten.Komunikat o błędzie 3013
Msg 3013, Level 16, State 1, Line 1 BACKUP DATABASE is terminating abnormally.