Artikel-ID: 941105 - Geändert am: Freitag, 23. März 2012 - Version: 3.0

FIX: Fehlermeldungen nach SQL Server für einige Zeit unter Windows1 Server 2003 oder Windows1 2000 ausgeführt wurde: "Fehler beim Laden der Dateiname.dll" und "Versucht, jede Art von Dll laden können innerhalb des Prozesse...

Hotfix Download is availableHotfix-Download ist verfügbar
Hotfix downloaden und installieren
SystemtippDieser Artikel bezieht sich auf ein anderes Betriebssystem als das von Ihnen verwendete. Für Sie möglicherweise nicht relevante Artikelinhalte wurden deaktiviert.

Auf dieser Seite

Alles erweitern | Alles schließen

Problembeschreibung

Wenn Sie Microsoft SQL Server auf einem Windows1 Server 2003-basierten Computer oder auf einem Windows1 2000-basierten Computer ausführen, wird möglicherweise eine Fehlermeldung die folgenden Fehlermeldungen angezeigt enthält:
  • Fehler beim Laden DateinameDLL
  • Versucht, jede Art von Dll laden können innerhalb des SQL Server-Prozesses mit Störungen auf LoadLibrary-Fehler fehlschlagen.
Dieses Problem tritt meist dann auf, wenn SQL Server für einige Zeit ausgeführt wurde.

Die vollständige Fehlermeldung, die Sie empfangen, ähnelt dem folgenden:
Ausnahmetyp: Microsoft.SqlServer.Management.SqlIMail.Server.Common.BaseException
Meldung: Lesen der Datenbank ist fehlgeschlagen. Ursache: Fehler beim Laden von Msxmlsql.dll.
Daten: System.Collections.ListDictionaryI,4092,NULL,NULL,2007-04-13 09:44:11.640, DB\SQLServer5, Warnung, 09:44:13.153-2007-04-13,
Die aktivierten Proc [Dbo].[Sp_sysmail_activate] auf Warteschlange msdb.dbo.ExternalMailQueue folgende Ausgabe: "Die Dienstwarteschlange"ExternalMailQueue"ist derzeit deaktiviert."

Versuche, die Verwendung von XML im Zusammenhang Aktivität im TSQL fehlschlägt.
Msg 6610, Ebene 16, Status 1, Prozedur Sp_xml_preparedocument, Zeile 1
Fehler beim Laden von Msxmlsql.dll.
Msg 6607, Ebene 16, State 3, Verfahren
Sp_xml_removedocument, Zeile 1 Sp_xml_removedocument: der Wert für Parameternummer 1 ungültig ist.

Versucht, jede Art von Dll laden können innerhalb des SQL Server-Prozesses mit Störungen auf LoadLibrary-Fehler fehlschlagen.
Versuche mit erweiterte gespeicherte Prozeduren führen
Msg 0, Ebene 16, Status 0, Prozedur Xp_ss_backup, Zeile 1
DLL C:\Program Files\Microsoft SQL Server\MSSQL\Binn\SQLsafe_ExtendedStoredProc.dll oder eine DLL, die es verweist, kann nicht geladen werden. Grund: 1114 (eine dynamic Link Library (DLL) Initialisierungsroutine ist fehlgeschlagen.).

Fehler: 18210, Schweregrad: 16, Status: 1.
BackupVirtualDeviceSet::Initialize: CoCreateInstance-Fehler auf Sicherungsmedium 'd4630f27-03a1-47ae-b7a7-4813a6809908'. Betriebssystemfehler 0x8007045a (eine dynamic Link Library (DLL) Initialisierungsroutine ist fehlgeschlagen.).

Fehler: 6512, Schweregrad: 16, Status: 27.
Fehler beim Initialisieren der Common Language Runtime (CLR) Version 2.0.50727 mit HRESULT 0 x 80004005. Sie müssen SQL Server mithilfe von CLR-Integrationsfeatures neu zu starten.

 

Ursache

Dieses Problem tritt auf, weil kein Thread local Storage (TLS) Steckplatz für den SQL Server-Prozess (Sqlservr.exe) verfügbar ist. Dies ist ein Problem in Windows1 Server 2003 und Windows1 2000.

Wenn SQL Server eine DLL entladen wird, können die TLS-Steckplätze, die die DLL verwendet, nicht wegen eines Problems in der TlsFree Funktion freigegeben werden. Wenn SQL Server häufig verschiedene DLLs lädt und anschließend diese DLLs entlädt, verwenden diese DLLs verfügbar TLS-Steckplätze. Schließlich können SQL Server nicht mehr Laden einer DLL, die TLS-Slots erfordert.

Lösung

Hinweis Diese Lösung ist nur für Windows1 Server 2003. Wenn Sie Windows1 2000 verwenden, die Schritte im Abschnitt "Abhilfe"."

Hotfix-Informationen für Windows1 Server 2003

Ein unterstützter Hotfix ist von Microsoft erhältlich. Dieser Hotfix soll jedoch nur das Problem zu beheben, das in diesem Artikel beschrieben wird. Wenden Sie diesen Hotfix nur auf Systemen, bei die dieses spezielle Problem auftritt. Dieser Hotfix wird möglicherweise zu einem Zeitpunkt weiteren Tests unterzogen. Wenn Ihr System durch dieses Problem nicht schwerwiegend beeinträchtigt ist, empfehlen wir, dass für das nächste Softwareupdate warten, das diesen Hotfix enthält.

Wenn der Hotfix zum Download zur Verfügung steht, ist es ein Abschnitt "Hotfixdownload available" (Hotfixdownload verfügbar"am oberen Rand dieser Knowledge Base-Artikel. Wenn in diesem Abschnitt nicht angezeigt wird, wenden Sie sich an Microsoft Customer Service und Support, um den Hotfix zu erhalten.

Hinweis Wenn weitere Probleme auftreten oder wenn eine Problembehandlung erforderlich ist, müssen Sie möglicherweise eine separate Serviceanfrage erstellen. Die normalen Supportkosten gelten für zusätzliche Supportfragen und Probleme, die für diesen speziellen Hotfix nicht qualifizieren. Eine vollständige Liste der Microsoft-Kundendienst und Support-Telefonnummern oder eine separate Serviceanfrage erstellen finden Sie auf die folgende Microsoft-Website:
http://support.Microsoft.com/contactus/?WS=Support (http://support.microsoft.com/contactus/?ws=support)
Hinweis Das Formular "Hotfixdownload available" zeigt die Sprachen für die der Hotfix verfügbar ist. Wenn Ihre Sprache nicht angezeigt wird, ist es, da ein Hotfix nicht für diese Sprache verfügbar ist.
Voraussetzungen
Sie müssen Windows1 Server 2003 Service Pack 2 auf dem Server installiert haben.

Weitere Informationen finden Sie in folgendem Artikel der Microsoft Knowledge Base anzuzeigen:
889100  (http://support.microsoft.com/kb/889100/ ) So erhalten Sie das neueste Servicepack für Windows1 Server 2003
Informationen zum Neustart
Sie müssen den Computer neu starten, nachdem Sie diesen Hotfix anwenden.
Ersetzte Hotfixes
Dieser Hotfix ersetzt keine anderen Hotfixes nicht.
Dateiinformationen
Die englische Version dieses Hotfixes besitzt die Dateiattribute (oder höher), die in der folgenden Tabelle aufgelistet sind. Die Datums- und Uhrzeitangaben für diese Dateien sind in Coordinated Universal Time (UTC) aufgelistet. Wenn Sie die Dateiinformationen anzeigen, wird es in die lokale Ortszeit konvertiert. Um die Differenz zwischen UTC und der Ortszeit zu ermitteln, verwenden die Zeitzone die Registerkarte der Datum und Uhrzeit Element in der Systemsteuerung.

Windows1 Server 2003 mit Service Pack 2, x 86-basierte Versionen
Tabelle minimierenTabelle vergrößern
DateinameVersion der DateiDateigrößeDatumZeitPlattform
Ntkrpamp.exe5.2.3790.41772,348,03229-Oct-200719: 01X 86

Windows1 Server 2003 mit Service Pack 2, x 64-basierte Versionen
Tabelle minimierenTabelle vergrößern
DateinameVersion der DateiDateigrößeDatumZeitPlattform
HAL.dll5.2.3790.4225280,06428 Januar 200810: 42X 64
Ntkrnlmp.exe5.2.3790.42254,603,90428 Januar 200810: 42X 64
Ntoskrnl.exe5.2.3790.42254,533,76028 Januar 200810: 42X 64

Windows1 Server 2003 mit Service Pack 2 IA64-basierte Versionen
Tabelle minimierenTabelle vergrößern
DateinameVersion der DateiDateigrößeDatumZeitPlattform
Ntdll.dll5.2.3790.42251,636,86428 Januar 200810: 40IA-64
Ntkrnlmp.exe5.2.3790.42256,568,96028 Januar 200810: 40IA-64

Abhilfe

Sie können eine der folgenden Methoden, um dieses Problem zu umgehen. Wir empfehlen, dass Sie Methode 1 verwenden, da das erweiterte gespeicherte Prozedur-Feature in zukünftigen Versionen von SQL Server entfernt werden kann.

Methode 1

  1. Verwendung der sp_OACreate die gespeicherte Prozedur zu bestimmen, die DLLs, die SQL Server in der SQL Server-Prozess lädt. Gehen Sie dazu folgendermaßen vor:
    1. Öffnen Sie SQL-Profiler und schließen Sie dann an die Instanz von SQL Server.
    2. In der Trace-Eigenschaftenim Dialogfeld geben Sie den Namen der Ablaufverfolgung, geben Sie den Speicherort, an dem SQL Profiler die Ablaufverfolgung speichert, und klicken Sie dann aufAusführen.
    3. Nach dem Ausführen von Profiler SQL seit einiger Zeit analysieren Ablaufverfolgung, die die Vorkommen dersp_OACreate gespeicherte Prozedur.
    4. Beachten Sie den ersten Parameter der jedes Vorkommen von der sp_OACreate gespeicherte Prozedur.

      Hinweis Der erste Parameter gibt den Programmbezeichner (ProgID) des OLE-Objekts oder den Klassenbezeichner (CLSID) des OLE-Objekts.
    5. Bestimmen Sie die DLL, die dieses OLE-Objekt enthält.
    HinweisSQL-Profiler können Sie um die Instanz von SQL Server zu überwachen, wenn Sie den SQL Server-Dienst starten.
  2. Stellen Sie sicher, dass Sie aktiviert haben die OLE-Automatisierungsprozeduren Option.
    Weitere Informationen zum Ermitteln, ob die OLE-Automatisierungsprozeduren aktiviert ist und zum Aktivieren der OLE-Automatisierungsprozeduren Option, besuchen Sie die folgende Microsoft entwickeln Network (MSDN)-Website:
    http://msdn2.Microsoft.com/en-us/library/ms191188.aspx (http://msdn2.microsoft.com/en-us/library/ms191188.aspx)
  3. Führen Sie die folgenden Anweisungen in SQL Server Management Studio der SQL Server 2008 R2, des SQL Server 2008, SQL Server 2005 oder im SQL Query Analyzer SQL Server 2000.

    HinweisBeispielsweise zeigt der folgende Code zum Laden der Datei Wbemdisp.dll.
    DROP PROC sp_Load_Dll
    GO
    CREATE PROC sp_Load_Dll
    AS
    declare @WmiServiceLocator int, @hr int
    exec @hr = sp_OACreate 'WbemScripting.SWbemLocator', @WmiServiceLocator output 
    if @hr = 0
     raiserror ( 'wbemdisp.dll loaded into sql address space by startup procedure sp_Load_Dll, Object Info: %d' , 10 , 1 , @WmiServiceLocator) --WITH LOG
    WHILE 1=1
     WAITFOR DELAY '01:00:00'
    GO
    EXEC sp_procoption 'sp_Load_Dll' , 'startup' , 'true' 
    GO
    
    Die Anweisungen erstellen eine gespeicherte Prozedur. Die Anweisungen können auch die gespeicherte Prozedur ausgeführt, wenn der SQL Server-Dienst gestartet wird. Diese gespeicherte Prozedur führt die folgenden Vorgänge:
    • Lädt die Datei Wbemdisp.dll.
    • Die Datei Wbemdisp.dll hält im Speicher, da die Anweisungen nicht beendet werden.
    Solange die Datei Wbemdisp.dll im Arbeitsspeicher befindet, werden andere Anweisungen die Datei Wbemdisp.dll nicht erneut geladen. SQL Server ruft daher nicht die TlsAlloc Funktion und die TlsFree die Funktion für die Datei Wbemdisp.dll.

    Hinweis Sie müssen den Code zum Laden von DLLs, die Sie in Schritt 1 ermittelt aktualisieren.
  4. Fügen Sie die Anweisungen auf der sp_Load_Dll gespeicherte Prozedur in Schritt 3. Diese Anweisungen Laden der DLLs, die Sie in Schritt 1 ermittelt.
  5. Starten Sie SQL Server-Dienst neu.
  6. Stellen Sie sicher, dass SQL Server die Datei Wbemdisp.dll im Speicher geladen wird. Gehen Sie dazu folgendermaßen vor:
    1. Öffnen Sie die SQL Server-Fehlerprotokolldatei.
    2. Suchen Sie die folgende Meldung angezeigt:
      wbemdisp.dll in Sql-Adressraum geladen werden, indem Startup Verfahren sp_Load_Dll
      Hinweis Diese Meldung zeigt an, dass SQL Server die Datei Wbemdisp.dll geladen hat.
    3. Führen Sie an einer Eingabeaufforderung den folgenden Befehl ein:
      tasklist /m
    4. Suchen Sie in der Ergebnismenge, die Sie erhalten den Prozess Sqlservr.exe, und vergewissern Sie sich, dass die Datei Wbemdisp.dll aufgeführt ist.

      Hinweis Wenn die Datei Wbemdisp.dll aufgeführt ist, hat SQL Server die Datei Wbemdisp.dll geladen.

Methode 2

  1. Verwendung der sp_OACreate die gespeicherte Prozedur zu bestimmen, die DLLs, die SQL Server in der SQL Server-Prozess lädt. Gehen Sie dazu folgendermaßen vor:
    1. Öffnen Sie SQL-Profiler und schließen Sie dann an die Instanz von SQL Server.
    2. In der Trace-Eigenschaftenim Dialogfeld geben Sie den Namen der Ablaufverfolgung, geben Sie den Speicherort, an dem SQL Profiler die Ablaufverfolgung speichert, und klicken Sie dann aufAusführen.
    3. Nach dem Ausführen von Profiler SQL seit einiger Zeit analysieren Ablaufverfolgung, die die Vorkommen dersp_OACreate gespeicherte Prozedur.
    4. Beachten Sie den ersten Parameter der jedes Vorkommen von der sp_OACreate gespeicherte Prozedur.

      Hinweis Der erste Parameter gibt den Programmbezeichner (ProgID) des OLE-Objekts oder den Klassenbezeichner (CLSID) des OLE-Objekts.
    5. Bestimmen Sie die DLL, die dieses OLE-Objekt enthält.
    Hinweis SQL Server Profiler können Sie um die Instanz von SQL Server zu überwachen, wenn Sie den SQL Server-Dienst starten.
  2. Erstellen einer erweiterten gespeicherten Prozedur. Die erweiterte gespeicherte Prozedur enthält eine Funktion, die die DLLs lädt, die Sie in Schritt 1 ermittelt.
  3. SQL Server die erweiterte gespeicherte Prozedur hinzufügen.
  4. Verwenden Sie SQL Server, die sp_addextendedproc gespeicherte Systemprozedur registrieren Sie die Funktion in der erweiterten gespeicherten Prozedur.
  5. Verwendung der sp_procoption gespeicherte Prozedur, die erweiterte gespeicherte Prozedur für den automatischen start beim Starten des SQL Server-Dienstes aktivieren.
  6. Starten Sie SQL Server-Dienst neu.
Wenn SQL Server die Funktion in der erweiterten gespeicherten Prozedur ausgeführt wird, lädt SQL Server-DLLs durch Aufruf von LoadLibrary-API.

Status

Dies ist kein Problem in SQL Server. Dies ist ein Problem in Windows1 Server 2003 und Windows1 2000. Dieses Problem tritt nicht in Windows1 Vista oder Windows1 Server 2008.

Informationsquellen

Weitere Informationen über die TlsAlloc Funktion finden Sie auf die folgenden Microsoft Developer Network (MSDN)-Website:
http://msdn2.Microsoft.com/en-us/library/ms686801.aspx (http://msdn2.microsoft.com/en-US/library/ms686801.aspx)
Weitere Informationen über die TlsFree Funktion finden Sie auf die folgende MSDN-Website:
http://msdn2.Microsoft.com/en-us/library/ms686804.aspx (http://msdn2.microsoft.com/en-us/library/ms686804.aspx)
Weitere Informationen über die Sp_OACreate gespeicherten Prozedur finden Sie auf die folgende MSDN-Website:
http://msdn2.Microsoft.com/en-us/library/ms189763.aspx (http://msdn2.microsoft.com/en-us/library/ms189763.aspx)

Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft SQL Server 2008 R2 Standard
  • Microsoft SQL Server 2008 R2 Workgroup
  • Microsoft SQL Server 2008 R2 Developer
  • Microsoft SQL Server 2008 R2 Enterprise
  • Microsoft SQL Server 2008 Standard
  • Microsoft SQL Server 2008 Workgroup
  • Microsoft SQL Server 2008 Developer
  • Microsoft SQL Server 2008 Enterprise
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Workgroup Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 2000 Workgroup Edition
  • Microsoft SQL Server 2000 Developer Edition
  • Microsoft SQL Server 2000 Enterprise Edition
  • Microsoft SQL Server 2000 Personal Edition
Keywords: 
kbautohotfix kbfix kbqfe kbhotfixserver kbwinserv2003postsp2fix kbexpertiseadvanced kbmt KB941105 KbMtde
Maschinell übersetzter ArtikelMaschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 941105  (http://support.microsoft.com/kb/941105/en-us/ )
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.