Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a: SQL Server 2022 (16.x)
Este artigo apresenta os conceitos, requisitos e componentes necessários para usar o armazenamento de objetos compatível com o S3 como destino de backup. A funcionalidade de backup e restauração é conceptualmente semelhante a utilizar o backup do SQL Server para URL para Armazenamento de Blobs do Azure como tipo de dispositivo de backup.
Para obter informações sobre plataformas suportadas, consulte provedores de armazenamento de objetos compatíveis com o S3
Visão geral
O SQL Server 2022 (16.x) introduz a integração de armazenamento de objetos à plataforma de dados, permitindo que você integre o SQL Server com o armazenamento de objetos compatível com o S3, além do Armazenamento do Azure. Para fornecer essa integração, o SQL Server dá suporte a um conector S3, que usa a API REST do 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 S3 usando a API REST.
As URLs que apontam para recursos compatíveis com o S3 são prefixadas com s3:// para indicar que o conector do S3 está a ser usado. Os URLs que começam com s3:// sempre assumem que o protocolo subjacente é https.
Números de peça e limitações de tamanho de arquivo
Para armazenar dados, o provedor de armazenamento de objetos compatível com o S3 deve dividir arquivos em vários blocos chamados partes, semelhante aos blobs de bloco no Armazenamento de Blobs do Azure.
Cada arquivo pode ser dividido até 10.000 partes, cada tamanho de peça varia de 5 MB a 20 MB, este intervalo é controlado pelo comando T-SQL BACKUP através do parâmetro MAXTRANSFERSIZE. O valor padrão de MAXTRANSFERSIZE é 10 MB, portanto, o tamanho padrão de cada parte é 10 MB. Embora esse valor especifique o tamanho máximo de transferência, ele não garante que cada parte enviada tenha 10 MB. O tamanho da peça é 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 depois de atingir a parte de tamanho mínimo de 5 MB. Alternativamente, se houver 12 MB de dados adjacentes, os dados até o tamanho máximo (10 MB) são enviados, e os 2 MB restantes são enviados na próxima parte. O conector S3 sempre tenta enviar o tamanho máximo de dados possível, mas nunca excede o MAXTRANSFERSIZE valor.
O tamanho máximo suportado de um único arquivo é o resultado de 10.000 partes * MAXTRANSFERSIZE. Caso seja necessário fazer backup de um arquivo maior, este deve ser dividido em até 64 URLs. O tamanho máximo final suportado de um ficheiro é de 10.000 partes * MAXTRANSFERSIZE * URLs.
Observação
O uso de COMPRESSÃO é necessário para alterar MAXTRANSFERSIZE valores.
Pré-requisitos para o endpoint do S3
O ponto de extremidade do S3 deve ser configurado da seguinte maneira:
- O TLS deve ser configurado. Presume-se que todas as conexões serão transmitidas com segurança por HTTPS e não HTTP. O ponto de extremidade é validado por um certificado instalado no host do sistema operacional 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 chamados de
Access Key IDeSecret Key ID. É necessário ambos para autenticar no endpoint do S3. - Pelo menos um bucket foi configurado. Não é possível criar ou configurar buckets a partir do 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 comandos BACKUP ou RESTORE deve estar na função de banco de dados db_backupoperator com permissões de 'Alterar quaisquer credenciais'.
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 (Browse), PutObject (Write - for backup).
- Em outro armazenamento compatível com o S3, o usuário (
Access Key ID) deve ter as 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 a RESTAURAÇÃO. Se o banco de dados existir, as permissões RESTORE são por padrão atribuídas aos membros das funções de servidor fixas sysadmin e dbcreator, bem como ao proprietário (dbo) do banco de dados.
As permissões RESTORE são dadas a funções nas quais as informações de associação estão sempre prontamente disponíveis para o servidor. Como a associação à função de banco de dados fixa pode ser verificada somente quando o banco de dados está acessível e sem danos, o que nem sempre é o caso 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 (Browse), GetObject (Read - for restore).
- Em outro armazenamento compatível com o S3, o usuário (
Access Key ID) deve ter as permissões ListBucket e ReadOnly .
Funcionalidades suportadas
Visão geral de alto nível dos recursos suportados para BACKUP e RESTORE:
- Um único arquivo de backup pode ter até 200.000 MiB por URL (com
MAXTRANSFERSIZEdefinido para 20 MB). - Os backups podem ser distribuídos em um máximo de 64 URLs.
- O espelhamento é suportado, mas apenas entre URLs. Não há suporte para espelhamento usando URL e DISK.
- A compactação é suportada e recomendada.
- A encriptação é suportada.
- A restauração a partir de URL com armazenamento de objetos compatível com o S3 não tem limitação de tamanho.
- Quando você está restaurando um banco de dados, o
MAXTRANSFERSIZEé determinado pelo valor atribuído durante a fase de backup. - As URLs podem ser especificadas no formato de host virtual ou estilo de caminho.
-
WITH CREDENTIALestá suportado. -
REGIONé suportado e o valor padrão éus-east-1. -
MAXTRANSFERSIZEvaria de 5 MB a 20 MB. 10 MB é o valor padrão para o conector S3.
Argumentos suportados para backup
WITH Opções |
Ponto final S3 | Observações |
|---|---|---|
BLOCKSIZE |
Yes |
MAXTRANSFERSIZE determina o tamanho da peça. |
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 é 10 MB (10.485.760 Bytes). |
MEDIADESCRIPTION |
Yes | |
MEDIANAME |
Yes | |
MIRROR TO |
Yes | Só funciona com outro URL, MIRROR com URL e DISK não é suportado. |
NAME |
Yes | |
NOFORMAT / FORMAT |
Yes | |
NOINIT / INIT |
Não | Não é suportada a adição de elementos. Para substituir um backup, use WITH FORMAT. |
NO_CHECKSUM / CHECKSUM |
Yes | |
NO_TRUNCATE |
Yes | |
REGION |
Yes | O valor predefinido é us-east-1. Deve ser utilizado com BACKUP_OPTIONS. |
STATS |
Yes |
Argumentos suportados para restauração
WITH Opções |
Ponto final S3 | Observações |
|---|---|---|
BLOCKSIZE |
Yes |
MAXTRANSFERSIZE determina o tamanho da peça. |
BUFFERCOUNT |
Não | |
CHECKSUM / NO_CHECKSUM |
Yes | |
CREDENTIAL |
Yes | |
ENABLE_BROKER / ERROR_BROKER_CONVERSATIONS / NEW_BROKER |
Yes | |
FILE |
Não | Nomes lógicos não suportados 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 em versões anteriores ao SQL Server 2012. |
MOVE |
Yes | |
PARTIAL |
Yes | |
PASSWORD |
Não | Necessário para alguns backups feitos em versões anteriores ao SQL Server 2012. |
RECOVERY / NORECOVERY / STANDBY |
Yes | |
REGION |
Yes | O valor predefinido é us-east-1. Deve ser utilizado 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. Este parâmetro requer o uso de WITH em conjunto com ou 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 ser distribuído em várias regiões. Nesse caso, o comando backup ou restore 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 Linux
O SQL Server usa WinHttp para implementar o cliente de APIs HTTP REST que ele usa. Ele depende do armazenamento de certificados do sistema operativo para a validação dos certificados TLS apresentados pelo http(s) endpoint. No entanto, no SQL Server no Linux, a CA deve ser colocada num local predefinido que deve ser criado em /var/opt/mssql/security/ca-certificates; apenas os primeiros 50 certificados podem ser armazenados nesta pasta. A AC deve estar configurada antes de o processo do SQL Server ser iniciado.
O SQL Server lê os certificados da pasta durante a inicialização e os adiciona ao repositório confiável.
Apenas o superusuário deve poder escrever na pasta, enquanto o usuário mssql deve ter permissão para ler.
Funcionalidades não suportadas
- Não há suporte para backup em armazenamento de objetos compatível com o S3 com uma URL não segura
http. Os clientes são responsáveis por configurar o seu host S3 com um URLhttps, e esse endpoint é validado por um certificado instalado no host do sistema operativo do SQL Server. - Não há suporte para backup em armazenamento de objetos compatível com o S3 nas edições SQL Server Express e SQL Server Express com Advanced Services.
Limitações
A seguir estão as limitações atuais de backup e restauração com armazenamento de objetos compatível com S3:
- Devido à limitação atual da API REST padrão do S3, os arquivos de dados temporários não confirmados criados no armazenamento de objetos compatíveis com o S3 do cliente (devido a uma operação de carregamento de várias partes em andamento) enquanto o comando BACKUP T-SQL está em execução, não são removidos se houver falhas de backup. Esses blocos de dados não confirmados continuam a persistir no armazenamento de objetos compatíveis com o S3 caso o comando BACKUP T-SQL 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íveis com o S3 lidam com arquivos temporários por meio de seu sistema coletor de lixo.
- O comprimento total do URL é limitado a 259 caracteres. A cadeia de caracteres completa é contada nesta limitação, incluindo o nome do
s3://conector. Assim, 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 SQL é limitado por 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 suporta a URL a ser 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 S3. - O ID da Chave de Acesso e o da Chave Secreta não devem conter dois pontos. ID de chave de acesso e ID de chave secreta é o usuário e a senha criados no armazenamento de objetos compatível com o S3.
- Apenas são permitidos valores alfanuméricos.
- O ID da chave de acesso deve ter permissões adequadas no armazenamento de objetos compatível com o S3.
Utilize CREATE CREDENTIAL para criar uma credencial ao nível do servidor para autenticação com o ponto de extremidade de armazenamento de objetos suportado pelo 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 com êxito uma credencial para o 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
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 no URL
O exemplo a seguir executa um backup completo da base de dados para o endpoint de armazenamento de objetos, distribuído uniformemente por vários ficheiros:
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;
Restaurar a partir do URL
O exemplo a seguir executa uma restauração de banco de dados a partir 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 de encriptação e compressão
O exemplo a seguir mostra como fazer backup e restaurar o AdventureWorks2025 banco de dados 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 a região para backup e restauração
O exemplo a seguir mostra como fazer backup e restaurar o AdventureWorks2025 banco de dados usando REGION_OPTIONS:
Você pode parametrizar a região dentro de cada BACKUP / RESTORE comando. Observe a cadeia de caracteres específica da região 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
- Backup do SQL Server para URL sobre práticas recomendadas para armazenamento de objetos compatível com S3 e solução de problemas
- backup do SQL Server para URL do Armazenamento de Blobs do Microsoft Azure: práticas recomendadas e solução de problemas
- CRIAR CERTIFICADO (Transact-SQL)
- Backup do SQL Server para URL do Armazenamento de Blob do Microsoft Azure