Backup di SQL Server nell'URL per l'archiviazione oggetti compatibile con S3

Si applica a: SQL Server 2022 (16.x)

Questo articolo presenta i concetti, i requisiti e i componenti necessari per usare l'archiviazione oggetti compatibile con S3 come destinazione di backup. La funzionalità di backup e ripristino è concettualmente simile all'uso del backup di SQL Server nell'URL per Archiviazione BLOB di Azure come tipo di dispositivo di backup.

Per informazioni sulle piattaforme supportate, vedere Provider di archiviazione oggetti compatibili con S3.

Panoramica

SQL Server 2022 (16.x) introduce l'integrazione dell'archiviazione di oggetti nella piattaforma dati, consentendo di integrare SQL Server con l'archiviazione oggetti compatibile con S3 oltre ad Archiviazione di Azure. Per offrire questa integrazione, SQL Server è stato migliorato con l'aggiunta di un nuovo connettore S3, che usa l'API REST S3 per la connessione a qualsiasi provider di archiviazione di oggetti compatibile con S3. SQL Server 2022 (16.x) estende la sintassi esistente di URL BACKUP/RESTORE TO/FROM aggiungendo il supporto per il nuovo connettore S3 usando l'API REST.

Gli URL che puntano a risorse compatibili con S3 sono preceduti s3:// da un prefisso per indicare che viene usato il connettore S3. Gli URL che iniziano con s3:// presuppongono sempre che il protocollo sottostante sia https.

Limitazioni relative ai numeri di parte e alle dimensioni dei file

Per archiviare i dati, il provider di archiviazione oggetti compatibile con S3 deve suddividere i file in più blocchi denominati parti. Questo è simile ai BLOB in blocchi in Archiviazione BLOB di Azure.

Ogni file può essere suddiviso fino a 10.000 parti, ogni dimensione della parte è compresa tra 5 MB e 20 MB, questo intervallo è controllato dal comando T-SQL BACKUP tramite il parametro MAXTRANSFERSIZE. Il valore predefinito di MAXTRANSFERSIZE è 10 MB, pertanto la dimensione predefinita di ogni parte è 10 MB.

La dimensione massima supportata di un singolo file è il risultato di 10.000 parti * MAXTRANSFERSIZE, se è necessario eseguire il backup di un file di dimensioni maggiori, deve suddividere/eseguire lo striping fino a 64 URL. La dimensione massima finale supportata di un file è di 10.000 parti * * MAXTRANSFERSIZE URL.

Nota

L'uso di COMPRESSION è necessario per modificare MAXTRANSFERSIZE i valori.

Prerequisiti per l'endpoint S3

L'endpoint S3 deve essere stato configurato come segue:

  • È necessario configurare TLS. Si presuppone che tutte le connessioni vengano trasmesse in modo sicuro tramite HTTPS non HTTP. L'endpoint viene convalidato da un certificato installato nell'host del sistema operativo di SQL Server.
  • Credenziali create nell'archivio oggetti compatibile con S3 con autorizzazioni appropriate per eseguire l'operazione. L'utente e la password creati nel livello di archiviazione sono denominati Access Key ID e Secret Key ID. È necessario eseguire l'autenticazione per l'endpoint S3.
  • È stato configurato almeno un bucket. Non è possibile creare o configurare bucket da SQL Server 2022 (16.x).

Sicurezza

Autorizzazioni di backup

Per connettere SQL Server all'archiviazione oggetti compatibile con S3, è necessario stabilire due set di autorizzazioni, uno in SQL Server e anche nel livello di archiviazione.

In SQL Server l'account utente usato per eseguire i comandi BACKUP o RESTORE deve trovarsi nel ruolo del database db_backupoperator con autorizzazioni Alter any credential .

Nel livello di archiviazione l'utente (Access Key ID) deve avere entrambe le autorizzazioni ListBucket e WriteOnly .

Autorizzazioni di ripristino

Se il database da ripristinare non esiste, l'utente deve avere le autorizzazioni CREATE DATABASE per eseguire un'istruzione RESTORE. Se il database esiste, le autorizzazioni RESTORE sono predefinite per i membri dei sysadmin ruoli predefiniti del server e dbcreator del proprietario (dbo) del database.

Le autorizzazioni per l'istruzione RESTORE vengono assegnate ai ruoli in cui le informazioni sull'appartenenza sono sempre disponibili per il server. Poiché è possibile controllare l'appartenenza ai ruoli predefiniti del database solo quando il database è accessibile e non è danneggiato, condizioni che non risultano sempre vere quando si esegue un'operazione RESTORE, i membri del ruolo predefinito del database db_owner non dispongono delle autorizzazioni per l'istruzione RESTORE.

Nel livello di archiviazione l'utente (Access Key ID) deve disporre delle autorizzazioni ListBucket e ReadOnly .

Funzionalità supportate

Panoramica generale delle funzionalità supportate per BACKUP e RESTORE:

  1. Un singolo file di backup può essere fino a 200.000 MiB per URL (con MAXTRANSFERSIZE impostato su 20 MB).
  2. È possibile eseguire lo striping dei backup in un massimo di 64 URL.
  3. Il mirroring è supportato, ma solo negli URL. Il mirroring con URL e DISK non è supportato.
  4. La compressione è supportata e consigliata.
  5. La crittografia è supportata.
  6. Il ripristino dall'URL con l'archiviazione oggetti compatibile con S3 non presenta limitazioni di dimensioni.
  7. Quando si ripristina un database, l'oggetto MAXTRANSFERSIZE viene determinato dal valore assegnato durante la fase di backup.
  8. Gli URL possono essere specificati nel formato di stile host virtuale o percorso.
  9. WITH CREDENTIAL è supportato.
  10. REGION è supportato e il valore predefinito è us-east-1.
  11. MAXTRANSFERSIZE è compreso tra 5 MB e 20 MB. 10 MB è il valore predefinito per il connettore S3.

Argomenti supportati per il backup

Opzioni WITH S3 Endpoint Note
BLOCKSIZE Y MAXTRANSFERSIZE determina le dimensioni della parte.
BUFFERCOUNT Y
COMPRESSION Y
COPY_ONLY Y
CREDENTIAL Y
DESCRIZIONE Y
DIFFERENTIAL Y
ENCRYPTION Y
FILE_SNAPSHOT N
MAXTRANSFERSIZE Y Da 5 MB (5.242.880 byte) a 20 MB (20.971.520 byte), il valore predefinito è 10 MB (10.485.760 byte).
MEDIADESCRIPTION Y
MEDIANAME Y
MIRROR TO Y Funziona solo con un altro URL, MIRROR con URL e DISK non è supportato.
NOME Y
NOFORMAT/FORMAT Y
NOINIT/INIT N L'aggiunta non è supportata. Per sovrascrivere un backup, usare WITH FORMAT.
NO_CHECKSUM/CHECKSUM Y
NO_TRUNCATE Y
REGION Y Il valore predefinito è us-east-1, deve essere usato con BACKUP_OPTIONS.
STATS (Statistiche) Y

Argomenti supportati per il ripristino

Opzioni WITH S3 Endpoint Note
BLOCKSIZE Y MAXTRANSFERSIZE determina le dimensioni della parte.
BUFFERCOUNT N
CHECKSUM | NO_CHECKSUM Y
CREDENTIAL Y
ENABLE_BROKER | ERROR_BROKER_CONVERSATIONS | NEW_BROKER Y
FILE N Nomi logici non supportati con RESTORE FROM URL.
FILESTREAM Y
KEEP_CDC Y
KEEP_REPLICATION Y
LOADHISTORY Y
MAXTRANSFERSIZE Y
MEDIANAME Y
MEDIAPASSWORD N Obbligatorio per alcuni backup eseguiti prima di SQL Server 2012.
MOVE Y
PARTIAL Y
PASSWORD N Obbligatorio per alcuni backup eseguiti prima di SQL Server 2012.
RECOVERY | NORECOVERY | STANDBY Y
REGION Y Il valore predefinito è us-east-1, deve essere usato con RESTORE_OPTIONS.
REPLACE Y
RESTART Y
RESTRICTED_USER Y
REWIND | NOREWIND N
STATS (Statistiche) Y
STOP_ON_ERROR | CONTINUE_AFTER_ERROR Y
STOPAT | STOPATMARK | STOPBEFOREMARK Y
UNLOAD | NOUNLOAD N

Area geografica

Il provider di archiviazione oggetti compatibile con S3 può offrire la possibilità di determinare un'area specifica per la posizione del bucket. L'uso di questo parametro facoltativo può offrire maggiore flessibilità specificando l'area a cui appartiene il bucket specifico. Questo parametro richiede l'uso di WITH insieme a BACKUP_OPTIONS o RESTORE_OPTIONS. Queste opzioni richiedono che il valore venga dichiarato in formato JSON. Ciò consente scenari in cui un provider di archiviazione compatibile con S3 può avere lo stesso URL universale, ma essere distribuito in diverse aree. In questo caso, il comando di backup o ripristino punterà alle aree specificate senza la necessità di modificare l'URL.

Se non viene dichiarato alcun valore, us-east-1 viene assegnato come predefinito.

Esempio di backup:

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

Esempio di ripristino:

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

Supporto di Linux

SQL Server usa WinHttp per implementare il client delle API REST HTTP usate. Si basa sull'archivio certificati del sistema operativo per le convalide dei certificati TLS presentati da endpoint HTTP(s). Tuttavia, SQL Server in Linux la CA deve essere inserita in un percorso predefinito da creare in /var/opt/mssql/security/ca-certificates, è possibile archiviare e supportare solo i primi 50 certificati in questa cartella.

SQL Server legge i certificati dalla cartella durante l'avvio e li aggiunge all'archivio attendibilità.

Solo l'utente con privilegi avanzati deve essere in grado di scrivere nella cartella, mentre l'utente mssql deve essere in grado di leggere.

Funzionalità non supportate

  • Il backup nell'archiviazione di oggetti compatibile con S3 con un URL HTTP non sicuro non è supportato. I clienti sono responsabili della configurazione dell'host S3 con un URL HTTPS e questo endpoint viene convalidato da un certificato installato nell'host del sistema operativo di SQL Server.
  • Il backup nell'archiviazione oggetti compatibile con S3 non è supportato nelle edizioni SQL Server Express e SQL Server Express con Advanced Services.

Limiti

Di seguito sono riportate le limitazioni correnti del backup e del ripristino con l'archiviazione di oggetti compatibile con S3:

  1. A causa della limitazione corrente dell'API REST S3 Standard, i file di dati temporanei di cui non è stato eseguito il commit creati nell'archivio oggetti compatibile con S3 del cliente (a causa di un'operazione di caricamento multiparte in corso) mentre il comando BACKUP T-SQL è in esecuzione, non vengono rimossi in caso di errori. Questi blocchi di dati non inviati continuano a essere persistenti nell'archiviazione oggetti compatibile con S3 nel caso in cui il comando BACKUP T-SQL non riesca o venga annullato. Se il backup ha esito positivo, questi file temporanei vengono rimossi automaticamente dall'archivio oggetti per formare il file di backup finale. Alcuni provider di archiviazione compatibili con S3 gestiscono questa operazione tramite il sistema di Garbage Collector.
  2. La lunghezza totale dell'URL è limitata a 259 caratteri. La stringa completa viene conteggiata in questa limitazione, incluso il nome del s3:// connettore. Il limite utilizzabile è quindi di 254 caratteri. È tuttavia consigliabile attenersi a un limite di 200 caratteri per consentire la possibile introduzione dei parametri di query.
  3. Il nome delle credenziali SQL è limitato da 128 caratteri in formato UTF-16.
  4. L'ID chiave privata non deve avere : un carattere.

Stile percorso e stile host virtuale

Il backup in S3 supporta l'URL da scrivere sia in stile di percorso che in uno stile host virtuale.

Esempio di stile percorso: s3://<endpoint>:<port>/<bucket>/<backup_file_name>

Esempio di host virtuale: s3://<bucket>.<domain>/<backup_file_name>

Esempi

Creare le credenziali

  • Identity deve essere 'S3 Access Key' sempre quando si usa il connettore S3.
  • L'ID chiave di accesso e l'ID chiave privata non devono contenere due punti. L'ID chiave di accesso e l'ID chiave privata sono l'utente e la password creati nell'archivio oggetti compatibile con S3.
  • Sono consentiti solo valori alfanumerici.
  • L'ID chiave di accesso deve disporre delle autorizzazioni appropriate per l'archiviazione di oggetti compatibile con S3.

Gli esempi seguenti creano credenziali di SQL Server per l'autenticazione con l'endpoint di archiviazione oggetti:

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

Backup su URL

Nell'esempio seguente viene eseguito un backup completo del database nell'endpoint di archiviazione oggetti, con striping su più file:

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;

Ripristino da un URL

Nell'esempio seguente viene eseguito un ripristino del database dal percorso dell'endpoint di archiviazione oggetti:

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;

Opzioni per la crittografia e la compressione

Nell'esempio seguente viene illustrato come eseguire il backup e il ripristino del AdventureWorks2022 database con crittografia, MAXTRANSFERSIZE come 20 MB e compressione:

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

Usare l'area per il backup e il ripristino

Nell'esempio seguente viene illustrato come eseguire il backup e il ripristino del AdventureWorks2022 database usando REGION_OPTIONS:

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

-- 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-east-1"}}'

Passaggi successivi