Freigeben über


SQL Server auf URL für S3-kompatiblen Objekt-Storage sichern

Gilt für: SQL Server 2022 (16.x)

In diesem Artikel werden die Konzepte, Anforderungen und Komponenten vorgestellt, die Sie benötigen, wenn Sie S3-kompatiblen Objektspeicher als Sicherungsziel nutzen möchten. Die Sicherungs- und Wiederherstellungsfunktionen ähneln konzeptionell der Arbeit mit SQL Server-Sicherung über URLs für Azure Blob Storage als Sicherungsgerätetyp.

Weitere Informationen zu unterstützten Plattformen finden Sie unter Anbieter von S3-kompatiblem Objektspeicher.

Übersicht

In SQL Server 2022 (16.x) wird der Objektspeicher in die Datenplattform integriert, sodass Sie SQL Server zusätzlich zu Azure Storage mit S3-kompatiblem Objektspeicher integrieren können. Um diese Integration zu ermöglichen unterstützt SQL Server einen S3-Connector, der über die S3-REST-API eine Verbindung mit einem beliebigen Anbieter von S3-kompatiblem Objektspeicher herstellt. In SQL Server 2022 (16.x) wird die vorhandene Syntax „BACKUP/RESTORE TO/FROM URL“ durch Hinzufügen von Unterstützung für den neuen S3-Connector mithilfe der REST-API erweitert.

URLs, die auf S3-kompatible Ressourcen verweisen, wird das Präfix s3:// vorangestellt, um anzuzeigen, dass der S3-Connector verwendet wird. Bei URLs, die mit s3:// beginnen, wird immer davon ausgegangen, dass als zugrunde liegendes Protokoll https verwendet wird.

Einschränkungen für Teilenummern und Dateigrößen

Um Daten zu speichern, muss der Anbieter des S3-kompatiblen Objektspeichers Dateien in mehrere Blöcke unterteilen, die als Teile bezeichnet werden, ähnlich wie Blockblobs in Azure Blob Storage.

Jede Datei kann in bis zu 10.000 Teile aufgeteilt werden. Die Größe der einzelnen Teile liegt zwischen 5 MB und 20 MB. Dieser Bereich wird vom T-SQL BACKUP-Befehl über den Parameter MAXTRANSFERSIZE gesteuert. Der Standardwert von MAXTRANSFERSIZE ist 10 MB, daher ist die Standardgröße der einzelnen Teile 10 MB. Dieser Wert gibt zwar die maximale Übertragungsgröße an, garantiert jedoch nicht, dass jeder gesendete Teil 10 MB beträgt. Die Größe des Teils wird durch die Nähe von Daten beeinflusst. Wenn zum Beispiel 4 MB Daten neben 2 MB Daten liegen, werden 6 MB gesendet, nachdem das Element der Mindestgröße von 5 MB erreicht wurde. Oder wenn 12 MB an Daten angrenzen, werden Daten bis zur maximalen Größe (10 MB) gesendet und die restlichen 2 MB im nächsten Element. Der S3-Connector versucht immer, die maximale Datengröße zu senden, aber er überschreitet nie den MAXTRANSFERSIZE Wert.

Die maximale unterstützte Größe einer einzelnen Datei ist das Ergebnis von 10.000 Teilen * MAXTRANSFERSIZE, wenn eine größere Datei gesichert werden muss, muss sie auf bis zu 64 URLs aufgeteilt/gestreift werden. Die endgültige maximal unterstützte Größe einer Datei beträgt 10.000 Teile × MAXTRANSFERSIZE × URLs.

Hinweis

Die Verwendung von COMPRESSION ist erforderlich, um MAXTRANSFERSIZE-Werte zu ändern.

Voraussetzungen für den S3-Endpunkt

Der S3-Endpunkt muss folgende Konfigurationen aufweisen:

  • TLS muss konfiguriert sein. Es wird vorausgesetzt, dass alle Verbindungen sicher über HTTPS (nicht über HTTP) übertragen werden. Der Endpunkt wird anhand eines Zertifikats überprüft, das auf dem SQL Server-Betriebssystemhost installiert ist.
  • Anmeldedaten, die im S3-kompatiblen Objektspeicher mit ordnungsgemäßen Berechtigungen zum Ausführen der Operation erstellt wurden. Der auf der Speicherebene erstellte Benutzer und das Passwort heißen Access Key ID und Secret Key ID. Sie benötigen beide IDs zur Authentifizierung beim S3-Endpunkt.
  • Mindestens ein Bucket wurde konfiguriert. Buckets können nicht aus SQL Server 2022 (16.x) erstellt oder konfiguriert werden.

Sicherheit

Sicherungsberechtigungen

Um SQL Server mit S3-kompatiblem Objektspeicher zu verbinden, müssen zwei Berechtigungssätze eingerichtet werden, einer auf SQL Server und einer auf der Speicherebene.

Das zum Ausführen von BACKUP- oder RESTORE-Befehlen verwendete Benutzerkonto auf dem SQL Server muss Mitglied der Datenbankrolle db_backup operator sein und über Berechtigungen zum Ändern beliebiger Anmeldeinformationen verfügen.

Auf der Speicherebene:

  • Erstellen Sie in AWS S3 eine benutzerdefinierte Rolle und geben Sie speziell an, welche S3-API Zugriff benötigt. Für Backup und Wiederherstellung sind diese Berechtigungen erforderlich: ListBucket (Browse), PutObject (Schreiben - für Backup).
  • In anderen S3-kompatiblen Speichern muss der Benutzer (Access Key ID) sowohl über ListBucket- als auch über WriteOnly-Berechtigungen verfügen.

Wiederherstellungsberechtigungen

Wenn die wiederhergestellte Datenbank nicht vorhanden ist, muss CREATE DATABASE der Benutzer über berechtigungen verfügen, um RESTORE ausführen zu können. Ist die Datenbank vorhanden, werden RESTORE-Berechtigungen standardmäßig den Mitgliedern der festen Serverrollen sysadmin und dbcreator sowie dem*der Besitzer*in (dbo) der Datenbank erteilt.

RESTORE-Berechtigungen werden Rollen erteilt, in denen Mitgliedsinformationen immer für den Server verfügbar sind. Da die Mitgliedschaft in festen Datenbankrollen nur überprüft werden kann, wenn die Datenbank zugänglich und unbeschädigt ist, was beim Ausführen von RESTORE nicht immer der Fall ist, haben Mitglieder der db_owner festen Datenbankrolle keine RESTORE-Berechtigungen.

Auf der Speicherebene:

  • Erstellen Sie in AWS S3 eine benutzerdefinierte Rolle und geben Sie speziell an, welche S3-API Zugriff benötigt. Für die Sicherung und Wiederherstellung sind diese Berechtigungen erforderlich: ListBucket (Browse), GetObject (Lesen - zur Wiederherstellung).
  • In anderen S3-kompatiblen Speichern muss der Benutzer (Access Key ID) sowohl über ListBucket- als auch über ReadOnly-Berechtigungen verfügen.

Unterstützte Funktionen

Allgemeine Übersicht über die unterstützten Features für BACKUP und RESTORE:

  1. Eine einzelne Sicherungsdatei kann bis zu 200.000 MiB pro URL umfassen (bei Festlegung von MAXTRANSFERSIZE auf 20 MB).
  2. Für Sicherungen ist ein Striping über maximal 64 URLs möglich.
  3. Die Spiegelung wird unterstützt, aber nur über URLs hinweg. Die Spiegelung über URL und DISK wird nicht unterstützt.
  4. Die Komprimierung wird unterstützt und empfohlen.
  5. Die Verschlüsselung wird unterstützt.
  6. Für die Wiederherstellung aus URLs mit S3-kompatiblem Objektspeicher gilt keine Größenbeschränkung.
  7. Wenn Sie eine Datenbank wiederherstellen, wird MAXTRANSFERSIZE durch den Wert bestimmt, der in der Phase der Sicherung zugewiesen wurde.
  8. URLs können entweder im Format für virtuelle Hosts oder für Pfade angegeben werden.
  9. WITH CREDENTIAL wird unterstützt.
  10. REGION wird unterstützt, und der Standardwert lautet us-east-1.
  11. MAXTRANSFERSIZE liegt zwischen 5 MB und 20 MB. 10 MB ist der Standardwert für den S3-Connector.

Unterstützte Argumente für die Sicherung

WITH-Optionen S3-Endpunkt Hinweise
BLOCKSIZE Ja MAXTRANSFERSIZE bestimmt die Teilegröße.
BUFFERCOUNT Ja
COMPRESSION Ja
COPY_ONLY Ja
CREDENTIAL Ja
DESCRIPTION Ja
DIFFERENTIAL Ja
ENCRYPTION Ja
FILE_SNAPSHOT N
MAXTRANSFERSIZE Ja Von 5 MB (5,242,880 Byte) bis 20 MB (20.971.520 Byte), Standardwert ist 10 MB (10,485,760 Byte).
MEDIADESCRIPTION Ja
MEDIANAME Ja
MIRROR TO Ja Funktioniert nur mit einer anderen URL, MIRROR mit URL und DISK wird nicht unterstützt.
NAME Ja
NOFORMAT / FORMAT Ja
NOINIT / INIT N Das Anfügen wird nicht unterstützt. Verwenden Sie zum Überschreiben einer Sicherung WITH FORMAT.
NO_CHECKSUM / CHECKSUM Ja
NO_TRUNCATE Ja
REGION Ja Der Standardwert ist us-east-1. Muss zusammen mit BACKUP_OPTIONS verwendet werden.
STATS Ja

Unterstützte Argumente für die Wiederherstellung

WITH-Optionen S3-Endpunkt Hinweise
BLOCKSIZE Ja MAXTRANSFERSIZE bestimmt die Teilegröße.
BUFFERCOUNT N
CHECKSUM / NO_CHECKSUM Ja
CREDENTIAL Ja
ENABLE_BROKER / ERROR_BROKER_CONVERSATIONS / NEW_BROKER Ja
FILE N Logische Namen werden mit RESTORE FROM URL nicht unterstützt.
FILESTREAM Ja
KEEP_CDC Ja
KEEP_REPLICATION Ja
LOADHISTORY Ja
MAXTRANSFERSIZE Y
MEDIANAME Ja
MEDIAPASSWORD N Erforderlich für einige Sicherungen in Versionen vor SQL Server 2012.
MOVE Ja
PARTIAL Ja
PASSWORD N Erforderlich für einige Sicherungen in Versionen vor SQL Server 2012.
RECOVERY / NORECOVERY / STANDBY Ja
REGION Ja Der Standardwert ist us-east-1. Muss zusammen mit RESTORE_OPTIONS verwendet werden.
REPLACE Ja
RESTART Ja
RESTRICTED_USER Ja
REWIND / NOREWIND N
STATS Ja
STOP_ON_ERROR / CONTINUE_AFTER_ERROR Ja
STOPAT / STOPATMARK / STOPBEFOREMARK Ja
UNLOAD / NOUNLOAD N

Region

Ihr S3-kompatibler Objektspeicheranbieter kann die Möglichkeit bieten, eine bestimmte Region für den Bucket-Speicherort zu ermitteln. Die Verwendung dieses optionalen Parameters kann mehr Flexibilität bieten, indem angegeben wird, zu welcher Region der jeweilige Bucket gehört. Dieser Parameter erfordert die Verwendung von WITH zusammen mit BACKUP_OPTIONS oder RESTORE_OPTIONS. Für diese Optionen muss der Wert im JSON-Format deklariert werden. Dies ermöglicht Szenarien, in denen ein S3-kompatibler Speicheranbieter dieselbe universelle URL haben kann, aber über mehrere Regionen verteilt ist. In diesem Fall verweist der Backup- oder Wiederherstellungsbefehl auf die angegebenen Regionen, ohne die URL ändern zu müssen.

Wenn kein Wert deklariert wird, wird us-east-1 als Standard zugewiesen.

Beispiele für Sicherungen:

WITH BACKUP_OPTIONS = '{"s3": {"region":"us-west-1"}}'

Beispiel für Wiederherstellungen:

WITH RESTORE_OPTIONS = '{"s3": {"region":"us-west-1"}}'

Linux-Unterstützung

SQL Server verwendet WinHttp, um den Client von genutzten HTTP-REST-APIs zu implementieren. Dies basiert auf dem Betriebssystem-Zertifikatspeicher für Überprüfungen der TLS-Zertifikate, die vom Endpunkt http(s) präsentiert werden. Für SQL Server für Linux muss die Zertifizierungsstelle jedoch an einem vordefinierten Speicherort platziert werden, der unter /var/opt/mssql/security/ca-certificates erstellt werden muss. Nur die ersten 50 Zertifikate können in diesem Ordner gespeichert und unterstützt werden. Die Zertifizierungsstelle muss eingerichtet sein, bevor der SQL Server-Prozess gestartet wird.

Während des Startvorgangs liest SQL Server die Zertifikate aus dem Ordner und fügt sie dem Vertrauensspeicher hinzu.

Nur Superuser sollten in den Ordner schreiben können, während mssql-Benutzer Leseberechtigungen benötigen.

Nicht unterstützte Funktionen

  • Back up auf S3-kompatiblen Objekt-Storage mit einer unsicheren http URL wird nicht unterstützt. Kunden sind dafür verantwortlich, ihren S3-Host mit einer https-URL einzurichten, und dieser Endpunkt wird von einem Zertifikat überprüft, das auf dem SQL Server-Betriebssystemhost installiert ist.
  • Die Sicherung bis zum S3-kompatiblen Objektspeicher wird in SQL Server Express und SQL Server Express mit Advanced Services-Editionen nicht unterstützt.

Begrenzungen

Nachfolgend sind die aktuellen Einschränkungen der Sicherung und Wiederherstellung mit S3-kompatiblem Objektspeicher aufgeführt:

  • Aufgrund der aktuellen Einschränkung der S3-Standard-REST-API werden die temporären nicht übermittelten Datendateien, die aufgrund eines laufenden mehrteiligen Uploadvorgangs im S3-kompatiblen Objektspeicher des Kunden erstellt werden, während der Ausführung des BACKUP T-SQL-Befehls nicht entfernt, wenn Sicherungsfehler auftreten. Diese Datenblöcke ohne Commit werden weiterhin im S3-kompatiblen Objektspeicher beibehalten, wenn der T-SQL-Befehl BACKUP fehlschlägt oder abgebrochen wird. Wird die Sicherung erfolgreich ausgeführt, werden diese temporären Dateien automatisch vom Objektspeicher entfernt, um die endgültige Sicherungsdatei zu bilden. Einige S3-kompatible Speicheranbieter handhaben temporäre Dateien im Rahmen der automatischen Speicherbereinigung (Garbage Collector).
  • Die Gesamtlänge der URL ist auf 259 Zeichen beschränkt. Die vollständige Zeichenfolge wird in dieser Einschränkung gezählt, einschließlich des s3://-Connectornamens. SO beträgt der verwendbare Grenzwert 254 Zeichen. Es wird jedoch empfohlen, einen Grenzwert von 200 Zeichen einzuhalten, um eine mögliche Einführung von Abfrageparametern zu berücksichtigen.
  • Der SQL-Anmeldeinformationsname ist auf 128 Zeichen im UTF-16-Format beschränkt.
  • Geheime Schlüssel-ID darf keine :-Zeichen aufweisen.

Pfadformatvorlagen und Virtuelle Hostformatvorlage

Back up to S3 unterstützt die URL, die sowohl im Pfadstil als auch im Stil eines virtuellen Hosts geschrieben werden kann.

Beispiel für die „Pfad“-Formatvorlage: s3://<endpoint>:<port>/<bucket>/<backup_file_name>

Beispiel für einen virtuellen Host: s3://<bucket>.<domain>/<backup_file_name>

Beispiele

Erstellen von Anmeldeinformationen

  • Der Name der Anmeldedaten sollte den Speicherpfad bereitstellen. Es gibt mehrere Standards dafür, je nach Speicherplattform.
  • IDENTITY muss beim Verwenden des S3-Connectors immer 'S3 Access Key' lauten.
  • Die Zugriffsschlüssel-ID und die ID des geheimen Schlüssels dürfen keinen Doppelpunkt enthalten. Zugriffsschlüssel-ID und geheime Schlüssel-ID sind der Benutzer und das Passwort, das im S3-kompatiblen Objektspeicher erstellt wurde.
  • Nur alphanumerische Werte sind zulässig.
  • Die Zugriffsschlüssel-ID muss über die richtigen Berechtigungen für den S3-kompatiblen Objektspeicher verfügen.

Verwenden Sie CREATE CREDENTIAL, um Anmeldedaten auf Serverebene für die Authentifizierung mit dem S3-kompatiblen Objektspeicherendpunkt zu erstellen.

USE [master];
CREATE CREDENTIAL [s3://<endpoint>:<port>/<bucket>]
WITH
        IDENTITY    = 'S3 Access Key',
        SECRET      = '<AccessKeyID>:<SecretKeyID>';
GO

BACKUP DATABASE [SQLTestDB]
TO      URL = 's3://<endpoint>:<port>/<bucket>/SQLTestDB.bak'
WITH    FORMAT /* overwrite any existing backup sets */
,       STATS = 10
,       COMPRESSION;

AWS S3 unterstützt jedoch zwei unterschiedliche URL-Standards.

  • S3://<BUCKET_NAME>.S3.<REGION>.AMAZONAWS.COM/<FOLDER> (Standard)
  • S3://S3.<REGION>.AMAZONAWS.COM/<BUCKET_NAME>/<FOLDER>

Es gibt mehrere Ansätze zum erfolgreichen Erstellen von Anmeldedaten für AWS S3.

-- S3 bucket name: datavirtualizationsample
-- S3 bucket region: us-west-2
-- S3 bucket folder: backup

CREATE CREDENTIAL [s3://datavirtualizationsample.s3.us-west-2.amazonaws.com/backup]
WITH    
        IDENTITY    = 'S3 Access Key'
,       SECRET      = 'accesskey:secretkey';
GO

BACKUP DATABASE [AdventureWorks2022]
TO URL  = 's3://datavirtualizationsample.s3.us-west-2.amazonaws.com/backup/AdventureWorks2022.bak'
WITH COMPRESSION, FORMAT, MAXTRANSFERSIZE = 20971520;
GO

Oder

CREATE CREDENTIAL [s3://s3.us-west-2.amazonaws.com/datavirtualizationsample/backup]
WITH    
        IDENTITY    = 'S3 Access Key'
,       SECRET      = 'accesskey:secretkey';
GO

BACKUP DATABASE [AdventureWorks2022]
TO URL  = 's3://s3.us-west-2.amazonaws.com/datavirtualizationsample/backup/AdventureWorks2022.bak'
WITH COMPRESSION, FORMAT, MAXTRANSFERSIZE = 20971520;
GO

Auf URL sichern

Im folgenden Beispiel wird eine vollständige Datenbanksicherung im Objektspeicherendpunkt mit einem mehrere Dateien umfassenden Striping ausgeführt:

BACKUP DATABASE <db_name>
TO      URL = 's3://<endpoint>:<port>/<bucket>/<database>_01.bak'
,       URL = 's3://<endpoint>:<port>/<bucket>/<database>_02.bak'
,       URL = 's3://<endpoint>:<port>/<bucket>/<database>_03.bak'
--
,       URL = 's3://<endpoint>:<port>/<bucket>/<database>_64.bak'
WITH    FORMAT -- overwrite
,       STATS               = 10
,       COMPRESSION;

Wiederherstellen über URL

Im folgenden Beispiel wird eine Datenbankwiederherstellung aus dem Speicherort des Objektspeicherendpunkts ausgeführt:

RESTORE DATABASE <db_name>
FROM    URL = 's3://<endpoint>:<port>/<bucket>/<database>_01.bak'
,       URL = 's3://<endpoint>:<port>/<bucket>/<database>_02.bak'
,       URL = 's3://<endpoint>:<port>/<bucket>/<database>_03.bak'
--
,       URL = 's3://<endpoint>:<port>/<bucket>/<database>_64.bak'
WITH    REPLACE -- overwrite
,       STATS  = 10;

Optionen für Verschlüsselung und Komprimierung

Im folgenden Beispiel wird gezeigt, wie Sie die AdventureWorks2022-Datenbank mit Verschlüsselung, einem MAXTRANSFERSIZE-Wert von 20 MB und Komprimierung sichern und wiederherstellen:

CREATE MASTER KEY ENCRYPTION BY PASSWORD = <password>;
GO

CREATE CERTIFICATE AdventureWorks2022Cert
    WITH SUBJECT = 'AdventureWorks2022 Backup Certificate';
GO
-- Backup database
BACKUP DATABASE AdventureWorks2022
TO URL = 's3://<endpoint>:<port>/<bucket>/AdventureWorks2022_Encrypt.bak'
WITH FORMAT, MAXTRANSFERSIZE = 20971520, COMPRESSION,
ENCRYPTION (ALGORITHM = AES_256, SERVER CERTIFICATE = AdventureWorks2022Cert)
GO

-- Restore database
RESTORE DATABASE AdventureWorks2022
FROM URL = 's3://<endpoint>:<port>/<bucket>/AdventureWorks2022_Encrypt.bak'
WITH REPLACE

Verwenden von Regionen zur Sicherung und Wiederherstellung

Im folgenden Beispiel wird gezeigt, wie Sie die AdventureWorks2022-Datenbank mithilfe von REGION_OPTIONS sichern und wiederherstellen:

Sie können den Bereich innerhalb jedes einzelnen BACKUP / RESTORE-Befehls parametrisieren. Beachten Sie die S3-spezifische Regionszeichenfolge in BACKUP_OPTIONS und RESTORE_OPTIONS, z. B '{"s3": {"region":"us-west-2"}}'. Die Standardregion ist us-east-1. Ein einfaches Beispiel:

-- Backup Database
BACKUP DATABASE AdventureWorks2022
TO URL = 's3://<endpoint>:<port>/<bucket>/AdventureWorks2022.bak'
WITH BACKUP_OPTIONS = '{"s3": {"region":"us-west-2"}}'

-- Restore Database
RESTORE DATABASE AdventureWorks2022
FROM URL = 's3://<endpoint>:<port>/<bucket>/AdventureWorks2022.bak'
WITH 
  MOVE 'AdventureWorks2022' 
  TO 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\AdventureWorks2022.mdf'
, MOVE 'AdventureWorks2022_log' 
  TO 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\AdventureWorks2022.ldf'
, RESTORE_OPTIONS = '{"s3": {"region":"us-west-2"}}'

Zum Beispiel:

-- S3 bucket name: datavirtualizationsample
-- S3 bucket region: us-west-2
-- S3 bucket folder: backup

CREATE CREDENTIAL   [s3://datavirtualizationsample.s3.amazonaws.com/backup]
WITH    
        IDENTITY    = 'S3 Access Key'
,       SECRET      = 'accesskey:secretkey';
GO

BACKUP DATABASE [AdventureWorks2022]
TO URL  = 's3://datavirtualizationsample.s3.amazonaws.com/backup/AdventureWorks2022.bak'
WITH
    BACKUP_OPTIONS = '{"s3": {"region":"us-west-2"}}' -- REGION AS PARAMETER)
, COMPRESSION, FORMAT, MAXTRANSFERSIZE = 20971520;
GO

RESTORE DATABASE AdventureWorks2022_1 
FROM URL = 's3://datavirtualizationsample.s3.amazonaws.com/backup/AdventureWorks2022.bak'
WITH 
  MOVE 'AdventureWorks2022' 
  TO 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\AdventureWorks2022_1.mdf'
, MOVE 'AdventureWorks2022_log' 
  TO 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\AdventureWorks2022_1.ldf'
, STATS = 10, RECOVERY
, REPLACE, RESTORE_OPTIONS = '{"s3": {"region":"us-west-2"}}'; -- REGION AS PARAMETER)
GO