Impossible de générer une instance utilisateur de SQL Server

8

J'utilise Windows 7 Beta et j'essaie d'installer une application Web localement. Ce site Web utilise Microsoft SQL Server 2005 Express (SQLEXPRESS) et un fichier MDB dans le dossier ~ / App_Data du site Web. On m'a demandé de configurer IIS7 pour utiliser Classic .NET AppPool pour cette application Web.

Chaque fois que le site Web se charge, je reçois l'erreur suivante:

Une erreur s'est produite lors de la connexion au serveur de base de données: impossible de générer une instance utilisateur de SQL Server en raison de l'échec de la récupération du chemin de données d'application locale de l'utilisateur. Veuillez vous assurer que l'utilisateur dispose d'un profil utilisateur local sur l'ordinateur. La connexion sera coupée.

Internet regorge d'articles écrits sur ce sujet. La sagesse dominante semble être:

  1. Configurez le service SQL Express pour utiliser le compte système local .
  2. Supprimez le répertoire suivant: C: \ Users \ username \ AppData \ Microsoft \ Microsoft SQL Server Data \ SQLEXPRESS

Aucun de ces correctifs n'a eu d'impact. J'ai bricolé des autorisations et des paramètres pendant des heures en vain. Quelqu'un peut-il suggérer un correctif ou m'aider à comprendre comment obtenir des informations plus détaillées sur le problème.

Gabe Sumner
la source
Sous quel compte de service IIS fonctionne-t-il? Avez-vous essayé d'en créer un compte?
Brent Ozar

Réponses:

13

Dans IIS sous Windows 7, sélectionnez le pool d'applications, puis «paramètres avancés». Sous "modèle de processus", recherchez "Charger le profil utilisateur" et définissez-le sur true.

SQL devrait maintenant se charger sous le compte du pool d'applications par défaut.

Ereck Johan
la source
1

J'ai eu les mêmes problèmes sur mon poste de travail mais jamais sur un serveur.

Il s'agit d'un correctif temporaire que j'ai trouvé il y a quelque temps sur le Web et qui semble fonctionner:

Dans l'éditeur de requête, tapez: exec sp_configure 'user instances enabled', 1 puis: Reconfigure

Redémarrez ensuite la base de données SQL Server.

a trouvé ce lien aujourd'hui

et après une recherche rapide sur StackOverflow /programming/281500/error-failed-to-generate-a-user-instance-of-sql-server

Brian Boatright
la source
1

Brian,

Pour que cela ait du sens, jetez d'abord un œil à la liste des processus pour tous les utilisateurs du Gestionnaire des tâches.

w3wp.exe est le nouveau processus de travail WWW. Il est exécuté dans un sandbox de sécurité en utilisant les autorisations d'un utilisateur appelé DefaultAppPool.

Auparavant, au lieu de l'utilisateur DefaultAppPool, il s'agissait d'utilisateurs IUSR et IWAM (voir À quoi servent les comptes IUSR et IWAM dans IIS? ).

Lorsque vous utilisez un fournisseur d'appartenance SQL, le processus w3wp.exe démarre une instance utilisateur SQL Server et se joint à la base de données spécifiée dans la chaîne de connexion, généralement App_Data / ASPNETdb.mdf. L'exécution de l'instance utilisateur de SQL Server nécessite un profil local, afin que les fichiers temporaires aient un emplacement.

Étapes de dépannage:

  1. Assurez-vous que le processus w3wp.exe est exécuté par l'utilisateur DefaultAppPool.
  2. Assurez-vous que SQL Server a activé les instances utilisateur (voir config_value et run_value)
    exec sp_configure 'user instances enabled'
  3. Sinon, exécutez
    sp_configure 'user instances enabled', 1
    alors: Reconfigurez
  4. Redémarrez SQL Server, juste au cas où ASPNETdb.mdf est attaché par une autre instance utilisateur de SQL Server.
  5. Assurez-vous que le profil utilisateur local C: \ Users \ DefaultAppPool existe. Sinon, activez LocalProfile = True, cela créera le profil local. Cela se fait dans IIS Manager, Pools d'applications, DefaultAppPool, Paramètres avancés ...
  6. Si vous rencontrez d'autres problèmes avec la base de données, utilisez SQL Configuration Manager pour vous connecter à l'instance utilisateur et voir si la base de données a été attachée. Vous devez vous connecter à la bonne instance_pipe_name .
    SELECT 
    owning_principal_name, instance_pipe_name, heart_beat
    FROM
    sys.dm_os_child_instances
    
    
teyc
la source