Sdílet prostřednictvím


Zálohování serveru SQL na URL do úložiště objektů kompatibilního se S3: osvědčené postupy a řešení potíží

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

Tento článek obsahuje osvědčené postupy a tipy pro řešení potíží se zálohováním a obnovením SQL Serveru do úložiště objektů kompatibilních s S3.

Další informace o použití služby Azure Blob Storage pro operace zálohování nebo obnovení SQL Serveru najdete v tématu:

Řešení potíží a běžné příčiny chyb

Následuje několik rychlých způsobů řešení chyb při zálohování nebo obnovení z úložiště objektů kompatibilního s S3. Aby se předešlo chybám způsobeným nepodporovanými možnostmi nebo omezeními, přečtěte si téma zálohování a obnovení SQL s úložištěm objektů kompatibilního se S3.

Ujistěte se, že je adresa URL ve správném formátu.

Tady je příklad správně vytvořené adresy URL virtuálního hostitele při vydávání zálohovacího dotazu T-SQL, například takto:

BACKUP DATABASE AdventureWorks2022
TO URL = 's3://<bucketName>.<virtualHost>/<pathToBackup>/<backupFileName>' 

Nebo pro styl cesty URL:

BACKUP DATABASE AdventureWorks2022
TO URL = 's3://<domainName>/<bucketName>/<pathToBackup>/<backupFileName>';

Prohlédnout si v URL:

  1. Adresa URL začíná schématem s3://.

  2. Virtuální hostitel úložiště S3 <virtualHost> nebo doména serveru <domainName> existuje a běží pomocí protokolu HTTPS. Koncový bod ověří certifikační autorita nainstalovaná na hostiteli operačního systému SQL Serveru.

  3. <bucketName> je název tohoto kontejneru, ve kterém se zapisuje záloha. Musí se vytvořit před spuštěním zálohování T-SQL. Zálohování T-SQL nevytvoří kontejner pro zákazníka. Pokud například uživatel předem nevytváří kontejner nonExistingBucket a spustí příkaz T-SQL následujícím způsobem:

    BACKUP DATABASE AdventureWorks2022
    TO URL = 's3://<your-endpoint>/nonExistingBucket/AdventureWorks2022.bak';
    

    Adresa URL, která není správně vytvořena, může vrátit následující:

    Msg 3201, Level 16, State 1, Line 50
    Cannot open backup device 's3://<your-endpoint>/nonExistingBucket/AdventureWorks2022.bak'. Operating system error 50(The request is not supported.).
    Msg 3013, Level 16, State 1, Line 50
    BACKUP DATABASE is terminating abnormally.
    
  4. Před spuštěním zálohování T-SQL nemusí existovat <pathToBackup>. Vytvoří se automaticky na serveru úložiště. Pokud například uživatel předem vytvoří kontejner existingBucket, a ne cestu 'existingBucket/sqlbackups', bude se stále úspěšně spouštět následující:

BACKUP DATABASE AdventureWorks2022
TO URL =  's3://<your-endpoint>/existingBucket/sqlbackups/AdventureWorks2022.bak';

Vytvoření přihlašovacích údajů na úrovni serveru před spuštěním zálohování nebo obnovení

Před spuštěním zálohování/obnovení Transact-SQL dotazů do úložiště kompatibilního s S3 je nutné vytvořit přihlašovací údaje na úrovni serveru. Tyto přihlašovací údaje musí obsahovat přístupový klíč a tajný klíč nastavený zákazníky na svém serveru úložiště objektů kompatibilním s S3 před vydáním dotazů zálohování/obnovení.

Příklad přihlašovacích údajů, které je potřeba vytvořit pro adresu URL: s3://<your-endpoint>/myS3Bucket/sqlbackups/AdventureWorks2022.bak by bylo následující:

CREATE CREDENTIAL [s3://<your-endpoint>/myS3Bucket/sqlbackups/AdventureWorks2022.bak]
WITH IDENTITY = 'S3 Access Key',
SECRET = '<AccessKeyID>:<SecretKeyID>';

Ve tomto výroku <AccessKeyID> nesmí obsahovat znak :. Pokud se přihlašovací údaje před spuštěním dotazu zálohování nebo obnovení nevytvoří, zobrazí se uživateli následující chybová zpráva:

Msg 3201, Level 16, State 1, Line 50
Cannot open backup device 's3://<your-endpoint>/myS3Bucket/sqlbackups/AdventureWorks2022.bak'. Operating system error 50(The request is not supported.).
Msg 3013, Level 16, State 1, Line 50
BACKUP DATABASE is terminating abnormally.

Název přihlašovacích údajů se nevyžaduje, aby odpovídal přesné cestě URL. Tady je příklad, jak bude vyhledávání přihlašovacích údajů fungovat. Pokud potřebujeme dotazovat cestu s3://10.193.16.183:9000/myS3Bucket/sqlbackups/AdventureWorks2022.bak, zkusí se následující názvy přihlašovacích údajů:

  1. s3://10.193.16.183:8787/myS3Bucket/sqlbackups/AdventureWorks2022.bak
  2. s3://10.193.16.183:8787/myS3Bucket/sqlbackups
  3. s3://10.193.16.183:8787/myS3Bucket

Pokud existuje více přihlašovacích údajů odpovídajících vyhledávání, například konkrétnější s3://10.193.16.183:8787/myS3Bucket/sqlbackups a obecnější s3://10.193.16.183:8787/myS3Bucket, zvolte nejvýraznější. To umožňuje nastavit podrobnější řízení přístupu na úrovni adresáře pro to, k jakým složkám je možné přistupovat z SQL Serveru.

Nepodporovaná možnost FILE_SNAPSHOT

V současné době není možnost BACKUP TSQL FILE_SNAPSHOT podporována pro úložiště objektů kompatibilní s S3. Toto je možnost specifická pro Azure Blob Storage.

Pokud uživatel spustí například následující Transact-SQL:

BACKUP DATABASE AdventureWorks2022
TO URL = 's3://<your-endpoint>/myS3Bucket/sqlbackups/AdventureWorks2022.bak'
WITH FILE_SNAPSHOT;

Vrátí se následující chybová zpráva:

Msg 3073, Level 16, State 1, Line 62
The option WITH FILE_SNAPSHOT is only permitted if all database files are in Azure Storage.
Msg 3013, Level 16, State 1, Line 62
BACKUP DATABASE is terminating abnormally.

Pruh zálohování přesahující 100 GB

V současné době velikost jednoho záložního souboru vytvořeného zákazníky v úložišti objektů kompatibilních s S3 během zálohování nesmí překročit 100 GB na soubor pomocí výchozího MAXTRANSFERSIZE. Pokud pásmování záloh přesáhne 100 GB, příkaz zálohovací syntaxe T-SQL vyvolá následující chybovou zprávu:

Msg 3202, Level 16, State 1, Line 161
Write on 's3://<endpoint>:<port>/<bucket>/<path>/<db_name>.bak' failed: 87(The parameter is incorrect.)
Msg 3013, Level 16, State 1, Line 161
BACKUP DATABASE is terminating abnormally.

Aktuální pokyny pro zálohování velkých databází uživatelů používají pro zálohování databáze několik pruhů, z nichž každá z povolených velikostí je menší nebo rovna 100 GB. Backup T-SQL podporuje rozdělení až na 64 adres URL, například:

BACKUP DATABASE AdventureWorks2022
TO URL = 's3://<endpoint>:<port>/<bucket>/<path>/<db_file>_1.bak',
URL = 's3://<endpoint>:<port>/<bucket>/<path>/<db_file>_2.bak';

Alternativní možností pro uživatele je použít možnost KOMPRESE:

BACKUP DATABASE AdventureWorks2022
TO URL = 's3://<your-endpoint>/myS3Bucket/sqlbackups/AdventureWorks2022.bak'
WITH COMPRESSION;

Maximální délka adresy URL

Celková délka adresy URL je omezená na 259 bajtů modulu zálohování a obnovení. To znamená, že s3://hostname/objectkey nesmí překročit 259 znaků. Když pomineme s3://, uživatel může zadat délku cesty (název hostitele + klíč objektu) tak, aby byla 259 – 5 = 254 znaků. Projděte si zálohování SQL Serveru na adresu URL – SQL Server. Příkaz syntaxe zálohování T-SQL vyvolá následující chybovou zprávu:

SQL Server has a maximum limit of 259 characters for a backup device name. The BACKUP TO URL consumes 36 characters for the required elements used to specify the URL - 'https://.blob.core.windows.net//.bak', leaving 223 characters for account, container, and blob names put together'

Oprava časového posunu hodin

Úložiště S3 může odmítnout připojení a vrátit zpět sql Server chybu InvalidSignatureException, kdykoli je časový rozdíl mezi hostitelem SQL a serverem S3 větší než 15 minut. Na SQL Serveru se zobrazí takto:

Msg 3201, Level 16, State 1, Line 28
Cannot open backup device '<path>'. Operating system error 5(Access is denied.).
Msg 3013, Level 16, State 1, Line 28
BACKUP DATABASE is terminating abnormally.

Podpora SQL Serveru v 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 koncovým bodem HTTP.. SQL Server v Linuxu však deleguje ověření certifikátu na SQLPAL, který ověřuje certifikáty HTTPS koncových bodů pomocí certifikátu dodaného s pal. Certifikáty podepsané svým držitelem se proto v Linuxu nedají použít k ověření HTTPS.

Během procesu zálohování nebo obnovení se v systému Linux zobrazí následující chybová zpráva:

Msg 3201, Level 16, State 1, Line 20
Cannot open backup device 's3://<endpoint>/<bucket>/testingDB.bak'. Operating system error 12175(failed to retrieve text for this error. Reason: 15105).
Msg 3013, Level 16, State 1, Line 20
BACKUP DATABASE is terminating abnormally.

Abyste tento problém překonali, je nutné vytvořit následující předdefinované umístění: /var/opt/mssql/security/ca-certificates. Certifikáty podepsané samotným držitelem nebo certifikáty, které nejsou součástí dodávky s PAL, umístěte do tohoto umístění. SQL Server načte certifikáty ze složky během spuštění a přidá je do úložiště důvěryhodnosti PAL.

V tomto umístění může být uloženo až 50 souborů, pokud se složka nevytvořila při spuštění SQL Serveru, zobrazí se protokol chyb SQL Serveru:

2022-02-05 00:32:10.86 Server      Installing Client TLS certificates to the store.
2022-02-05 00:32:10.88 Server      Error searching first file in /var/opt/mssql/security/ca-certificates: 3(The system cannot find the path specified.)

Zámek objektu – uchovávání pro odstranění není podporováno.

Zálohování SQL Serveru do úložiště kompatibilního s objekty S3 nepodporuje zámek objektu, který se označuje také jako funkce zadržení smazání. Zámek objektu zabraňuje odstranění nebo přepsání souborů po dobu trvání doby uchovávání.

Umístění kontejneru a složky, na které cílí vaše operace zálohování, nesmí mít povolený zámek objektu. Pokud je tato funkce povolená a nakonfigurovaná v úložišti objektů kompatibilním s S3, operace zálohování selže s následující zprávou:

Msg 3202, Level 16, State 1, Line 13
Write on 's3://<your-endpoint>/nonExistingBucket/AdventureWorks2022.bak' failed: 87 (The parameter is incorrect).
Msg 3013, Level 16, State 1, Line 13
BACKUP DATABASE is terminating abnormally.