Udostępnij za pośrednictwem


Tworzenie kopii zapasowej programu SQL Server pod adresem URL dla najlepszych rozwiązań i rozwiązywania problemów z usługą Microsoft Azure Blob Storage

Dotyczy:programu SQL ServerAzure SQL Managed Instance

Ten artykuł zawiera najlepsze rozwiązania i porady dotyczące rozwiązywania problemów dotyczące tworzenia kopii zapasowych i przywracania programu SQL Server do usługi Microsoft Azure Blob Storage.

Aby uzyskać więcej informacji na temat korzystania z usługi Azure Blob Storage na potrzeby operacji tworzenia kopii zapasowej lub przywracania programu SQL Server, zobacz:

Zarządzanie kopiami zapasowymi

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

  • Zalecane jest użycie unikatowej nazwy pliku dla każdej kopii zapasowej, aby zapobiec przypadkowemu zastąpieniu plików blob.

  • Podczas tworzenia kontenera należy ustawić poziom dostępu na prywatny, aby tylko użytkownicy lub konta, które mogą podać wymagane informacje uwierzytelniania, miały możliwość odczytywania lub zapisywania obiektów 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. Zalecamy okresową identyfikację nieudanych kopii zapasowych i usunięcie plików blobów. Aby uzyskać więcej informacji, zobacz Usuwanie kopii zapasowych plików obiektów blob przy użyciu aktywnych dzierżaw.

  • Użycie opcji WITH COMPRESSION podczas tworzenia kopii zapasowej może zminimalizować koszty przechowywania i koszty transakcji związanych z przechowywaniem. Może również skrócić czas potrzebny na ukończenie procesu tworzenia kopii zapasowej.

  • Ustaw argumenty MAXTRANSFERSIZE i BLOCKSIZE zgodnie z zaleceniami w kopii zapasowej programu SQL Server na adres URL.

  • Program SQL Server jest niezależny od typu używanej nadmiarowości magazynu. Tworzenie kopii zapasowych stronicowych obiektów blob i blokowych obiektów blob jest obsługiwane dla każdej opcji nadmiarowości magazynu (LRS/ZRS/GRS/RA-GRS/RA-GZRS itp.).

Obsługa dużych plików

Operacja tworzenia kopii zapasowej programu SQL Server używa wielu wątków do optymalizacji transferu danych do usługi Azure Blob Storage. Jednak wydajność zależy od różnych 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 programu SQL Server, najpierw należy przeprowadzić testowanie przepływności. Umowa SLA usługi Azure dla usługi Storage ma maksymalny czas przetwarzania dla obiektów blob, które można wziąć pod uwagę.

Użycie opcji WITH COMPRESSION zgodnie z zaleceniami w sekcji Zarządzanie kopiami zapasowymi jest ważne podczas tworzenia kopii zapasowych dużych plików.

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

Poniżej przedstawiono kilka szybkich sposobów rozwiązywania problemów z błędami podczas tworzenia kopii zapasowej lub przywracania z usługi Azure Blob Storage.

Aby uniknąć błędów spowodowanych nieobsługiwanymi opcjami lub ograniczeniami, zapoznaj się z listą ograniczeń oraz informacjami o obsłudze poleceń BACKUP i RESTORE w artykule SQL Server - tworzenie kopii zapasowych i przywracanie przy użyciu usługi Microsoft 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 .

  • W programie SQL Server 2016 (13.x) i nowszych wersjach preferowanym rozwiązaniem do tworzenia kopii zapasowej na URL jest blokowy obiekt blob.

  • Jeśli używasz stronicowych obiektów blob z BACKUP TO URL, możesz użyć flagi śledzenia 3051, aby włączyć rejestrowanie do określonego dziennika błędów w następującym formacie: BackupToUrl-\<instname>-\<dbname>-action-\<PID>.log, gdzie \<action> jest jedną z następujących opcji:

    • DB
    • FILELISTONLY
    • LABELONLY
    • HEADERONLY
    • VERIFYONLY

Informacje można również znaleźć, przeglądając Podgląd zdarzeń systemu Windows w obszarze dzienników aplikacji o nazwie SQLBackupToUrl.

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 bazy danych VLDB w usłudze 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 wiadomości na pliku na urządzeniu nie jest prawidł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.
Reissue the Restore statement with the same block size used to create the backupset: '65536' looks like a possible value.

Aby rozwiązać ten błąd, należy wydać ponownie dyspozycję RESTORE z określonym 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 instrukcja kopii zapasowej zostanie przeprowadzona ponownie, operacja tworzenia kopii zapasowej może zakończyć się niepowodzeniem z błędem podobnym do następującego komunikatu:

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 próba wykonania polecenia przywracania jest podejmowana na pliku kopii zapasowej obiektu blob z aktywną dzierżawą, operacja przywracania kończy się niepowodzeniem z błędem podobnym do następującego:

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

W przypadku wystąpienia takiego błędu pliki blob muszą zostać usunięte. Aby uzyskać więcej informacji na temat tego scenariusza i sposobu rozwiązania tego problemu, zobacz Usuwanie plików obiektów blob kopii zapasowej przy użyciu aktywnych dzierżaw.

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 SAS miał symbol ? na początku podczas tworzenia poświadczenia. Jeśli tak, usuń go.
  • Bieżące połączenie nie może nawiązać połączenia z kontem magazynu z bieżącej maszyny przy użyciu Eksploratora usługi Storage lub programu SQL Server Management Studio (SSMS).
  • Zasady przypisane do tokenu SAS wygasły. Utwórz nowe zasady przy użyciu Eksploratora 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 platformy Azure.

Błędy uwierzytelniania

WITH CREDENTIAL jest nową opcją i wymaganą do utworzenia kopii zapasowej lub przywrócenia z usługi Azure Blob Storage.

Błędy związane z poświadczeniami mogą być następujące: The credential specified in the **BACKUP** or **RESTORE** command does not exist.

Aby uniknąć tego problemu, możesz dołączyć instrukcje T-SQL, aby utworzyć poświadczenie, jeśli nie istnieje w instrukcji kopii zapasowej. Poniżej przedstawiono przykład, którego można użyć:

IF NOT EXISTS (
   SELECT *
   FROM sys.credentials
   WHERE credential_identity = 'mycredential'
)
CREATE CREDENTIAL [<credential name>]
   WITH IDENTITY = 'mystorageaccount',
      SECRET = '<storage access key>';

Poświadczenie istnieje, ale identyfikator logowania używany do uruchomienia polecenia kopii zapasowej nie ma uprawnień, aby uzyskać dostęp do tych poświadczeń. Użyj konta w roli db_backupoperator z uprawnieniami Zmienianie dowolnych poświadczeń.

Sprawdź nazwę konta danych i wartości klucza. Informacje przechowywane w poświadczeniu muszą być zgodne z wartościami właściwości konta usługi Azure Storage, którego używasz w operacjach tworzenia kopii zapasowych i przywracania.

Błędy 400 (Złe Żądanie)

Przy użyciu programu SQL Server 2012 (11.x) może wystąpić błąd podczas wykonywania kopii zapasowej podobnej 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: (400) Bad Request.

Jest to spowodowane wersją protokołu TLS obsługiwaną przez konto usługi Azure Storage. Zmiana obsługiwanej wersji protokołu TLS lub użycie obejścia wymienionego w KB4017023.

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, które ograniczają liczbę połączeń na minutę. Proces Tworzenia kopii zapasowej pod adresem URL jest procesem wielowątkowy, dlatego może przekraczać ten limit. W takim przypadku serwer proxy zabije połączenie. Aby rozwiązać ten problem, zmień ustawienia serwera proxy, aby program SQL Server nie używał serwera proxy. Poniżej przedstawiono kilka przykładów typów lub komunikatów 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.

Jeśli używasz stronicowych obiektów blob, włącz szczegółowe rejestrowanie przy użyciu znacznika śledzenia 3051, w dziennikach możesz również zobaczyć następujący komunikat: HTTP status code 502, HTTP Status Message Proxy Error (The number of HTTP requests per minute exceeded the configured limit. Contact your ISA Server administrator.)

Domyślne ustawienia serwera proxy nie są pobierane

Czasami ustawienia domyślne nie są pobierane, powodując błędy uwierzytelniania serwera proxy, takie jak:

A nonrecoverable I/O error occurred on file "https://storageaccount.blob.core.windows.net/container/BackupAzurefile.bak:" Backup to URL received an exception from the remote endpoint. Exception Message: The remote server returned an error: (407)* **Proxy Authentication Required.

Aby rozwiązać ten problem, utwórz plik konfiguracji, który umożliwia procesowi tworzenia kopii zapasowej w adresie URL używanie domyślnych ustawień serwera proxy, wykonując następujące kroki:

  1. Utwórz plik konfiguracji o nazwie BackuptoURL.exe.config z następującą zawartością xml:

    <?xml version ="1.0"?>
    <configuration>
        <system.net>
            <defaultProxy enabled="true" useDefaultCredentials="true">
                <proxy usesystemdefault="true" />
            </defaultProxy>
        </system.net>
    </configuration>
    
  2. Umieść plik konfiguracji w folderze Binn wystąpienia programu SQL Server. Jeśli na przykład mój program SQL Server jest zainstalowany na dysku C maszyny, umieść plik konfiguracji w C:\Program Files\Microsoft SQL Server\MSSQL13.\<InstanceName>\MSSQL\Binn.

  3. BackuptoURL.exe nie jest wywoływana przy użyciu kluczy SAS , ale jest wyzwalana podczas korzystania z klucza dostępu . Upewnij się, że używasz kluczy dostępu lub może zostać wyświetlony następujący błąd:

    Błąd systemu operacyjnego 50 (Żądanie nie jest obsługiwane).

Typowe błędy i rozwiązania

Problem Rozwiązanie
Błąd 3063: zapisywanie w urządzeniu blob kopii zapasowej bloku https://storageaccount/container/name.bak nie powiodło się. Urządzenie osiągnęło limit dozwolonych bloków. Aby rozwiązać ten problem, rozdziel docelowy element kopii zapasowej na wiele plików i upewnij się, że używasz następujących parametrów w poleceniu kopii zapasowej: COMPRESSION, MAXTRANSFERSIZE = 4194304, BLOCKSIZE = 65536.
Błąd 3035: tworzenie różnicowej kopii zapasowej kończy się niepowodzeniem dla jednej lub wielu baz danych. Dzieje się tak, jeśli skonfigurowałeś usługę Azure Backup do wykonywania kopii zapasowych baz danych SQL lub migawek maszyn wirtualnych, co nie tworzy kopii zapasowej typu "tylko do kopiowania", powodując niepowodzenie kopii zapasowych wykonywanych według planu konserwacji lub zadań agenta SQL na żądanie. Aby rozwiązać ten problem, dodać te klucze rejestru do maszyn wirtualnych hostujących wystąpienia programu SQL Server w kluczu rejestru [HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\BCDRAGENT], i dodać "USEVSSCOPYBACKUP"="TRUE".
Błąd 3201: tworzenie kopii zapasowej kończy się niepowodzeniem — błąd systemu operacyjnego 50 (żądanie nie jest obsługiwane). Wygeneruj ponownie token sygnatury dostępu współdzielonego (SAS) za pomocą Eksploratora usługi Storage: możesz utworzyć nową zasadę za pomocą Eksploratora usługi Azure Storage i utworzyć nowy token SAS z tą zasadą. utwórz ponownie poświadczeń przy użyciu tego nowego tokenu SAS wygenerowanego z usługi Azure Storage i spróbuj ponownie utworzyć kopię zapasową. Aby uzyskać więcej informacji, zobacz znane problemy z BACKUP TO URL. Upewnij się, że sieciowa grupa zabezpieczeń i/lub zapora zezwala na połączenia przychodzące i wychodzące na portach 1433 i 443.
Błąd 3271: tworzenie kopii zapasowej kończy się niepowodzeniem z powodu błędu TLS — tworzenie kopii zapasowej na adres URL odebrało wyjątek ze zdalnego punktu końcowego. Może się to zdarzyć w programie SQL Server w wersjach 2012, 2014 i 2016. Tworzenie kopii zapasowej adresu URL usługi Microsoft Azure Blob Storage nie jest zgodne z protokołem TLS 1.2 i można rozwiązać ten problem, postępując zgodnie z instrukcjami w KB4017023.
Błąd 3271: Tworzenie kopii zapasowej na adresie URL napotkało wyjątek od zdalnego punktu końcowego. Komunikat o wyjątku: nie można rozpoznać nazwy zdalnej. Widzisz ten komunikat, jeśli do skonfigurowania kopii zapasowej użyto nieprawidłowego poświadczenia, tajnego wpisu lub klucza SAS. Upuść poświadczenie i utwórz je ponownie. W przypadku SQL Server 2012/2014 użyj tożsamości konta magazynu i klucza dostępu, a dla SQL Server 2016 i nowszych wersji użyj sygnatury dostępu współdzielonego.
Błąd 18210: Wyjątek: Serwer zdalny zwrócił błąd: (400) Nieprawidłowe żądanie. Aby rozwiązać ten problem, zmień minimalną wersję protokołu TLS dla konta magazynu na 1.0 (konto magazynu>konfiguracja>minimalna wersja protokołu TLS) lub włączyć silną kryptografię zgodnie z opisem w KB4017023.
Komunikat o wyjątku: Zdalny serwer zwrócił błąd: (412) Obecnie istnieje dzierżawa obiektu typu blob, a w żądaniu nie określono identyfikatora tej dzierżawy. Zidentyfikuj bloby w Azure Storage Explorer o rozmiarze 1 TB, przerwij dzierżawę , usuń blobi ponów operację tworzenia kopii zapasowej.
Błąd: Serwer zdalny zwrócił błąd: (403) Zabronione. Aby rozwiązać ten problem, utwórz ponownie konto magazynu, poświadczenia i token SAS.
tworzenie kopii zapasowej bazy danych o pojemności 1 TB kończy się niepowodzeniem w programie SQL Server 2012/2014. Kopie zapasowe o pojemności 1 TB są znanym ograniczeniem na blobach stronicowych przed SQL Server 2016 (13.x). Użyj kompresji kopii zapasowej, dodając klauzulę "WITH COMPRESSION" do instrukcji T-SQL dla kopii zapasowej lub zaktualizuj swoje wystąpienie programu SQL Server do wersji SQL Server 2016 (13.x) lub nowszej.
Błąd: tworzenie kopii zapasowej na adres URL odebrało wyjątek od zdalnego punktu końcowego. Komunikat o wyjątku: serwer zdalny zwrócił błąd: (416) Określony zakres stron jest nieprawidłowy. Możesz zauważyć to, jeśli korzystasz z programu SQL Server 2012 (11.x) lub SQL Server 2014 (12.x), a rozmiar kopii zapasowej wzrośnie do 1 TB. Usuń pliki kopii zapasowej i/lub użyj kompresji kopii zapasowej, aby rozwiązać ten problem.
Tworzenie kopii zapasowej nie powiodło się podczas korzystania z planu konserwacji. Istnieje kilka usterek dotyczących planu konserwacji. Spróbuj użyć języka T-SQL, aby wykonać kopię zapasową. Jeśli język T-SQL działa, możesz utworzyć zadanie agenta SQL w celu uruchomienia kopii zapasowej baz danych.
Tworzenie kopii zapasowej nie powiodło się z powodu osiągnięcia limitów maszyn wirtualnych. Jeśli występują błędy wskazujące, że osiągnięto limit liczby operacji we/wy na sekundę dysku/maszyny wirtualnej, możliwe jest, że kopie zapasowe mogą spowolnić lub zakończyć się niepowodzeniem. Aby monitorować limity IOPS/VM, użyj metryk usługi Azure Monitor i w razie potrzeby dopasuj rozmiar maszyny wirtualnej/dysku, aby rozwiązać ten problem.
Serwer zdalny zwrócił błąd: (409) Konflikt dla programu SQL Server 2012/2014" Konta magazynowe z hierarchiczną przestrzenią nazw są wyposażone w bloby blokowe, a nie bloby stronicowe. Konta magazynowe bez tej funkcji nie powinny być używane do tworzenia kopii zapasowych do adresu URL w programie SQL Server 2014 (12.x).