Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a: SQL Server 2022 (16.x)
Este artigo apresenta os conceitos, os requisitos e os componentes necessários para usar o armazenamento de objetos compatível com o S3 como um destino de backup. A funcionalidade de backup e restauração é conceitualmente semelhante a trabalhar com o Backup em URL do SQL Server para o Armazenamento de Blobs do Azure como um tipo de dispositivo de backup.
Para obter informações sobre as plataformas com suporte, confira Provedores de armazenamento de objetos compatível com o S3.
Visão geral
O SQL Server 2022 (16.x) introduz a integração do armazenamento de objetos à plataforma de dados, permitindo que você integre o SQL Server a um armazenamento de objetos compatível com o S3, além do Armazenamento do Azure. Para fornecer essa integração, o SQL Server tem suporte para um conector S3, que usa a API REST S3 para se conectar a qualquer provedor de armazenamento de objetos compatível com o S3. O SQL Server 2022 (16.x) estende a sintaxe BACKUP/RESTORE TO/FROM URL existente, adicionando suporte para o novo conector do S3 usando a API REST.
URLs que apontam para recursos compatíveis com S3 são prefixadas com s3:// para indicar que o conector do S3 está sendo usado. URLs começando com s3:// sempre pressupõem que o protocolo subjacente seja https.
Limitações de números de partes e de tamanho do arquivo
Para armazenar dados, o provedor de armazenamento de objetos compatível com o S3 deve dividir arquivos em vários blocos chamados partes, da mesma forma que os blobs de blocos no Armazenamento de Blobs do Azure.
Cada arquivo pode ser dividido em até 10 mil partes, e cada tamanho de parte varia de 5 MB a 20 MB. Essa faixa é controlada pelo comando T-SQL BACKUP por meio do parâmetro MAXTRANSFERSIZE. O valor padrão de MAXTRANSFERSIZE é 10 MB, portanto, o tamanho padrão de cada parte é de 10 MB. Embora esse valor especifique o tamanho máximo da transferência, ele não garante que cada parte enviada seja de 10 MB. O tamanho da parte é influenciado pela adjacência dos dados. Por exemplo, se houver 4 MB de dados adjacentes a 2 MB de dados, 6 MB serão enviados após atingirem a parte mínima de tamanho de 5 MB. Como alternativa, se houver 12 MB de dat adjacente, os dados até o tamanho máximo (10 MB) serão enviados e os 2 MB restantes serão enviados na próxima parte. O conector S3 sempre tenta enviar o tamanho máximo dos dados possíveis, mas nunca excede o MAXTRANSFERSIZE valor.
O tamanho máximo suportado de um único arquivo é o resultado de 10.000 partes * MAXTRANSFERSIZE. Se for necessário fazer backup de um arquivo maior, ele deverá ser dividido ou fracionado em até 64 URLs. O tamanho máximo final com suporte para um arquivo é de 10.000 partes * MAXTRANSFERSIZE * URLs.
Observação
O uso de COMPRESSION é necessário para alterar valores MAXTRANSFERSIZE.
Pré-requisitos para o ponto de extremidade do S3
O ponto de extremidade S3 deve ser configurado da seguinte maneira:
- O TLS deve ser configurado. Supõe-se que todas as conexões serão transmitidas com segurança por HTTPS, e não por HTTP. O ponto de extremidade é validado por um certificado instalado no host do sistema operacional do SQL Server.
- Credenciais criadas no armazenamento de objetos compatível com o S3 com permissões adequadas para executar a operação. O usuário e a senha criados na camada de armazenamento são nomeados como
Access Key IDeSecret Key ID. Você precisa de ambos para se autenticar no ponto de extremidade S3. - Pelo menos um bucket foi configurado. Buckets não podem ser criados ou configurados pelo SQL Server 2022 (16.x).
Segurança
Permissões de backup
Para conectar o SQL Server ao armazenamento de objetos compatível com o S3, dois conjuntos de permissões precisam ser estabelecidos, um no SQL Server e também na camada de armazenamento.
No SQL Server, a conta de usuário usada para emitir os comandos BACKUP ou RESTORE deve estar na função de banco de dados db_backupoperator com as permissões Alterar qualquer credencial.
Na camada de armazenamento:
- No AWS S3, crie uma função personalizada e indique especificamente qual API do S3 requer acesso. O backup e a restauração exigem estas permissões: ListBucket (procurar), PutObject (gravar, para backup).
- Em outros armazenamentos compatíveis com o S3, o usuário (
Access Key ID) deve ter permissões ListBucket e WriteOnly.
Restaurar permissões
Se o banco de dados que está sendo restaurado não existir, o usuário deverá ter CREATE DATABASE permissões para poder executar RESTORE. Se o banco de dados existir, as permissões RESTORE assumirão como padrão os membros das funções de servidor fixas sysadmin e dbcreator, e o proprietário (dbo) do banco de dados.
As permissões RESTORE são concedidas a funções nas quais as informações de associação estão sempre disponíveis para o servidor. Como a associação de função de banco de dados fixa só pode ser verificada quando o banco de dados está acessível e não danificado, o que nem sempre ocorre quando RESTORE é executado, os db_owner membros da função de banco de dados fixa não têm permissões RESTORE.
Na camada de armazenamento:
- No AWS S3, crie uma função personalizada e indique especificamente qual API do S3 requer acesso. O backup e a restauração exigem estas permissões: ListBucket (procurar), GetObject (ler, para restaurar).
- Em outros armazenamentos compatíveis com o S3, o usuário (
Access Key ID) deve ter permissões ListBucket e ReadOnly.
Recursos compatíveis
Visão geral de alto nível dos recursos com suporte para BACKUP e RESTORE:
- Um único arquivo de backup pode ter até 200.000 MiB por URL (com
MAXTRANSFERSIZEdefinido como 20 MB). - Os backups podem ser distribuídos por um máximo de 64 URLs.
- Há suporte para espelhamento, mas apenas entre URLs. Não há suporte para espelhamento usando URL e DISCO.
- A compactação é compatível e recomendada.
- Há suporte para criptografia.
- A restauração da URL com armazenamento de objetos compatível com S3 não tem limitação de tamanho.
- Quando você está restaurando um banco de dados, o
MAXTRANSFERSIZEvalor é determinado pelo valor atribuído durante a fase de backup. - AS URLs podem ser especificadas no formato de host virtual ou de estilo de caminho.
- Não há suporte para
WITH CREDENTIAL. - Há suporte para o
REGIONe o valor padrão éus-east-1. -
MAXTRANSFERSIZEvaria de 5 MB a 20 MB. 10 MB é o valor padrão para o conector do S3.
Argumentos com suporte para Backup
WITH opções |
Ponto de Extremidade de S3 | Observações |
|---|---|---|
BLOCKSIZE |
Yes | MAXTRANSFERSIZE determina o tamanho da Parte. |
BUFFERCOUNT |
Yes | |
COMPRESSION |
Yes | |
COPY_ONLY |
Yes | |
CREDENTIAL |
Yes | |
DESCRIPTION |
Yes | |
DIFFERENTIAL |
Yes | |
ENCRYPTION |
Yes | |
FILE_SNAPSHOT |
Não | |
MAXTRANSFERSIZE |
Yes | De 5 MB (5.242.880 Bytes) a 20 MB (20.971.520 Bytes), o valor padrão é de 10 MB (10.485.760 Bytes). |
MEDIADESCRIPTION |
Yes | |
MEDIANAME |
Yes | |
MIRROR TO |
Yes | Só funciona com outra URL, MIRROR com URL e DISK não tem suporte. |
NAME |
Yes | |
NOFORMAT / FORMAT |
Yes | |
NOINIT / INIT |
Não | Não há suporte para anexação. Para substituir um backup, use o WITH FORMAT. |
NO_CHECKSUM / CHECKSUM |
Yes | |
NO_TRUNCATE |
Yes | |
REGION |
Yes | O valor padrão é us-east-1. Deve ser usada com BACKUP_OPTIONS. |
STATS |
Yes |
Argumentos com suporte para restauração
WITH opções |
Ponto de Extremidade de S3 | Observações |
|---|---|---|
BLOCKSIZE |
Yes | MAXTRANSFERSIZE determina o tamanho da Parte. |
BUFFERCOUNT |
Não | |
CHECKSUM / NO_CHECKSUM |
Yes | |
CREDENTIAL |
Yes | |
ENABLE_BROKER / ERROR_BROKER_CONVERSATIONS / NEW_BROKER |
Yes | |
FILE |
Não | Não há suporte para nomes lógicos com RESTORE FROM URL. |
FILESTREAM |
Yes | |
KEEP_CDC |
Yes | |
KEEP_REPLICATION |
Yes | |
LOADHISTORY |
Yes | |
MAXTRANSFERSIZE |
Não | |
MEDIANAME |
Yes | |
MEDIAPASSWORD |
Não | Necessário para alguns backups feitos antes em versões antes do SQL Server 2012. |
MOVE |
Yes | |
PARTIAL |
Yes | |
PASSWORD |
Não | Necessário para alguns backups feitos antes em versões antes do SQL Server 2012. |
RECOVERY / NORECOVERY / STANDBY |
Yes | |
REGION |
Yes | O valor padrão é us-east-1. Deve ser usada com RESTORE_OPTIONS. |
REPLACE |
Yes | |
RESTART |
Yes | |
RESTRICTED_USER |
Yes | |
REWIND / NOREWIND |
Não | |
STATS |
Yes | |
STOP_ON_ERROR / CONTINUE_AFTER_ERROR |
Yes | |
STOPAT / STOPATMARK / STOPBEFOREMARK |
Yes | |
UNLOAD / NOUNLOAD |
Não |
Região
Seu provedor de armazenamento de objetos compatível com o S3 pode oferecer a capacidade de determinar uma região específica para o local do bucket. O uso desse parâmetro opcional pode fornecer mais flexibilidade, especificando a qual região esse bucket específico pertence. Esse parâmetro requer o uso de WITH junto com BACKUP_OPTIONS ou RESTORE_OPTIONS. Essas opções exigem que o valor seja declarado no formato JSON. Isso permite cenários em que um provedor de armazenamento compatível com o S3 pode ter a mesma URL universal, mas estar distribuído entre várias regiões. Nesse caso, o comando de backup ou restauração aponta para as regiões especificadas sem a necessidade de alterar a URL.
Se nenhum valor for declarado, us-east-1 será atribuído como padrão.
Exemplo de backup:
WITH BACKUP_OPTIONS = '{"s3": {"region":"us-west-1"}}'
Exemplo de restauração:
WITH RESTORE_OPTIONS = '{"s3": {"region":"us-west-1"}}'
Suporte para Linux
O SQL Server usa WinHttp para implementar o cliente das APIs REST do HTTP que ele usa. Ele depende do repositório de certificados do sistema operacional para validações dos certificados do TLS que estão sendo apresentados pelo ponto de extremidade http(s). No entanto, no SQL Server em Linux a AC deve ser colocada em um local predefinido para ser criado em /var/opt/mssql/security/ca-certificates; há suporte somente para os primeiros 50 certificados armazenados nesta pasta. A autoridade de certificação deve estar em vigor antes que o processo do SQL Server seja iniciado.
O SQL Server lê os certificados da pasta durante a inicialização e os adiciona ao repositório confiável.
Somente o superusuário poderá gravar na pasta, e o usuário mssql poderá ler.
Recursos sem suporte
- Não há suporte para backup em armazenamento de objetos compatível com S3 com uma URL
httpnão segura. Os clientes são responsáveis por configurar o host do S3 com uma URLhttps, e esse ponto de extremidade será validado por um certificado instalado no host do sistema operacional do SQL Server. - Não há suporte para fazer backup no armazenamento de objetos compatíveis com S3 no SQL Server Express e no SQL Server Express com edições de Serviços Avançados.
Limitações
Veja as seguintes limitações atuais de backup e restauração com o armazenamento de objetos compatível com o S3:
- Devido à limitação atual da API REST Padrão S3, os arquivos de dados temporários não confirmados criados no repositório de objetos compatíveis com S3 do cliente (devido a uma operação de carregamento de várias partes em andamento) enquanto o comando T-SQL de BACKUP estiver em execução, não serão removidos se houver falhas de backup. Esses blocos de dados não confirmados continuarão a persistir no armazenamento de objetos compatível com o S3 caso o comando T-SQL BACKUP falhe ou seja cancelado. Se o backup for bem-sucedido, esses arquivos temporários serão removidos automaticamente pelo armazenamento de objetos para formar o arquivo de backup final. Alguns provedores de armazenamento compatível com o S3 lidarão com arquivos temporários por meio do sistema coletor de lixo.
- O comprimento total da URL é limitado a 259 caracteres. A cadeia de caracteres completa é contada nessa limitação, incluindo o nome do conector
s3://. Consequentemente, o limite utilizável é de 254 caracteres. No entanto, recomendamos manter um limite de 200 caracteres para permitir a possível introdução de parâmetros de consulta. - O nome da credencial do SQL é limitado a 128 caracteres no formato UTF-16.
- O ID da chave secreta não deve ter o caractere
:.
Estilo de caminho e estilo de host virtual
O backup no S3 permite que a URL seja escrita no estilo de caminho ou no estilo de host virtual.
Exemplo de estilo de caminho: s3://<endpoint>:<port>/<bucket>/<backup_file_name>
Exemplo de host virtual: s3://<bucket>.<domain>/<backup_file_name>
Exemplos
Criar credencial
- O nome da credencial deve fornecer o caminho de armazenamento, e há vários padrões para isso, dependendo da plataforma de armazenamento.
- A IDENTIDADE deve ser sempre
'S3 Access Key'ao usar o conector do S3. - A ID da Chave de Acesso e a ID da Chave Secreta não devem conter dois-pontos. O ID da chave de acesso e o ID da chave secreta é o usuário e a senha criados no armazenamento de objetos compatível com o S3.
- Somente valores alfanuméricos são permitidos.
- O ID da chave de acesso deve ter permissões adequadas no armazenamento de objetos compatível com o S3.
Use CREATE CREDENTIAL para criar uma credencial de nível de servidor para autenticação com o ponto de extremidade de armazenamento de objetos compatível com o 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;
No entanto, o AWS S3 oferece suporte a dois padrões diferentes de URL.
-
S3://<BUCKET_NAME>.S3.<REGION>.AMAZONAWS.COM/<FOLDER>(padrão) S3://S3.<REGION>.AMAZONAWS.COM/<BUCKET_NAME>/<FOLDER>
Há várias abordagens para criar uma credencial para o AWS S3 com êxito.
-- 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
Ou,
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
Fazer backup na URL
O exemplo a seguir executa um backup completo do banco de dados no ponto de extremidade de armazenamento de objetos, distribuído em vários arquivos:
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;
Restauração a partir da URL
O exemplo a seguir executa uma restauração de banco de dados do local do ponto de extremidade de armazenamento de objetos:
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;
Opções para criptografia e compactação
O seguinte exemplo mostra como fazer o backup e a restauração do banco de dados AdventureWorks2022 com criptografia, MAXTRANSFERSIZE como 20 MB e compactação:
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
Usar região para backup e restauração
O seguinte exemplo mostra como fazer o backup e a restauração do banco de dados AdventureWorks2022 usando REGION_OPTIONS:
Você pode parametrizar a região dentro de cada comando BACKUP / RESTORE. Observe a cadeia de caracteres de região específica do S3 em BACKUP_OPTIONS e RESTORE_OPTIONS, por exemplo, '{"s3": {"region":"us-west-2"}}'. A região padrão é us-east-1. Um exemplo simples:
-- 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"}}'
Por exemplo:
-- 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
Conteúdo relacionado
- Melhores práticas e solução de problemas de backup em URL do SQL Server para armazenamento de objetos compatível com o S3
- Melhores práticas e solução de problemas de backup em URL do SQL Server para Armazenamento de Blobs do Microsoft Azure
- CREATE CERTIFICATE (Transact-SQL)
- Backup do SQL Server na URL para o Armazenamento de Blobs do Microsoft Azure