«

»

dez 04

Operating System Error 2 (The system cannot find the file specified.)

Esta semana um amigo me chamou para ajudá-lo pois estava diante de uma situação que, apesar de parecer tão simples, foi necessário pesquisar. Ele já havia passado por esta situação antes mas se esqueceu da solução, talvez por ser tão simples.

 

 

Ao tentar atachar uma base normalmente com sp_attach_db o SQL Server retornava os seguintes erros:

 

 

 

————————————————————————

2010-03-27 14:21:34.65 spid52      Error: 17207, Severity: 16, State: 1.

————————————————————————

2010-03-27 14:21:34.65 spid52      FileMgr::StartSecondaryDataFiles: Operating system error 2(The system cannot find the file specified.) occurred while creating or opening file ‘F:\MSSQL\DATA\MyDB_FG1_1.ndf’. Diagnose and correct the operating system error, and retry the operation.

————————————————————————

De acordo com a Microsoft, antes que qualquer banco de dados do SQL Server possa ser utilizado, é necessário iniciá-lo. O processo de inicialização envolve inicializar várias estruturas que representam o banco de dados e os arquivos, abrindo todos os arquivos que fazem parte do banco de dados e finalmente, executar um recovery do banco de dados. O SQL Server usa o Windows API CreateFile para abrir os arquivos e é aí que entra a questão que envolve nosso problema.

 

Mesmo verificando que a conta que roda o serviço do SQL Server tinha todas as permissões NTFS necessárias, que a conta logada no SQL Server era membro da role SysAdmin e que o arquivo mdf havia herdado corretamente as permissões que foram reaplicadas, a mensagem de erro permanecia. Pesquisando no site da Microsoft encontramos este KB que explica que, para utilizar o Windows API CreateFile, o SQL Server verifica se a conta que está rodando o serviço do SQL Server é membro do grupo SQLServerMSSQLUser$ComputerName$MSSQLSERVER ou SQLServerMSSQLUser$ComputerName$InstanceName, caso sua instância seja nomeada. Além disso, existem outros procedimentos para verificar se todas as configurações relacionadas a permissão do SQL Server estão corretas, dependendo da mensagem principal de erro.

Depois de colocarmos a conta que estava rodando o serviço do SQL Server dentro deste grupo bastou reiniciar a instância e o attach passou a funcionar corretamente. Não sei se foi alterado por alguém, ou o que pode ter acontecido para que deixasse de funcionar repentinamente pois não tivemos oportunidade de analisar isso.

Se você enfrentou o mesmo problema, pode comentar abaixo. Até a próxima!

Deixe uma resposta