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
eSecret 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
:
- Un singolo file di backup può essere fino a 200.000 MiB per URL (con
MAXTRANSFERSIZE
impostato su 20 MB). - È possibile eseguire lo striping dei backup in un massimo di 64 URL.
- Il mirroring è supportato, ma solo negli URL. Il mirroring con URL e DISK non è supportato.
- La compressione è supportata e consigliata.
- La crittografia è supportata.
- Il ripristino dall'URL con l'archiviazione oggetti compatibile con S3 non presenta limitazioni di dimensioni.
- Quando si ripristina un database, l'oggetto
MAXTRANSFERSIZE
viene determinato dal valore assegnato durante la fase di backup. - Gli URL possono essere specificati nel formato di stile host virtuale o percorso.
WITH CREDENTIAL
è supportato.REGION
è supportato e il valore predefinito èus-east-1
.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:
- 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.
- 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. - Il nome delle credenziali SQL è limitato da 128 caratteri in formato UTF-16.
- 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"}}'