Fehler beim Generieren einer Benutzerinstanz von SQL Server

8

Ich verwende Windows 7 Beta und versuche, eine Webanwendung lokal zu installieren. Diese Website verwendet Microsoft SQL Server 2005 Express (SQLEXPRESS) und eine MDB-Datei im Ordner ~ / App_Data der Website. Ich wurde angewiesen, IIS7 für die Verwendung von Classic .NET AppPool für diese Webanwendung zu konfigurieren .

Jedes Mal, wenn die Website geladen wird, wird folgende Fehlermeldung angezeigt:

Beim Versuch, eine Verbindung zum Datenbankserver herzustellen, ist ein Fehler aufgetreten: Fehler beim Generieren einer Benutzerinstanz von SQL Server aufgrund eines Fehlers beim Abrufen des lokalen Anwendungsdatenpfads des Benutzers. Stellen Sie sicher, dass der Benutzer ein lokales Benutzerprofil auf dem Computer hat. Die Verbindung wird geschlossen.

Das Internet ist voll mit Artikeln zu diesem Thema. Die vorherrschende Weisheit scheint zu sein:

  1. Konfigurieren Sie den SQL Express-Dienst für die Verwendung des lokalen Systemkontos .
  2. Löschen Sie das folgende Verzeichnis: C: \ Benutzer \ Benutzername \ AppData \ Microsoft \ Microsoft SQL Server-Daten \ SQLEXPRESS

Keine dieser Korrekturen hat Auswirkungen gehabt. Ich habe stundenlang vergeblich an Berechtigungen und Einstellungen herumgebastelt. Kann jemand eine Lösung vorschlagen oder mir helfen zu verstehen, wie ich detailliertere Informationen über das Problem erhalten kann.

Gabe Sumner
quelle
Unter welchem ​​Dienstkonto wird IIS ausgeführt? Haben Sie versucht, ein Konto dafür zu erstellen?
Brent Ozar

Antworten:

13

Wählen Sie in IIS unter Windows 7 den Anwendungspool und dann "Erweiterte Einstellungen" aus. Suchen Sie unter "Prozessmodell" nach "Benutzerprofil laden" und setzen Sie es auf "true".

SQL sollte jetzt unter dem Standard-App-Pool-Konto geladen werden.

Ereck Johan
quelle
1

Ich hatte die gleichen Probleme auf meiner Workstation, aber nie auf einem Server.

Dies ist eine vorübergehende Korrektur, die ich vor einiger Zeit im Web gefunden habe und die anscheinend funktioniert:

In dem Abfrage - Editor Typ: exec sp_configure 'user - Instanzen aktiviert', 1 dann: rekonfigurieren

Starten Sie dann die SQL Server-Datenbank neu.

habe diesen Link heute gefunden

und nach einer kurzen Suche auf StackOverflow /programming/281500/error-failed-to-generate-a-user-instance-of-sql-server

Brian Boatright
quelle
1

Brian,

Damit dies für alle sinnvoll ist, sehen Sie sich zunächst die Prozessliste für alle Benutzer im Task-Manager an.

w3wp.exe ist der neue WWW-Worker-Prozess. Es wird in einer Sicherheitssandbox mit den Berechtigungen eines Benutzers namens DefaultAppPool ausgeführt.

Früher waren es anstelle des DefaultAppPool-Benutzers IUSR- und IWAM-Benutzer (siehe Was sind die IUSR- und IWAM-Konten in IIS? ).

Wenn Sie einen SQL-Mitgliedschaftsanbieter verwenden, startet der Prozess w3wp.exe eine SQL Server-Benutzerinstanz und hängt sie an die in der Verbindungszeichenfolge angegebene Datenbank an, üblicherweise App_Data / ASPNETdb.mdf. Das Ausführen der Benutzerinstanz von SQL Server erfordert ein lokales Profil, damit temporäre Dateien irgendwohin gelangen.

Schritte zur Fehlerbehebung:

  1. Stellen Sie sicher, dass der Prozess w3wp.exe vom Benutzer DefaultAppPool ausgeführt wird.
  2. Stellen Sie sicher, dass in SQL Server Benutzerinstanzen aktiviert sind (siehe config_value und run_value).
    exec sp_configure 'user instances enabled'
  3. Wenn nicht,
    sp_configure 'user instances enabled', 1
    dann: Neu konfigurieren
  4. Starten Sie SQL Server neu, falls ASPNETdb.mdf von einer anderen Benutzerinstanz von SQL Server angehängt wird.
  5. Stellen Sie sicher, dass das lokale Benutzerprofil C: \ Users \ DefaultAppPool vorhanden ist. Wenn nicht, aktivieren Sie LocalProfile = True. Dadurch wird das lokale Profil erstellt. Dies erfolgt in IIS Manager, Anwendungspools, DefaultAppPool, Erweiterte Einstellungen ...
  6. Wenn Sie weitere Probleme mit der Datenbank haben, stellen Sie mit SQL Configuration Manager eine Verbindung zur Benutzerinstanz her und prüfen Sie, ob die Datenbank angehängt wurde. Sie müssen eine Verbindung zum richtigen Instanzrohrname herstellen .
    SELECT 
    owning_principal_name, instance_pipe_name, heart_beat
    FROM
    sys.dm_os_child_instances
    
    
teyc
quelle