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
undSecret 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 Funktionen
Allgemeine Übersicht über die unterstützten Features für BACKUP
und RESTORE
:
- Eine einzelne Sicherungsdatei kann bis zu 200.000 MiB pro URL umfassen (bei Festlegung von
MAXTRANSFERSIZE
auf 20 MB). - Für Sicherungen ist ein Striping über maximal 64 URLs möglich.
- Die Spiegelung wird unterstützt, aber nur über URLs hinweg. Die Spiegelung mit URL und DISK wird nicht unterstützt.
- Die Komprimierung wird unterstützt und empfohlen.
- Die Verschlüsselung wird unterstützt.
- Für die Wiederherstellung aus URLs mit S3-kompatiblem Objektspeicher gilt keine Größenbeschränkung.
- Wenn Sie eine Datenbank wiederherstellen, wird
MAXTRANSFERSIZE
durch den Wert bestimmt, der während der Backup-Phase zugewiesen wurde. - URLs können entweder im Format für virtuelle Hosts oder für Pfade angegeben werden.
WITH CREDENTIAL
wird unterstützt.REGION
wird unterstützt, und der Standardwert lautetus-east-1
.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 |
Y | 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 |
Y | 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 |
Y | Der Standardwert ist us-east-1 . Muss zusammen mit BACKUP_OPTIONS verwendet werden. |
STATS |
Y |
Unterstützte Argumente für die Wiederherstellung
WITH -Optionen |
S3-Endpunkt | Hinweise |
---|---|---|
BLOCKSIZE |
Y | 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 |
Y | 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 einerhttps
-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
Zugehöriger Inhalt
- SQL Server: Bewährte Methoden und Problembehandlung für das Sichern über URLs für S3-kompatiblen Objektspeicher
- SQL Server: Bewährte Methoden und Problembehandlung für das Sichern über URLs für Microsoft Azure Blob Storage
- CREATE CERTIFICATE (Transact-SQL)
- SQL Server-Sicherung über URLs für Microsoft Azure Blob Storage