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 inclui práticas recomendadas e dicas de solução de problemas para backup e restaurações do SQL Server para armazenamento de objetos compatível com o S3.
Para obter mais informações sobre como usar o Armazenamento de Blob do Azure para operações de backup ou restauração do SQL Server, consulte:
- Backup e restauração do SQL Server com armazenamento de objetos compatível com S3
- backup do SQL Server para URL de armazenamento de objeto compatível com o S3
Solução de problemas e causas de erro comuns
A seguir estão algumas maneiras rápidas de solucionar erros ao fazer backup ou restaurar a partir do armazenamento de objetos compatível com o S3. Para evitar erros devido a opções ou limitações sem suporte, consulte Backup e Restauração de SQL com Armazenamento de Objetos Compatível com o S3.
Garantir um URL formado corretamente
Aqui está um exemplo de uma URL de host virtual formada corretamente ao emitir uma consulta de backup T-SQL, como a seguinte:
BACKUP DATABASE AdventureWorks2022
TO URL = 's3://<bucketName>.<virtualHost>/<pathToBackup>/<backupFileName>'
Ou para o estilo de caminho de URL:
BACKUP DATABASE AdventureWorks2022
TO URL = 's3://<domainName>/<bucketName>/<pathToBackup>/<backupFileName>';
Revisão no URL:
A URL começa com o esquema
s3://
.O host virtual de armazenamento S3
<virtualHost>
ou o domínio do servidor<domainName>
existe e está em execução usando HTTPS. O ponto de extremidade será validado por uma autoridade de certificação (CA) instalada no host do sistema operativo do SQL Server.<bucketName>
é o nome desse bucket onde o backup é gravado. Isso deve ser criado antes de executar o T-SQL de backup. O T-SQL de backup não cria o bucket para o cliente. Por exemplo, se o usuário não criar o bucket 'nonExistingBucket' com antecedência e executar uma instrução T-SQL da seguinte maneira:BACKUP DATABASE AdventureWorks2022 TO URL = 's3://<your-endpoint>/nonExistingBucket/AdventureWorks2022.bak';
Uma URL que não foi formada corretamente pode retornar o seguinte:
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.
O
<pathToBackup>
não precisa existir antes de executar o backup T-SQL. Ele é criado no servidor de armazenamento automaticamente. Por exemplo, se o usuário criar o bucket 'existingBucket' de antemão e não o caminho'existingBucket/sqlbackups'
, o seguinte ainda será executado com êxito:
BACKUP DATABASE AdventureWorks2022
TO URL = 's3://<your-endpoint>/existingBucket/sqlbackups/AdventureWorks2022.bak';
Crie uma credencial no nível do servidor antes de executar o backup/restauração
Antes de executar consultas de backup/restauração Transact-SQL para armazenamento compatível com o S3, você deve criar uma credencial no nível do servidor. Essa credencial precisa conter a chave de acesso e a chave secreta configuradas pelos clientes em seu servidor de armazenamento de objetos compatível com o S3 antes de emitir consultas de backup/restauração.
Um exemplo de uma credencial que precisa ser criada para URL: s3://<your-endpoint>/myS3Bucket/sqlbackups/AdventureWorks2022.bak
seria o seguinte:
CREATE CREDENTIAL [s3://<your-endpoint>/myS3Bucket/sqlbackups/AdventureWorks2022.bak]
WITH IDENTITY = 'S3 Access Key',
SECRET = '<AccessKeyID>:<SecretKeyID>';
Nesta instrução <AccessKeyID>
não pode conter um caractere :
. Se a credencial não for criada antes de executar a consulta de backup/restauração, o usuário verá a seguinte mensagem de erro:
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.
O nome da credencial não é necessário para corresponder ao caminho exato da URL. Aqui está um exemplo de como a pesquisa de credenciais funcionará. Se precisarmos consultar o caminho s3://10.193.16.183:9000/myS3Bucket/sqlbackups/AdventureWorks2022.bak
, os seguintes nomes de credenciais serão tentados:
s3://10.193.16.183:8787/myS3Bucket/sqlbackups/AdventureWorks2022.bak
s3://10.193.16.183:8787/myS3Bucket/sqlbackups
s3://10.193.16.183:8787/myS3Bucket
Se houver várias credenciais correspondentes à pesquisa, como s3://10.193.16.183:8787/myS3Bucket/sqlbackups
mais específicas e s3://10.193.16.183:8787/myS3Bucket
mais genéricas, escolha a mais específica. Isso permite que você configure um controle de acesso mais granular no nível de diretório para quais pastas podem ser acessadas a partir do SQL Server.
Opção não suportada FILE_SNAPSHOT
Atualmente, a opção BACKUP TSQL FILE_SNAPSHOT não é suportada para armazenamento de objetos compatíveis com o S3. Esta é uma opção específica do Armazenamento de Blobs do Azure.
Se o usuário executar o seguinte Transact-SQL por exemplo:
BACKUP DATABASE AdventureWorks2022
TO URL = 's3://<your-endpoint>/myS3Bucket/sqlbackups/AdventureWorks2022.bak'
WITH FILE_SNAPSHOT;
A seguinte mensagem de erro é retornada:
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.
Faixa de backup superior a 100 GB
Atualmente, o tamanho de um único arquivo de backup criado por clientes no armazenamento de objetos compatível com o S3 durante um backup não pode exceder 100 GB por arquivo, usando o MAXTRANSFERSIZE
padrão . Se a faixa de backup exceder 100 GB, a instrução de sintaxe T-SQL de backup apresentar a seguinte mensagem de erro:
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.
A orientação atual para o backup de bancos de dados grandes do usuário é usar várias faixas para o backup do banco de dados, cada uma com tamanhos permitidos menores ou iguais a 100 GB. O BACKUP T-SQL suporta striping de até 64 URLs, por exemplo:
BACKUP DATABASE AdventureWorks2022
TO URL = 's3://<endpoint>:<port>/<bucket>/<path>/<db_file>_1.bak',
URL = 's3://<endpoint>:<port>/<bucket>/<path>/<db_file>_2.bak';
Uma opção alternativa para os utilizadores é utilizar a opção «COMPRESSÃO»:
BACKUP DATABASE AdventureWorks2022
TO URL = 's3://<your-endpoint>/myS3Bucket/sqlbackups/AdventureWorks2022.bak'
WITH COMPRESSION;
Comprimento máximo do URL
O comprimento total da URL é limitado a 259 bytes pelo mecanismo de Backup e Restauração. Isso significa que s3://hostname/objectkey
não deve exceder 259 caracteres. Deixando de lado s3://
o usuário pode inserir o comprimento do caminho (nome do host + chave do objeto) para ser 259 – 5 = 254 caracteres. Consulte Backup do SQL Server para o URL - SQL Server. A instrução de sintaxe T-SQL de backup lança a seguinte mensagem de erro:
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'
Correção de desvio do relógio
O armazenamento do S3 pode rejeitar a conexão, dando um erro "InvalidSignatureException" de volta ao SQL Server sempre que a diferença de tempo entre o SQL Host e o servidor S3 for maior que 15 minutos. No SQL Server ele mostra como:
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.
Suporte ao SQL Server no Linux
O SQL Server usa WinHttp
para implementar o cliente de APIs HTTP REST que ele usa. Depende do armazenamento de certificados do sistema operativo para a validação dos certificados TLS apresentados pelo ponto de extremidade HTTP(s). No entanto, o SQL Server no Linux delega a validação do certificado ao SQLPAL, que valida os certificados HTTPS dos pontos de extremidade com o certificado fornecido com o PAL. Assim, os certificados autoassinados fornecidos pelo cliente não podem ser usados no Linux para validação HTTPS.
Durante o backup/restauração, o cliente recebe a seguinte mensagem de erro no Linux:
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.
Para superar esse problema, o seguinte local predefinido deve ser criado: /var/opt/mssql/security/ca-certificates
. Coloque certificados autoassinados ou certificados não enviados com PAL neste local. O SQL Server lê os certificados da pasta durante a inicialização e os adiciona ao repositório confiável PAL.
Até 50 arquivos podem ser armazenados neste local, se a pasta não for criada, quando o SQL Server for iniciado, o log de erros do SQL Server mostrará:
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.)
Bloqueio de objeto - a retenção de exclusão não é suportada
O backup do SQL Server para o recurso de armazenamento de objetos compatível com o S3 não oferece suporte ao Bloqueio de Objeto, também chamado de recurso de Retenção de Exclusão. O Bloqueio de Objeto impede que os arquivos sejam excluídos ou substituídos durante o período de retenção.
O bucket e o local da pasta visados pela operação de backup não devem ter o Bloqueio de Objeto habilitado. Se esse recurso estiver habilitado e configurado no armazenamento de objetos compatível com o S3, a operação de backup falhará com a seguinte mensagem:
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.
Conteúdo relacionado
- Backup e restauração do SQL Server com armazenamento de objetos compatíveis com S3
- backup do SQL Server para URL para de armazenamento de objetos compatíveis com o S3
- BACKUP (Transact-SQL)
- RESTORE (Transact-SQL)