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 für die Verwendung von S3-kompatiblem Objektspeicher als Sicherungsziel erforderlich sind. 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.

Überblick

SQL Server 2022 (16.x) führt die Objektspeicherintegration in die Datenplattform ein, sodass Sie SQL Server zusätzlich zu Azure Storage in S3-kompatible Objektspeicher integrieren können. Um diese Integration bereitzustellen, unterstützt SQL Server einen S3-Connector, der die S3-REST-API verwendet, um eine Verbindung mit einem beliebigen Anbieter von S3-kompatiblem Objektspeicher herzustellen. SQL Server 2022 (16.x) erweitert die vorhandene SYNTAX BACKUP/RESTORE TO/FROM URL durch Hinzufügen von Unterstützung für den neuen S3-Connector mithilfe der REST-API.

URLs, die auf S3-kompatible Ressourcen verweisen, wird das Präfix s3:// vorangestellt, um anzuzeigen, dass der S3-Connector verwendet wird. URLs beginnend mit s3:// immer davon ausgehen, dass das zugrunde liegende Protokoll ist https.

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

Zum Speichern von Daten muss der S3-kompatible Objektspeicheranbieter Dateien in mehreren Blöcken teilen, die als Teile bezeichnet werden, ähnlich wie Block blobs in Azure Blob Storage.

Jede Datei kann bis zu 10.000 Teile aufgeteilt werden, jede Teilegröße reicht von 5 MB bis 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 Werte zu ändern MAXTRANSFERSIZE .

Voraussetzungen für den S3-Endpunkt

Der S3-Endpunkt muss wie folgt konfiguriert werden:

  • TLS muss konfiguriert sein. Es wird vorausgesetzt, dass alle Verbindungen sicher über HTTPS (nicht über HTTP) übertragen werden. Der Endpunkt wird von einem Zertifikat überprüft, das auf dem SQL Server-Betriebssystemhost installiert ist.
  • Anmeldeinformationen, die im S3-kompatiblen Objektspeicher mit ordnungsgemäßen Berechtigungen zum Ausführen des Vorgangs erstellt wurden. Der auf der Speicherebene erstellte Benutzer und Das Kennwort heißen und Access Key IDSecret Key ID. Sie müssen sich beide beim S3-Endpunkt authentifizieren.
  • 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, eine auf SQL Server und auch auf der Speicherebene.

Auf SQL Server sollte sich das Benutzerkonto, das zum Ausgeben von SICHERUNGS- oder WIEDERHERSTELLUNGSbefehlen verwendet wird, in der datenbankrolle db_backupoperator befinden, wobei alle Anmeldeinformationsberechtigungen geändert werden.

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), PutObject (Write - for backup).
  • In anderen S3-kompatiblen Speicher muss der Benutzer (Access Key ID) sowohl über ListBucket- als auch über WriteOnly-Berechtigungen verfügen.

Wiederherstellen von Berechtigungen

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 (Read - for restore).
  • In anderen S3-kompatiblen Speicher 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 dies MAXTRANSFERSIZE durch den Wert bestimmt, der während der Sicherungsphase 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 reicht von 5 MB bis 20 MB. 10 MB ist der Standardwert für den S3-Verbinder.

Unterstützte Argumente für die Sicherung

WITH-Optionen S3-Endpunkt Hinweise
BLOCKSIZE J MAXTRANSFERSIZE bestimmt die Teilegröße.
BUFFERCOUNT J
COMPRESSION J
COPY_ONLY J
CREDENTIAL J
BESCHREIBUNG J
DIFFERENTIAL J
ENCRYPTION J
FILE_SNAPSHOT N
MAXTRANSFERSIZE J Von 5 MB (5.242.880 Bytes) bis 20 MB (20.971.520 Bytes) beträgt der Standardwert 10 MB (10.485.760 Bytes).
MEDIADESCRIPTION J
MEDIANAME J
MIRROR TO J Funktioniert nur mit einer anderen URL, MIRROR mit URL und DISK wird nicht unterstützt.
NAME J
NOFORMAT/FORMAT J
NOINIT/INIT N Anfügen wird nicht unterstützt. Verwenden Sie WITH FORMATzum Überschreiben einer Sicherung .
NO_CHECKSUM/CHECKSUM J
NO_TRUNCATE J
REGION J Standardwert ist us-east-1. Muss zusammen mit BACKUP_OPTIONS verwendet werden.
STATISTIK J

Unterstützte Argumente für die Wiederherstellung

WITH-Optionen S3-Endpunkt Hinweise
BLOCKSIZE J MAXTRANSFERSIZE bestimmt die Teilegröße.
BUFFERCOUNT N
PRÜFSUMME | NO_CHECKSUM J
CREDENTIAL J
ENABLE_BROKER | ERROR_BROKER_CONVERSATIONS | NEW_BROKER J
FILE N Logische Namen werden mit RESTORE FROM URL.
FILESTREAM J
KEEP_CDC J
KEEP_REPLICATION J
LOADHISTORY J
MAXTRANSFERSIZE Y
MEDIANAME J
MEDIAPASSWORD N Erforderlich für einige Sicherungen, die vor SQL Server 2012 erstellt wurden.
MOVE J
PARTIAL J
PASSWORD N Erforderlich für einige Sicherungen, die vor SQL Server 2012 erstellt wurden.
WIEDERHERSTELLUNG | NORECOVERY | STANDBY J
REGION J Standardwert ist us-east-1. Muss zusammen mit RESTORE_OPTIONS verwendet werden.
REPLACE J
RESTART J
RESTRICTED_USER J
RÜCKSPULEn | NOREWIND N
STATISTIK J
STOP_ON_ERROR | CONTINUE_AFTER_ERROR J
STOPAT | STOPATMARK | STOPBEFOREMARK J
ENTLADEN | NOUNLOAD N

Region

Ihr S3-kompatibler Objektspeicheranbieter kann die Möglichkeit bieten, eine bestimmte Region für den Bucketspeicherort 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 zusammen WITH mit einem 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 werden kann. In diesem Fall verweist der Sicherungs- oder Wiederherstellungsbefehl auf die angegebenen Regionen, ohne die URL ändern zu müssen.

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

Sicherungsbeispiel:

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

Beispiel Wiederherstellen:

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. Es basiert auf dem Zertifikatspeicher des Betriebssystems für überprüfungen der vom Endpunkt dargestellten http(s) TLS-Zertifikate. 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.

SQL Server liest die Zertifikate aus dem Ordner während des Starts 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 auf S3-kompatiblen Objektspeicher mit einer nicht 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:

  1. Aufgrund der aktuellen Einschränkung der S3-Standard-REST-API werden die temporären nicht ausgeschriebenen Datendateien, die im S3-kompatiblen Objektspeicher des Kunden erstellt werden (aufgrund eines laufenden mehrteiligen Uploadvorgangs), während der BEFEHL BACKUP T-SQL ausgeführt wird, nicht entfernt, wenn Fehler auftreten. Diese nicht ausgelassenen Datenblöcke werden weiterhin im S3-kompatiblen Objektspeicher beibehalten, falls der BEFEHL BACKUP T-SQL fehlschlägt oder abgebrochen wird. Wenn die Sicherung erfolgreich ist, werden diese temporären Dateien automatisch vom Objektspeicher entfernt, um die endgültige Sicherungsdatei zu bilden. Einige S3-kompatible Speicheranbieter verarbeiten dies über ihr Garbage Collector-System.
  2. 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. Das verwendbare Limit beträgt also 254 Zeichen. Es wird jedoch empfohlen, einen Grenzwert von 200 Zeichen einzuhalten, um eine mögliche Einführung von Abfrageparametern zu berücksichtigen.
  3. Der SQL-Anmeldeinformationsname ist auf 128 Zeichen im UTF-16-Format beschränkt.
  4. Geheime Schlüssel-ID darf kein Zeichen aufweisen : .

Pfadformat und Virtuelle Hostformatvorlage

Die Sicherung in S3 unterstützt die URL, die sowohl im Pfadstil als auch im virtuellen Hoststil geschrieben werden soll.

Beispiel für pfadformatvorlage: 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 Anmeldeinformationen sollte den Speicherpfad bereitstellen, und 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. Zugriffstasten-ID und geheime Schlüssel-ID sind der Benutzer und das Kennwort, das im S3-kompatiblen Objektspeicher erstellt wurde.
  • Nur alphanumerische Werte sind zulässig.
  • Die Zugriffstasten-ID muss über die richtigen Berechtigungen für den S3-kompatiblen Objektspeicher verfügen.

Verwenden Sie CREATE CREDENTIAL , um anmeldeinformationen 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 Anmeldeinformationen 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

Das folgende Beispiel zeigt, wie Sie die AdventureWorks2022 Datenbank mit Verschlüsselung sichern und wiederherstellen, MAXTRANSFERSIZE als 20 MB und Komprimierung:

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

Region für Sicherung und Wiederherstellung verwenden

Das folgende Beispiel zeigt, wie Sie die AdventureWorks2022 Datenbank sichern und wiederherstellen:REGION_OPTIONS

Sie können den Bereich innerhalb der einzelnen BACKUP/RESTORE Befehle parametrisieren. Beachten Sie die S3-spezifische Regionszeichenfolge in der BACKUP_OPTIONS und RESTORE_OPTIONS, z. B '{"s3": {"region":"us-west-2"}}'. . Der Standardbereich 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"}}'

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