Falha ao gerar uma instância de usuário do SQL Server

8

Estou usando o Windows 7 Beta e tentando instalar um aplicativo Web localmente. Este site usa o Microsoft SQL Server 2005 Express (SQLEXPRESS) e um arquivo MDB na pasta ~ / App_Data do site. Fui instruído a configurar o IIS7 para usar o Classic .NET AppPool para este aplicativo Web.

Sempre que o site é carregado, eu recebo o seguinte erro:

Ocorreu um erro ao tentar conectar-se ao servidor de banco de dados: falha ao gerar uma instância de usuário do SQL Server devido a falha na recuperação do caminho de dados do aplicativo local do usuário. Verifique se o usuário possui um perfil de usuário local no computador. A conexão será fechada.

A Internet está cheia de artigos escritos sobre esse assunto. A sabedoria predominante parece ser:

  1. Configure o serviço SQL Express para usar a conta do sistema local .
  2. Exclua o seguinte diretório: C: \ Users \ nome de usuário \ AppData \ Microsoft \ Microsoft SQL Server Data \ SQLEXPRESS

Nenhuma dessas correções causou impacto. Eu consertei as permissões e as configurações por horas sem sucesso. Alguém pode sugerir uma correção ou me ajudar a entender como obter informações mais detalhadas sobre o problema.

Gabe Sumner
fonte
Em qual conta de serviço o IIS está sendo executado? Você já tentou criar uma conta para isso?
Brent Ozar

Respostas:

13

No IIS no Windows 7, selecione o pool de aplicativos e, em seguida, "configurações avançadas". Em "modelo de processo", localize "Carregar perfil de usuário" e defina-o como verdadeiro.

O SQL agora deve carregar na conta do pool de aplicativos padrão.

Ereck Johan
fonte
1

Eu tive os mesmos problemas na minha estação de trabalho, mas nunca em um servidor.

Esta é uma correção temporária que encontrei há algum tempo na Web e parece funcionar:

No editor de consultas, digite: exec sp_configure 'user instance enabled', 1 then: Reconfigure

Em seguida, reinicie o banco de dados do SQL Server.

encontrou este link hoje

e depois de uma pesquisa rápida no StackOverflow /programming/281500/error-failed-to-generate-a-user-instance-of-sql-server

Brian Boatright
fonte
1

Brian,

Para que tudo isso faça sentido, verifique primeiro a lista de processos para todos os usuários no Gerenciador de tarefas.

O w3wp.exe é o novo processo de trabalho da WWW. É executado em uma sandbox de segurança usando as permissões de um usuário chamado DefaultAppPool.

Antigamente, em vez do usuário do DefaultAppPool, seriam usuários IUSR e IWAM (consulte O que são as contas IUSR e IWAM no IIS? ).

Quando você usa um provedor de associação SQL, o processo w3wp.exe inicia uma Instância de Usuário do SQL Server e se conecta ao banco de dados especificado na cadeia de conexão, geralmente o App_Data / ASPNETdb.mdf. A execução da instância do usuário do SQL Server requer um Perfil Local, para que os arquivos temporários tenham um lugar para onde ir.

Etapas de solução de problemas:

  1. Verifique se o processo w3wp.exe é executado pelo usuário DefaultAppPool.
  2. Verifique se o SQL Server tem instâncias de usuário ativadas (consulte config_value e run_value)
    exec sp_configure 'user instances enabled'
  3. Caso contrário, execute
    sp_configure 'user instances enabled', 1
    : Reconfigure
  4. Reinicie o SQL Server, caso ASPNETdb.mdf esteja anexado por uma instância de usuário diferente do SQL Server.
  5. Verifique se o diretório C: \ Users \ DefaultAppPool do perfil de usuário local existe. Caso contrário, ative LocalProfile = True, isso criará o perfil local. Isso é feito no Gerenciador do IIS, Pools de aplicativos, DefaultAppPool, Configurações avançadas ...
  6. Se você tiver outros problemas com o banco de dados, use o SQL Configuration Manager para conectar-se à instância do usuário e veja se o banco de dados foi anexado. Você precisa se conectar ao instance_pipe_name correto .
    SELECT 
    owning_principal_name, instance_pipe_name, heart_beat
    FROM
    sys.dm_os_child_instances
    
    
teyc
fonte