Sdílet prostřednictvím


Zálohování SQL Serveru na adresu URL pro úložiště objektů kompatibilní s S3

platí pro: SQL Server 2022 (16.x)

Tento článek představuje koncepty, požadavky a komponenty nezbytné k použití úložiště objektů kompatibilního s S3 jako cíle zálohování. Funkce zálohování a obnovení se koncepčně podobá práci se zálohováním SQL Serveru na adresu URL služby Azure Blob Storage jako typu zálohovací zařízení.

Informace o podporovaných platformách najdete v tématu poskytovatelé úložiště kompatibilního se S3.

Přehled

SQL Server 2022 (16.x) zavádí integraci úložiště objektů do datové platformy, která umožňuje integrovat SQL Server s úložištěm objektů kompatibilním s S3 kromě služby Azure Storage. K zajištění této integrace SQL Server podporuje konektor S3, který používá rozhraní REST API S3 pro připojení k libovolnému poskytovateli úložiště objektů kompatibilního s S3. SQL Server 2022 (16.x) rozšiřuje stávající syntaxi adresy URL BACKUP/RESTORE TO/FROM přidáním podpory nového konektoru S3 pomocí rozhraní REST API.

Adresy URL odkazující na prostředky kompatibilní s s3:// S3 mají předponu, která označuje, že se používá konektor S3. Adresy URL začínající s3:// vždy předpokládají, že základní protokol je https.

Omezení čísel částí a velikosti souborů

Aby bylo možné ukládat data, musí poskytovatel objektového úložiště kompatibilního se S3 rozdělit soubory do několika bloků, označovaných jako části, podobně jako blokové blob objekty ve službě Azure Blob Storage.

Každý soubor je možné rozdělit až na 10 000 částí, velikost každé části je v rozsahu od 5 MB do 20 MB, tento rozsah je řízen příkazem T-SQL BACKUP prostřednictvím parametru MAXTRANSFERSIZE. Výchozí hodnota MAXTRANSFERSIZE je 10 MB, proto výchozí velikost každé části je 10 MB. I když tato hodnota určuje maximální velikost přenosu, nezaručuje, že každá odeslaná část je 10 MB. Velikost části je ovlivněna sousedstvím dat. Například, pokud data o velikosti 4 MB sousedí s 2 MB dat, odešle se 6 MB, jakmile je dosažena minimální velikost části 5 MB. Případně platí, že pokud je sousedních dat 12 MB, odešlou se data až do maximální velikosti (10 MB) a zbývající 2 MB se odešlou v další části. Konektor S3 se vždy pokusí odeslat maximální možnou velikost dat, ale nikdy nepřekročí MAXTRANSFERSIZE hodnotu.

Maximální podporovaná velikost jednoho souboru je dána jako 10 000 částí * MAXTRANSFERSIZE. Pokud je třeba zálohovat větší soubor, je nutné ho rozdělit nebo rozložit na až 64 různých URL adres. Konečná maximální podporovaná velikost souboru je 10 000 částí * MAXTRANSFERSIZE * adresy URL.

Poznámka:

K změně MAXTRANSFERSIZE hodnot je vyžadováno použití komprese.

Požadavky na koncový bod S3

Koncový bod S3 musí být nakonfigurovaný takto:

  • Musí být nakonfigurovaný protokol TLS. Předpokládá se, že všechna připojení budou bezpečně přenášena přes PROTOKOL HTTPS, nikoli PŘES PROTOKOL HTTP. Koncový bod je ověřen certifikátem nainstalovaným na hostiteli operačního systému SQL Serveru.
  • Přihlašovací údaje vytvořené v úložišti objektů kompatibilním s S3 se správnými oprávněními k provedení operace. Uživatel a heslo vytvořené na vrstvě úložiště jsou pojmenovány Access Key ID a Secret Key ID. K ověření na koncovém bodu S3 potřebujete obojí.
  • Byl nakonfigurován alespoň jeden kbelík. Kontejnery se nedají vytvářet ani konfigurovat z SQL Serveru 2022 (16.x).

Bezpečnost

Oprávnění k zálohování

Pokud chcete připojit SQL Server k úložišti objektů kompatibilním s S3, je potřeba navázat dvě sady oprávnění, jednu na SQL Serveru a také vrstvu úložiště.

Na SQL Serveru by měl být uživatelský účet, který se používá k vydávání příkazů BACKUP nebo RESTORE, v roli db_backupoperator databáze s oprávněním Alter any credential.

Na vrstvě úložiště:

  • V AWS S3 vytvořte vlastní roli a specifikujte, které rozhraní API S3 vyžaduje přístup. Zálohování a obnovení vyžaduje tato oprávnění: ListBucket (Browse), PutObject (Zápis – pro zálohování).
  • V jiném úložišti kompatibilním s S3 musí mít uživatel (Access Key ID) oprávnění ListBucket i WriteOnly .

Obnovit oprávnění

Pokud obnovená databáze neexistuje, musí mít CREATE DATABASE uživatel oprávnění ke spuštění příkazu RESTORE. Pokud databáze existuje, oprávnění RESTORE jsou automaticky přiřazena členům serverových pevných rolí sysadmin a dbcreator a vlastníkovi (dbo) databáze.

Oprávnění RESTORE jsou udělena rolím, ve kterých jsou informace o členství vždy snadno dostupné pro server. Vzhledem k tomu, že pevné členství v rolích databáze je možné zkontrolovat pouze v případě, že je databáze přístupná a nepoškozená, což není vždy případ spuštění funkce RESTORE, nemají členové db_owner pevné databázové role oprávnění RESTORE.

Na vrstvě úložiště:

  • V AWS S3 vytvořte vlastní roli a specifikujte, které rozhraní API S3 vyžaduje přístup. Zálohování a obnovení vyžaduje tato oprávnění: ListBucket (Browse), GetObject (Čtení – pro obnovení).
  • V jiném úložišti kompatibilním s S3 musí mít uživatel (Access Key ID) oprávnění ListBucket i ReadOnly .

Podporované funkce

Vysoký přehled podporovaných funkcí pro BACKUP a RESTORE:

  1. Jeden záložní soubor může být až 200 000 MiB na adresu URL (s MAXTRANSFERSIZE nastavenou na 20 MB).
  2. Zálohy lze rozložit na maximálně 64 adresy URL.
  3. Zrcadlení se podporuje, ale pouze napříč adresami URL. Mirrorování pomocí URL i DISKU není podporováno.
  4. Komprese se podporuje a doporučuje.
  5. Podporuje se šifrování.
  6. Obnovení z adresy URL s úložištěm objektů kompatibilním s S3 nemá žádné omezení velikosti.
  7. Při obnovování databáze MAXTRANSFERSIZE se určuje hodnotou přiřazenou během fáze zálohování.
  8. Adresy URL je možné zadat buď ve stylu virtuálního hostitele, nebo stylu cesty.
  9. WITH CREDENTIAL se podporuje.
  10. REGION je podporována a výchozí hodnota je us-east-1.
  11. MAXTRANSFERSIZE rozsahy od 5 MB do 20 MB. 10 MB je výchozí hodnota konektoru S3.

Podporované argumenty zálohování

WITH možnosti Koncový bod S3 Poznámky
BLOCKSIZE Й MAXTRANSFERSIZE určuje velikost části.
BUFFERCOUNT Й
COMPRESSION Й
COPY_ONLY Й
CREDENTIAL Й
DESCRIPTION Й
DIFFERENTIAL Й
ENCRYPTION Й
FILE_SNAPSHOT N
MAXTRANSFERSIZE Й Od 5 MB (5 242 880 bajtů) do 20 MB (20 971 520 bajtů) je výchozí hodnota 10 MB (10 485 760 bajtů).
MEDIADESCRIPTION Й
MEDIANAME Й
MIRROR TO Й Funguje pouze s jinou adresou URL, a MIRROR s URL a DISK se nepodporují.
NAME Й
NOFORMAT / FORMAT Й
NOINIT / INIT N Připojení se nepodporuje. Chcete-li přepsat zálohu, použijte WITH FORMAT.
NO_CHECKSUM / CHECKSUM Й
NO_TRUNCATE Й
REGION Й Výchozí hodnota je us-east-1. Musí být použit s BACKUP_OPTIONS.
STATS Й

Podporované argumenty pro obnovení

WITH možnosti Koncový bod S3 Poznámky
BLOCKSIZE Й MAXTRANSFERSIZE určuje velikost části.
BUFFERCOUNT N
CHECKSUM / NO_CHECKSUM Й
CREDENTIAL Й
ENABLE_BROKER / ERROR_BROKER_CONVERSATIONS / NEW_BROKER Й
FILE N Logické názvy nejsou podporovány v RESTORE FROM URL.
FILESTREAM Й
KEEP_CDC Й
KEEP_REPLICATION Й
LOADHISTORY Й
MAXTRANSFERSIZE Y
MEDIANAME Й
MEDIAPASSWORD N Vyžaduje se u některých záloh provedených ve verzích před SQL Serverem 2012.
MOVE Й
PARTIAL Й
PASSWORD N Vyžaduje se u některých záloh provedených ve verzích před SQL Serverem 2012.
RECOVERY / NORECOVERY / STANDBY Й
REGION Й Výchozí hodnota je us-east-1. Musí být použit s RESTORE_OPTIONS.
REPLACE Й
RESTART Й
RESTRICTED_USER Й
REWIND / NOREWIND N
STATS Й
STOP_ON_ERROR / CONTINUE_AFTER_ERROR Й
STOPAT / STOPATMARK / STOPBEFOREMARK Й
UNLOAD / NOUNLOAD N

Región

Poskytovatel úložiště objektů kompatibilní s S3 může nabídnout možnost určit konkrétní oblast pro umístění kontejneru. Použití tohoto volitelného parametru může poskytnout větší flexibilitu zadáním oblasti, do které konkrétní kontejner patří. Tento parametr vyžaduje použití WITH společně buď s BACKUP_OPTIONS, nebo RESTORE_OPTIONS. Tyto možnosti vyžadují, aby byla hodnota deklarována ve formátu JSON. To umožňuje scénářům, ve kterých může poskytovatel úložiště kompatibilní s S3 mít stejnou univerzální adresu URL, ale distribuovat napříč několika oblastmi. V tomto případě zálohovací nebo obnovovací příkaz míří na určené oblasti, aniž by bylo nutné měnit adresu URL.

Pokud není deklarována žádná hodnota, us-east-1 je přiřazena jako výchozí.

Příklad zálohování:

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

Příklad obnovení:

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

Podpora Linuxu

SQL Server používá WinHttp k implementaci klienta rozhraní HTTP REST API, která používá. Spoléhá na úložiště certifikátů operačního systému pro ověření certifikátů TLS prezentovaných http(s) koncovým bodem. SQL Server na Linuxu však vyžaduje, aby CA byla umístěna na předem definované umístění, které má být vytvořeno na /var/opt/mssql/security/ca-certificates, přičemž v této složce lze uložit a podporovat pouze prvních 50 certifikátů. Certifikační autorita musí být zavedená před spuštěním procesu SQL Serveru.

SQL Server přečte certifikáty ze složky během spuštění a přidá je do úložiště důvěryhodnosti.

Do složky by měl být schopný zapisovat jenom superuživatel, zatímco mssql uživatel musí být schopen číst.

Nepodporované funkce

  • Zálohování do úložiště objektů kompatibilního s S3 s nezabezpečenou http adresou URL se nepodporuje. Zákazníci zodpovídají za nastavení hostitele S3 s https adresou URL a tento koncový bod ověří certifikát nainstalovaný na hostiteli operačního systému SQL Server.
  • V edicích SQL Server Express a SQL Server Express s edicemi Advanced Services není podporováno zálohování do úložiště objektů kompatibilního s S3.

Omezení

Tady jsou aktuální omezení zálohování a obnovení s úložištěm objektů kompatibilním s S3:

  • Vzhledem k aktuálnímu omezení rozhraní REST API úrovně Standard úrovně S3 se dočasné nepotvrzené datové soubory vytvořené v úložišti objektů kompatibilních s S3 zákazníka (kvůli probíhající operaci nahrávání do více částí) při spuštění příkazu BACKUP T-SQL neodeberou, pokud dojde k selháním zálohování. Tyto nepotvrzené datové bloky se nadále uchovávají v úložišti objektů kompatibilním s S3 v případě, že příkaz BACKUP T-SQL selže nebo je zrušený. Pokud zálohování proběhne úspěšně, tyto dočasné soubory se automaticky odeberou úložištěm objektů, aby vytvořily konečný záložní soubor. Někteří poskytovatelé úložiště kompatibilního se S3 zpracovávají dočasné soubory prostřednictvím systému pro sběr nevyžádaných souborů.
  • Celková délka adresy URL je omezená na 259 znaků. Celý řetězec se počítá v tomto omezení, včetně názvu konektoru s3:// . Využitelný limit je tedy 254 znaků. Doporučujeme ale držet se limitu 200 znaků, aby bylo možné zavést parametry dotazu.
  • Název přihlašovacích údajů SQL je omezený 128 znaky ve formátu UTF-16.
  • ID tajného klíče nesmí obsahovat : znak.

Styl cesty a styl virtuálního hostitele

Funkce zálohování do S3 podporuje zápis adresy URL buď ve stylu cesty, nebo ve stylu virtuálního hostitele.

Příklad stylu cesty: s3://<endpoint>:<port>/<bucket>/<backup_file_name>

Příklad virtuálního hostitele: s3://<bucket>.<domain>/<backup_file_name>

Příklady

Vytvoření přihlašovacích údajů

  • Název přihlašovacích údajů by měl poskytnout cestu k úložišti a v závislosti na platformě úložiště existuje několik standardů.
  • Identita by měla být 'S3 Access Key' vždy při použití konektoru S3.
  • ID přístupového klíče a ID tajného klíče nesmí obsahovat dvojtečku. ID přístupového klíče a ID tajného klíče je uživatel a heslo vytvořené v úložišti objektů kompatibilním s S3.
  • Jsou povoleny pouze alfanumerické hodnoty.
  • ID přístupového klíče musí mít správná oprávnění k úložišti objektů kompatibilním s S3.

Pomocí příkazu CREATE CREDENTIAL vytvořte přihlašovací údaje na úrovni serveru pro ověřování pomocí koncového bodu úložiště objektů kompatibilního s S3.

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 ale podporuje dva různé standardy adresy URL.

  • S3://<BUCKET_NAME>.S3.<REGION>.AMAZONAWS.COM/<FOLDER> (výchozí)
  • S3://S3.<REGION>.AMAZONAWS.COM/<BUCKET_NAME>/<FOLDER>

Existuje několik přístupů k úspěšnému vytvoření přihlašovacích údajů pro 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

Nebo:

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

Zálohování na adresu URL

Následující příklad provede úplné zálohování databáze do koncového bodu úložiště objektů, které se proloží napříč několika soubory:

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;

Obnovení z adresy URL

Následující příklad provede obnovení databáze z umístění koncového bodu úložiště objektů:

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;

Možnosti šifrování a komprese

Následující příklad ukazuje, jak zálohovat a obnovit AdventureWorks2022 databázi s šifrováním, MAXTRANSFERSIZE jako je 20 MB a komprese:

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

Použití oblasti pro zálohování a obnovení

Následující příklad ukazuje, jak zálohovat a obnovit AdventureWorks2022 databázi pomocí REGION_OPTIONS:

Oblast můžete parametrizovat v rámci každého BACKUP / RESTORE příkazu. Poznamenejte si řetězec oblasti specifické pro S3 v řetězci BACKUP_OPTIONS a RESTORE_OPTIONS, například '{"s3": {"region":"us-west-2"}}'. Výchozí oblast je us-east-1. Jednoduchý příklad:

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

Například:

-- 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