Tworzenie kopii zapasowych SQL Server pod adresem URL w usłudze Microsoft Azure Blob Storage — najlepsze praktyki i rozwiązywanie problemów

Dotyczy:SQL ServerAzure SQL Managed Instance

Ten artykuł zawiera najlepsze rozwiązania i wskazówki dotyczące rozwiązywania problemów dotyczące tworzenia kopii zapasowych i przywracania kopii zapasowych SQL Server w usłudze Microsoft Azure Blob Storage.

Aby uzyskać więcej informacji na temat używania Azure Blob Storage na potrzeby operacji tworzenia kopii zapasowej lub przywracania SQL Server, zobacz:

Zarządzanie kopiami zapasowymi

Poniższa lista zawiera ogólne zalecenia dotyczące zarządzania kopiami zapasowymi:

  • Użyj unikalnej nazwy pliku dla każdej kopii zapasowej, aby zapobiec przypadkowemu nadpisaniu blobów.

  • Podczas tworzenia kontenera ustaw poziom dostępu na prywatny , aby tylko użytkownicy lub konta, które mogą udostępniać wymagane informacje uwierzytelniania, mogą odczytywać lub zapisywać obiekty blob w kontenerze.

  • W przypadku baz danych SQL Server na wystąpieniu SQL Server uruchomionym na maszynie wirtualnej Azure, użyj konta magazynu w tym samym regionie co maszyna wirtualna, aby uniknąć kosztów transferu danych między regionami. Użycie tego samego regionu zapewnia również optymalną wydajność operacji tworzenia kopii zapasowych i przywracania.

  • Niepowodzenie kopiowania zapasowego może skutkować nieprawidłowym plikiem kopii zapasowej. Okresowo identyfikuj nieudane kopie zapasowe i usuwaj pliki blob. Aby uzyskać więcej informacji, zobacz Usuń pliki obiektów blob kopii zapasowych z aktywnymi dzierżawami.

  • Użyj opcji WITH COMPRESSION, aby zminimalizować koszty przechowywania i koszty transakcji przechowywania oraz skrócić czas tworzenia kopii zapasowej.

  • Ustaw argumenty MAXTRANSFERSIZE i BLOCKSIZE na wartości opisane w dokumencie Tworzenie kopii zapasowej SQL Server na adres URL w usłudze Azure Blob Storage.

  • Możesz tworzyć kopie zapasowe w blokowych obiektach blob przy użyciu każdego typu nadmiarowości magazynu (na przykład LRS, ZRS, GRS, RA-GRS i RA-GZRS).

Obsługa dużych plików

Operacja tworzenia kopii zapasowej w SQL Server używa wielowątkowości do optymalizacji transferu danych do usługi Azure Blob Storage. Jednak wydajność zależy od czynników, takich jak przepustowość niezależnego dostawcy oprogramowania i rozmiar bazy danych. Jeśli planujesz utworzyć kopię zapasową dużych baz danych lub grup plików z lokalnej bazy danych SQL Server, najpierw przetestuj przepływność. SLA platformy Azure dla usługi Storage określa maksymalne czasy przetwarzania, które należy uwzględnić dla obiektów blob.

Użyj opcji zalecanej WITH COMPRESSION w sekcji Zarządzanie kopiami zapasowymi podczas tworzenia kopii zapasowych dużych plików.

Rozwiązywanie problemów z tworzeniem kopii zapasowej lub przywracaniem danych z adresu URL

Skorzystaj z poniższych wskazówek, aby rozwiązać problemy z błędami podczas tworzenia kopii zapasowej lub przywracania z Azure Blob Storage.

Aby uniknąć błędów wynikających z użycia nieobsługiwanych opcji lub ograniczeń, zapoznaj się z ograniczeniami i obsługiwanymi opcjami poleceń BACKUP i RESTORE opisanymi w Tworzenie kopii zapasowych i przywracanie programu SQL Server przy użyciu usługi Azure Blob Storage.

Inicjowanie nie powiodło się

Równoległe kopie zapasowe do tego samego obiektu blob powodują niepowodzenie jednej z kopii zapasowych z powodu błędu inicjalizacji .

Nie można wykonać żądania z powodu błędu urządzenia we/wy

Podczas tworzenia kopii zapasowych dużych baz danych rozważ COMPRESSION, MAXTRANSFERSIZE, BLOCKSIZEi wiele argumentów adresu URL. Zobacz Tworzenie kopii zapasowej VLDB na Azure Blob Storage.

Błąd:

Msg 3202, Level 16, State 1, Line 1
Write on "https://mystorage.blob.core.windows.net/mycontainer/TestDbBackupSetNumber2_0.bak" failed:
1117(The request could not be performed because of an I/O device error.)
Msg 3013, Level 16, State 1, Line 1
BACKUP DATABASE is terminating abnormally.

Przykładowe rozwiązanie:

BACKUP DATABASE TestDb
TO URL = 'https://mystorage.blob.core.windows.net/mycontainer/TestDbBackupSetNumber2_0.bak',
   URL = 'https://mystorage.blob.core.windows.net/mycontainer/TestDbBackupSetNumber2_1.bak',
   URL = 'https://mystorage.blob.core.windows.net/mycontainer/TestDbBackupSetNumber2_2.bak'
WITH COMPRESSION,
     MAXTRANSFERSIZE = 4194304,
     BLOCKSIZE = 65536;

Znacznik pliku wiadomości na urządzeniu jest nieprawidłowo wyrównany

Podczas przywracania z skompresowanej kopii zapasowej może zostać wyświetlony następujący błąd:

SqlException 3284 occurred. Severity: 16 State: 5
Message Filemark on device 'https://mystorage.blob.core.windows.net/mycontainer/TestDbBackupSetNumber2_0.bak' is not aligned.
Re-issue the Restore statement with the same blocksize used to create the backupset: '65536' looks like a possible value.

Aby rozwiązać ten błąd, wydaj ponownie instrukcję RESTORE za pomocą BLOCKSIZE = 65536.

Nieudana operacja tworzenia kopii zapasowej może prowadzić do powstania obiektów blob z aktywnymi dzierżawami.

Błąd podczas tworzenia kopii zapasowej z powodu blobów, które mają aktywną dzierżawę: Failed backup activity can result in blobs with active leases.

Jeśli ponowisz próbę wykonania instrukcji tworzenia kopii zapasowej, operacja tworzenia kopii zapasowej może zakończyć się niepowodzeniem z powodu błędu podobnego do następujących danych wyjściowych:

Backup to URL received an exception from the remote endpoint. Exception Message:
The remote server returned an error: (412) There is currently a lease on the blob and no lease ID was specified in the request.

Jeśli spróbujesz wykonać instrukcję RESTORE na pliku blob kopii zapasowej objętym aktywną dzierżawą, operacja przywracania zakończy się niepowodzeniem i zwróci błąd podobny do następującego komunikatu:

Exception Message: The remote server returned an error: (409) Conflict.

Gdy wystąpi ten błąd, usuń pliki blob. Aby uzyskać więcej informacji o tym scenariuszu i sposobie rozwiązania tego problemu, zobacz Usuwanie plików blob kopii zapasowych z aktywnymi dzierżawami.

Błąd systemu operacyjnego 50: Żądanie nie jest obsługiwane

Podczas tworzenia kopii zapasowej bazy danych może zostać wyświetlony błąd Operating system error 50(The request is not supported.) z następujących powodów:

  • Określone konto magazynu nie jest kontem przeznaczonym do ogólnego użytku w wersji V1 lub V2.
  • Token sygnatury dostępu współdzielonego (SAS) ma ? symbol na początku. Jeśli tak, usuń symbol.
  • Nie można nawiązać połączenia z kontem magazynu z bieżącej maszyny przy użyciu Eksplorator usługi Storage lub SQL Server Management Studio (SSMS).
  • Zasady przypisane do tokenu SAS wygasły. Utwórz nowe zasady przy użyciu Eksplorator usługi Azure Storage i utwórz nowy token SAS przy użyciu zasad lub zmień poświadczenia i spróbuj wykonać kopię zapasową ponownie.
  • Brak certyfikatu głównego w magazynie zaufanych certyfikatów głównych. Aby uzyskać więcej informacji, zobacz główne urzędy certyfikacji Azure.

Błędy uwierzytelniania

Tworzenie kopii zapasowej lub przywracanie z Azure Blob Storage wymaga poświadczeń przechowujących informacje uwierzytelniania. SQL Server 2016 (13.x) i nowsze wersje używają tokenu sygnatury dostępu współdzielonego (SAS), a Aparat bazy danych programu SQL Server automatycznie dopasowuje poświadczenie do adresu URL kontenera.

Błędy związane z poświadczeniami mogą powodować następujące komunikaty o błędach:

Numer błędu Message
3288 Credential name <mycredential> does not exist or user does not have permission to access it.
3289 A Backup device of type URL was specified without a Credential, Backup/Restore operation cannot proceed.

Aby uniknąć tego problemu, utwórz poświadczenie, jeśli nie istnieje. Przykład:

IF NOT EXISTS (SELECT *
    FROM sys.credentials
    WHERE name = 'https://<mystorageaccountname>.blob.core.windows.net/<mycontainername>')
CREATE CREDENTIAL [https://<mystorageaccountname>.blob.core.windows.net/<mycontainername>]
    WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
    SECRET = '<SAS_TOKEN>';

Poświadczenie istnieje, ale konto, które uruchamia polecenie tworzenia kopii zapasowej, nie ma uprawnień do uzyskania dostępu do tego poświadczenia. Użyj konta w stałej roli bazy danych db_backupoperator z uprawnieniem Zmienianie dowolnych poświadczeń.

Informacje przechowywane w poświadczeniu muszą być zgodne z wartościami właściwości konta magazynu Azure używanego w operacjach tworzenia kopii zapasowych i przywracania.

Błędy serwera proxy

Jeśli używasz serwerów proxy do uzyskiwania dostępu do Internetu, mogą wystąpić następujące problemy:

Ograniczanie połączeń przez serwery proxy

Serwery proxy mogą mieć ustawienia ograniczające liczbę połączeń na minutę. Tworzenie kopii zapasowej pod adresem URL jest wielowątkowe i może przekroczyć ten limit. Jeśli ten limit zostanie przekroczony, serwer proxy zamknie połączenie. Aby rozwiązać ten problem, zmień ustawienia serwera proxy, aby SQL Server nie używały serwera proxy. W poniższych przykładach przedstawiono komunikaty o błędach, które mogą zostać wyświetlone w dzienniku błędów:

Write on "https://storageaccount.blob.core.windows.net/container/BackupAzurefile.bak" failed: Backup to URL received an exception from the remote endpoint. Exception Message: Unable to read data from the transport connection: The connection was closed.
A nonrecoverable I/O error occurred on file "https://storageaccount.blob.core.windows.net/container/BackupAzurefile.bak:" Error could not be gathered from Remote Endpoint.

Msg 3013, Level 16, State 1, Line 2

BACKUP DATABASE is terminating abnormally.
BackupIoRequest::ReportIoError: write failure on backup device 'https://storageaccount.blob.core.windows.net/container/BackupAzurefile.bak'. Operating system error Backup to URL received an exception from the remote endpoint. Exception Message: Unable to read data from the transport connection: The connection was closed.

Typowe błędy i rozwiązania

Problem Rozwiązanie
Błąd 3063: Write to backup block blob device https://storageaccount/container/name.bak failed. Device has reached its limit of allowed blocks. Aby rozwiązać ten problem w przypadku pełnych lub różnicowych kopii zapasowych, podziel element docelowy kopii zapasowej przy użyciu wielu plików. W przypadku wszystkich typów kopii zapasowych użyj następujących parametrów w poleceniu kopii zapasowej: COMPRESSION, MAXTRANSFERSIZE = 4194304, BLOCKSIZE = 65536. Ten błąd może również wystąpić, jeśli kopia zapasowa osiągnie maksymalny obsługiwany rozmiar. Na przykład w SQL Server 2022 (16.x) i wcześniejszych wersjach maksymalny rozmiar kopii zapasowej to 12,8 TB, obliczony jako 64 paski × 50 000 bloków × 4 MBMAXTRANSFERSIZE.
Błąd 3035: Różnicowa kopia zapasowa kończy się niepowodzeniem dla jednej lub wielu baz danych. Ten błąd występuje, jeśli skonfigurowano usługę Azure Backup do tworzenia kopii zapasowych baz danych SQL lub migawki maszyny wirtualnej (VM), co nie powoduje utworzenia kopii zapasowej typu copy-only, a w efekcie prowadzi do niepowodzenia podczas tworzenia na żądanie kopii zapasowych w ramach planu konserwacji lub zadania agenta SQL. Aby rozwiązać ten problem, dodaj te klucze rejestru na maszynach wirtualnych hostujących wystąpienia programu SQL Server w kluczu rejestru [HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\BCDRAGENT] i dodaj "USEVSSCOPYBACKUP"="TRUE".
Błąd 3201: Cannot open backup device '<url>'. Operating system error 50(The request is not supported.) Wygeneruj ponownie token SAS przy użyciu Eksplorator usługi Storage: w Eksplorator usługi Azure Storage utwórz nowe zasady i nowy token SAS na podstawie tych zasad. Utwórz ponownie poświadczenie przy użyciu nowego tokenu SAS i spróbuj ponownie utworzyć kopię zapasową. Aby uzyskać więcej informacji, zobacz znane problemy z adresem URL BACKUP TO. Upewnij się, że sieciowa grupa zabezpieczeń lub zapora zezwala na połączenie przychodzące i wychodzące na portach 1433 i 443.
Błąd 3290: Backup to URL received an exception from the remote endpoint. Exception Message: The remote name could not be resolved. Widzisz ten komunikat, jeśli do skonfigurowania kopii zapasowej użyto nieprawidłowego poświadczenia, tajnego wpisu lub klucza SAS. Usuń poświadczenie i utwórz je ponownie. W przypadku programu SQL Server 2016 (13.x) i nowszych wersji użyj SAS.
Błąd 3290: Backup to URL received an exception from the remote endpoint. Exception Message: The remote server returned an error: (400) Bad Request. Aby rozwiązać ten problem, zmień minimalną wersję protokołu TLS dla konta magazynu na 1.0 (minimalna wersja protokołu TLS>> magazynu).
Komunikat o wyjątku: The remote server returned an error: (412) There is currently a lease on the blob and no lease ID was specified in the request. W programie Eksplorator usługi Azure Storage zidentyfikuj obiekty blob o rozmiarze 1 TB, przerwij dzierżawę i usuń obiekt blob, a następnie ponów operację tworzenia kopii zapasowej.
Błąd: The remote server returned an error: (403) Forbidden. Aby rozwiązać ten problem, utwórz ponownie konto magazynu, poświadczenia i token SAS.
Tworzenie kopii zapasowej nie powiodło się podczas korzystania z planu konserwacji. Plany konserwacji mogą sporadycznie zakończyć się niepowodzeniem. Uruchom równoważną kopię zapasową bezpośrednio przy użyciu języka T-SQL. Jeśli tworzenie kopii zapasowej języka T-SQL zakończy się pomyślnie, zaplanuj je jako zadanie SQL Server Agent zamiast używać planu konserwacji.
Tworzenie kopii zapasowej nie powiodło się z powodu osiągnięcia limitów maszyn wirtualnych. Jeśli pojawiają się błędy informujące o osiągnięciu limitu IOPS dysku/maszyny wirtualnej, tworzenie kopii zapasowych może spowolnić lub może się nie powieść. Aby monitorować limity liczby operacji we/wy na sekundę/maszyny wirtualnej, użyj Azure Monitor Metrics i w razie potrzeby zmień rozmiar maszyny wirtualnej lub dysku, aby rozwiązać ten problem.