SQL Server-Sicherung über URLs für S3-kompatiblen Objektspeicher

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.

Die maximal unterstützte Größe einer einzelnen Datei ist das Ergebnis von 10.000 Teile × MAXTRANSFERSIZE. Wenn eine größere Datei gesichert werden muss, ist für diese eine Teilung/ein Striping in bis zu 64 URLs erforderlich. 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. Von SQL Server 2022 (16.x) Preview können keine Buckets 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

Ist die wiederherzustellende Datenbank nicht vorhanden, muss der Benutzer über CREATE DATABASE-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 einer festen Datenbankrolle nur bei unbeschädigten und zugänglichen Datenbanken geprüft werden kann (was beim Ausführen von RESTORE nicht immer der Fall ist), verfügen Mitglieder der festen Datenbankrolle db_owner nicht über 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 Features

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 mit 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 während der Backup-Phase 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 J MAXTRANSFERSIZE bestimmt die Teilegröße.
BUFFERCOUNT Y
COMPRESSION Y
COPY_ONLY Y
CREDENTIAL Y
DESCRIPTION Y
DIFFERENTIAL Y
ENCRYPTION Y
FILE_SNAPSHOT N
MAXTRANSFERSIZE J Von 5 MB (5,242,880 Byte) bis 20 MB (20.971.520 Byte), Standardwert ist 10 MB (10,485,760 Byte).
MEDIADESCRIPTION Y
MEDIANAME Y
MIRROR TO J Funktioniert nur mit einer anderen URL, MIRROR mit URL und DISK wird nicht unterstützt.
NAME Y
NOFORMAT / FORMAT Y
NOINIT / INIT N Anfügen wird nicht unterstützt. Verwenden Sie zum Überschreiben einer Sicherung WITH FORMAT.
NO_CHECKSUM / CHECKSUM Y
NO_TRUNCATE Y
REGION J Der Standardwert ist us-east-1. Muss zusammen mit BACKUP_OPTIONS verwendet werden.
STATS J

Unterstützte Argumente für die Wiederherstellung

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

  • Die Sicherung in S3-kompatiblem Objektspeicher 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 in S3-kompatiblem Objektspeicher wird in den Editionen SQL Server Express und SQL Server Express mit Advanced Services 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 Datendateien ohne Commit, die (aufgrund eines fortlaufenden mehrteiligen Uploadvorgangs) während der Ausführung des T-SQL-Befehls BACKUP im S3-kompatiblen Objektspeicher des Kunden erstellt werden, nicht entfernt, wenn Fehler 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

Das Backup in S3 unterstützt die URL, die sowohl in der Pfadformatvorlage als auch in der virtuellen Host-Formatvorlage geschrieben werden soll.

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

Erstellen von Sicherungen über URLs

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