Estou executando um SQL 2014 corrigido tentando fazer backup de um banco de dados em um de nossos BLOBs de armazenamento do Azure, usando:
BACKUP DATABASE [DB]
TO URL = N'https://storage.blob.core.windows.net/server-mssqlserver/DB.bak'
WITH CREDENTIAL = N'AzureCredential'
,NOFORMAT
,NOINIT
,NAME = N'DBA_DB-Full Database Backup'
,NOSKIP
,NOREWIND
,NOUNLOAD
,COMPRESSION
,STATS = 5
GO
mas a consulta gera o seguinte erro:
Msg 3292, Level 16, State 9, Line 1
Ocorreu uma falha ao tentar executar Backup ou Restauração com um dispositivo de URL especificado. Consulte o Log de Eventos do Windows para obter detalhes.
Msg 3013, Level 16, State 1, Line 1
BACKUP DATABASE está terminando de forma anormal.
A verificação dos logs de eventos do servidor mostra o erro real como:
SQLVDI: Loc=IdentifySQLServer. Desc=MSSQLSERVER. ErrorCode=(5)Acesso negado.
. Processo=4668. Tópico=6596. Cliente. Instância=MSSQLSERVER. VD=.
Certifiquei-me de que a conta do serviço SQL Server Agent tenha a política Criar objetos globais e também verifiquei se o serviço SQL VSS Writer está sendo executado na conta Sistema Local . O erro continua acontecendo!
Existe algo que eu possa fazer para corrigi-lo ou apenas registrar algumas mensagens de erro mais detalhadas do que o "SQLVDI: Loc=IdentifySQLServer" acima?
Caramba, esta é uma daquelas coisas de "não faço ideia de como consertei".
Antes de almoçar, eu poderia gerar de forma confiável o erro em questão executando o T-SQL fornecido, mas quando voltei do almoço, o comando BACKUP foi concluído bem!
A principal coisa que me lembro de ter mudado foi no lado do Azure , onde criei um SAS (Shared Access Signature) .
Isso supostamente não é necessário para o SQL 2014, pois ele usa uma credencial real do Azure para se conectar ao armazenamento. Na verdade, criei o SAS para uma instância do SQL Server 2016 que desejo fazer backup no mesmo contêiner, e isso também pode ter aberto o caminho de acesso ao contêiner para o SQL Server 2014!
Muito obrigado a Sean Gallardy por recomendar o ProcMon , que mostrou muito mais informações de log de erros do que a mensagem "ErrorCode=(5)Access is denied".