MSSQLSERVER_17207
Aplica-se a: SQL Server
Detalhes
Atributo | Valor |
---|---|
Nome do produto | SQL Server |
ID do evento | 17207 |
Origem do Evento | MSSQLSERVER |
Componente | SQLEngine |
Nome simbólico | DBLKIO_OS2DISKERROR |
Texto da mensagem | %ls: erro de sistema operacional %ls durante criação ou abertura do arquivo '%ls'. Faça o diagnóstico, corrija o erro e tente novamente a operação. |
Explicação
O SQL Server não pôde abrir o arquivo indicado devido ao erro de sistema operacional especificado.
Você pode ver o erro 17207 no Evento de Aplicativo do Windows ou no log de erros do SQL Server quando o SQL Server não pode abrir um banco de dados e/ou arquivos de log de transações. Este é um exemplo da aparência do erro.
Error: 17207, Severity: 16, State: 1.
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.
Você pode ver esses erros durante o processo de inicialização da instância do SQL Server ou qualquer operação de banco de dados que tente iniciar o banco de dados (por exemplo, ALTER DATABASE). Em alguns cenários, você poderá ver os erros 17207 e 17204 e, em outras ocasiões, verá apenas um deles.
Se um banco de dados de usuário em execução encontrar esses erros, o banco de dados será deixado no estado de RECOVERY_PENDING e os aplicativos não poderão acessar o banco de dados. Se um banco de dados do sistema encontrar esses erros, a instância do SQL Server não será iniciada e você não poderá se conectar a essa instância do SQL Server. Isso também pode resultar em um recurso de cluster de failover do SQL Server ficar offline.
Se o problema estiver relacionado ao grupo de arquivos FileStream do SQL Server, você observará que apenas o caminho completo do diretório está listado em vez de um nome de arquivo. Veja um exemplo.
Error: 17207, Severity: 16, State: 1.
STREAMFCB::Startup: Operating system error 2(The system cannot find the file specified.) occurred while creating or opening file 'C:\Program Files\Microsoft SQL Server\MSSQL13.SQL2016\MSSQL\DATA\bpa_files_test_fs_1\bpa_files_test_fs_1'. Diagnose and correct the operating system error, and retry the operation.
Causa
Antes que qualquer banco de dados do SQL Server possa ser usado, o banco de dados precisa ser iniciado. O processo de inicialização do banco de dados envolve iniciar várias estruturas de dados que representam o banco de dados e os arquivos dele, abrir todos os arquivos que pertencem ao banco de dados e, por fim, executar a recuperação no banco de dados. O SQL Server usa a função CreateFile da API do Windows para abrir os arquivos que pertencem a um banco de dados.
As mensagens 17207 (e 17204) indicam que um erro foi encontrado enquanto o SQL Server tentava abrir os arquivos de banco de dados durante o processo de inicialização.
Essas mensagens de erro contêm as seguintes informações:
Nome da função do SQL Server que está tentando abrir o arquivo. O nome da função que você normalmente observa nas mensagens de erro é um dos seguintes:
- FCB::Open - o arquivo encontrou um erro quando o SQL Server tenta abri-lo
- FileMgr::StartPrimaryDataFiles – um arquivo de dados primário ou um arquivo pertencente ao grupo de arquivo primário
- FileMgr::StartSecondaryDataFiles – um arquivo pertencente a um grupo de arquivo secundário
- FileMgr::StartLogFiles – um arquivo de log de transações
- STREAMFCB::Startup – um contêiner de FileStream do SQL
- FCB::RemoveAlternateStreams
As informações de estado distinguem vários locais dentro de uma função que pode gerar essa mensagem de erro.
O caminho físico completo para o arquivo.
A ID do arquivo correspondente ao arquivo.
O código de erro do sistema operacional e a descrição do erro. Em alguns casos, você verá apenas o código de erro.
As informações de erro do sistema operacional impressas nessas mensagens de erro são a causa raiz que leva ao erro 17204. As causas comuns para essas mensagens de erro são um problema de permissão ou um caminho incorreto para o arquivo.
Ação do usuário
A resolução do erro 17207 envolve a compreensão do código de erro do sistema operacional associado e o diagnóstico desse erro. Depois que a condição de erro do sistema operacional for resolvida, você poderá tentar reiniciar o banco de dados (usando ALTER DATABASE SET ONLINE, por exemplo) ou a instância do SQL Server para colocar o banco de dados afetado online. Em alguns casos, talvez você não consiga resolver o erro do sistema operacional. Portanto, precisará executar ações corretivas específicas. Discutiremos tais ações nesta seção.
Se a mensagem de erro 17207 contiver apenas um código de erro e não uma descrição de erro, você poderá tentar resolver o código de erro usando o comando de um shell do sistema operacional: net helpmsg <error code> . Se você receber um código de status de 8 dígitos como o código de erro, poderá consultar as fontes de informações em Como converter um HRESULT em um código de erro Win32? para decodificar quais são esses códigos de status em erros de sistema operacional.
Se você receber o erro do sistema operacional
Access is Denied
= 5, considere estes métodos:Verifique se as permissões estão definidas no arquivo examinando as propriedades dele no Windows Explorer. O SQL Server usa grupos do Windows para provisionar o controle de acesso nos vários recursos de arquivo. Verifique se o grupo apropriado (com nomes como SQLServerMSSQLUser$ComputerName$MSSQLSERVER ou SQLServerMSSQLUser$ComputerName$InstanceName) tem as permissões necessárias no arquivo de banco de dados mencionado na mensagem de erro. Para obter mais informações, confira Configurar permissões do sistema de arquivos para acesso ao Mecanismo de Banco de Dados. Verifique se o grupo do Windows realmente inclui a conta de inicialização do serviço SQL Server ou o SID do serviço.
Examine a conta de usuário na qual o serviço SQL Server está sendo executado no momento. Você pode usar o Gerenciador de Tarefas do Windows para obter essas informações. Procure o valor de "Nome de Usuário" para o executável "sqlservr.exe". Além disso, se você alterou recentemente a conta de serviço do SQL Server, saiba que a maneira com suporte para fazer essa operação é usar o utilitário SQL Server Configuration Manager. Mais informações sobre isso estão disponíveis em SQL Server Configuration Manager.
Dependendo do tipo de operação, abrir bancos de dados durante a inicialização do servidor, anexar um banco de dados, restaurar o banco de dados etc., a conta usada para representação e acesso ao arquivo de banco de dados pode variar. Examine o tópico Proteger arquivos de log e dados para entender qual operação define qual permissão e de quais contas. Use uma ferramenta como Monitor do Processo do SysInternals do Windows para entender se o acesso ao arquivo está acontecendo no contexto de segurança da conta de inicialização do serviço (ou SID do serviço) da instância do SQL Server ou de uma conta representada.
Se o SQL Server estiver representando as credenciais de usuário do logon que executa a operação ALTER DATABASE ou CREATE DATABASE, você observará as informações a seguir na ferramenta Monitor do Processo (um exemplo).
Date & Time: 3/27/2010 8:26:08 PM Event Class: File System Operation: CreateFile Result: ACCESS DENIED Path: C:\Program Files\Microsoft SQL Server\MSSQL13.SQL2016\MSSQL\DATA\attach_test.mdf TID: 4288 Duration: 0.0000366 Desired Access:Generic Read/Write Disposition: Open Options: Synchronous IO Non-Alert, Non-Directory File, Open No Recall Attributes: N ShareMode: Read AllocationSize: n/a Impersonating: DomainName\UserName
Se você estiver obtendo o erro de SO
The system cannot find the file specified
= 3:- Examine o caminho completo da mensagem de erro.
- Verifique se a unidade de disco e o caminho da pasta estão visíveis e acessíveis no Windows Explorer.
- Examine o log de eventos do Windows para descobrir se existem problemas com essa unidade de disco.
- Se o caminho estiver incorreto e se esse banco de dados já existir no sistema, você poderá alterar os caminhos do arquivo de banco de dados usando os métodos explicados no artigo Mover arquivos de banco de dados. Talvez você precise usar este procedimento, especialmente para arquivos de banco de dados do sistema que encontrem 17204 ou 17207 e se você estiver trabalhando em um cenário de recuperação de desastre em que as unidades de disco especificadas não estão disponíveis. Este tópico também explica como você pode identificar a localização atual dos vários bancos de dados do sistema [mestre, modelo, tempdb, msdb e mssqlsystemresource].
- Se você vir esse erro porque os arquivos de banco de dados estão ausentes, será necessário restaurar o banco de dados de um backup válido:
- Se o arquivo de banco de dados associado ao erro pertencer a um grupo de arquivos secundário, você poderá, opcionalmente, marcar esse grupo de arquivos offline, colocar o banco de dados online e executar uma restauração somente desse grupo de arquivos. Para obter mais informações, confira a seção OFFLINE do tópico Opções de arquivo e grupo de arquivos ALTER DATABASE (Transact-SQL).
- Se o arquivo que produziu o erro for um arquivo de log de transações, examine as informações nas seções "FOR ATTACH" e "FOR ATTACH_REBUILD_LOG" do tópico CRIAR BANCO DE DADOS (Transact-SQL) para entender como você pode recriar os arquivos de log de transações ausentes.
- Verifique se qualquer disco ou local de rede [como a unidade iSCSI] está disponível antes que o SQL Server tente acessar os arquivos de banco de dados nesses locais. Se necessário, crie as dependências exigidas no Administrador de Cluster ou no Gerenciador de Controle de Serviço.
Se você estiver recebendo o erro de sistema operacional
The process cannot access the file because it is being used by another process
= 32:- Use uma ferramenta como o Explorador de Processos ou o Identificador do Windows Sysinternals para descobrir se outro processo ou serviço adquiriu bloqueio exclusivo nesse arquivo de banco de dados.
- Impeça que esse processo acesse arquivos de banco de dados do SQL Server. Exemplos comuns incluem programas antivírus (confira as diretrizes para exclusões de arquivo no artigo da base de dados a seguir).
- Em um ambiente de cluster, verifique se o processo sqlservr.exe do nó proprietário anterior realmente liberou os identificadores para os arquivos de banco de dados. Normalmente, isso não ocorre, mas as configurações incorretas do cluster ou dos caminhos de E/S podem levar a esses problemas.