FIX: foutberichten nadat SQL Server is uitgevoerd voor enige tijd op Windows Server 2003 of Windows 2000: ' kan niet worden geladen FileName. dll ' en ' probeert te laden van elk type DLL kan mislukken in het proces van SQL Server '

Symptomen

Wanneer u Microsoft SQL Server op een computer met Windows Server 2003 of op een computer met Windows 2000 uitvoert, wordt een foutbericht weergegeven dat de volgende foutberichten bevat:

  • Kan bestandsnaam. dll niet laden

  • Pogingen om elk type DLL-bestanden te laden, kunnen mislukken in het SQL Server-proces met fouten die naar LoadLibrary failure wijzen.

Dit probleem treedt meestal op nadat SQL Server is uitgevoerd voor enige tijd. Het volledige foutbericht dat u ontvangt, lijkt op het volgende:

Uitzonderings type: Microsoft. SqlServer. Management. SqlIMail. server. common. BaseExceptionMessage: de gelezen op de database is mislukt. Reden: kan niet laden Msxmlsql. dll. data: System. Collections. ListDictionaryI, 4092, NULL, NULL, 2007-04-13 09:44:11.640, DB\SQLServer5, waarschuwing, 2007-04-13 09:44:13.153, de geactiveerde proc [dbo]. [sp_sysmail_activate] die worden uitgevoerd in de wachtrij msdb. dbo. ExternalMailQueue uitvoer de volgende: ' de service wachtrij ' ExternalMailQueue ' is momenteel uitgeschakeld. ' pogingen om XML-gerelateerde activiteit te gebruiken in TSQL mislukt. Msg 6610, niveau 16, staat 1, procedure sp_xml_preparedocument, regel 1Kan niet worden geladen Msxmlsql. dll. msg 6607, niveau 16, staat 3, Proceduresp_xml_removedocument, regel 1 sp_xml_removedocument: de waarde die is opgegeven voor parameter nummer 1 is ongeldig. Pogingen om elk type DLL-bestanden te laden, kunnen mislukken in het SQL Server-proces met fouten die naar LoadLibrary failure wijzen. Pogingen tot het gebruik van uitgebreide opgeslagen procedures resulteert in msg 0, niveau 16, staat 0, procedure xp_ss_backup, regel 1 kan niet laden van de DLL C:\Program Files\Microsoft SQL Server\MSSQL\Binn\ SQLsafe_ExtendedStoredProc. dll, of een van de Dll's die wordt verwezen. Reden: 1114 (een Dynamic Link Library (DLL) initialisatieroutine is mislukt.). Fout: 18210, Ernst: 16 staat: 1. BackupVirtualDeviceSet:: initialiseren: CoCreateInstance mislukt op back-upapparaat ' d4630f27-03a1-47ae-b7a7-4813a6809908 '. Besturingssysteemfout 0x8007045a (een Dynamic Link Library (DLL) initialisatieroutine is mislukt.). Fout: 6512, Ernst: 16 staat: 27. kan de common language runtime (CLR) v 2.0.50727 niet initialiseren met HRESULT 0x80004005. U moet SQL Server voor het gebruik van CLR-integratiefuncties opnieuw starten.

Oorzaak

Dit probleem treedt op omdat er geen thread local storage (TLS)-sleuf is beschikbaar voor de SQL Server-proces (Sqlservr. exe). Dit is een probleem in Windows Server 2003 en Windows 2000. Wanneer SQL Server een DLL-bestanden uitlaadt, worden de TLS-sleuven die de DLL gebruikt mogelijk niet vrijgegeven vanwege een probleem in de functie Tlsfree . Als SQL Server regelmatig verschillende Dll's laadt en vervolgens deze Dll's ontlaadt, gebruiken deze Dll's alle beschikbare TLS-sleuven. Uiteindelijk kan SQL Server niet meer laden van een DLL-bestanden die TLS-sleuven vereist.

Oplossing

Opmerking Deze resolutie is alleen voor Windows Server 2003. Als u Windows 2000 gebruikt, volgt u de stappen in de sectie ' Omzeiling '. "

Informatie over hotfixes voor Windows Server 2003

Een ondersteunde hotfix is beschikbaar bij Microsoft. Deze hotfix is echter alleen bedoeld als correctie voor het probleem dat in dit artikel wordt beschreven. Deze hotfix alleen toepassen op systemen waarop dit specifieke probleem zich voordoet. Deze hotfix kan aanvullende tests worden ontvangen. Als u geen ernstige problemen ondervindt, is het daarom raadzaam te wachten op de volgende software-update die deze hotfix bevat. Als de hotfix beschikbaar is voor downloaden, is er een sectie ' hotfix downloaden beschikbaar ' aan het begin van dit Knowledge Base-artikel. Als deze sectie niet wordt weergegeven, neemt u contact op met Microsoft Customer Service and Support om de hotfix te verkrijgen. Opmerking Als er nog meer problemen optreden of als er problemen zijn opgelost, moet u mogelijk een afzonderlijk serviceverzoek indienen. De gebruikelijke ondersteuningskosten zijn van toepassing op aanvullende ondersteuningsvragen en problemen die niet in aanmerking komen voor deze specifieke hotfix. Ga naar de volgende Microsoft-website voor een volledige lijst met telefoonnummers van Microsoft Customer Service and Support of voor het maken van een afzonderlijk service verzoek:

http://support.microsoft.com/contactus/?ws=supportOpmerking In het formulier ' hotfix beschikbaar voor downloaden ' worden de talen weergegeven waarvoor de hotfix beschikbaar is. Als u uw taal niet ziet, is een hotfix niet beschikbaar voor die taal.

Vereisten

Windows Server 2003 Service Pack 2 moet op de server zijn geïnstalleerd. Klik voor meer informatie op het volgende artikelnummer, zodat het artikel in de Microsoft Knowledge Base wordt weergegeven:

889100 het verkrijgen van het meest recente Service Pack voor Windows Server 2003

Informatie opnieuw opstarten

Nadat u deze hotfix hebt toegepast, moet u de computer opnieuw opstarten.

Informatie over vervanging van hotfixes

Deze hotfix vervangt geen andere hotfixes.

Bestandsgegevens

De Engelse versie van deze hotfix heeft de bestandskenmerken die in de volgende tabel worden weergegeven (of recentere bestandskenmerken). De datums en tijden voor deze bestanden worden weergegeven in Coordinated Universal Time (UTC). Wanneer u de bestandsgegevens weergeven, wordt deze geconverteerd naar de lokale tijd. Als u het verschil tussen UTC en lokale tijd wilt bepalen, gebruikt u het tabblad tijd zone in het onderdeel datum en tijd in het Configuratiescherm.Windows Server 2003 met Service Pack 2, x86-versies

Bestandsnaam

Bestandsversie

Bestandsgrootte

Datum

Tijd

Platform

Ntkrpamp.exe

5.2.3790.4177

2.348.032

29-Oct-2007

19:01

x86

Windows Server 2003 met Service Pack 2, x64-versies

Bestandsnaam

Bestandsversie

Bestandsgrootte

Datum

Tijd

Platform

Hal.dll

5.2.3790.4225

280.064

28-Jan-2008

10:42

x64

Ntkrnlmp.exe

5.2.3790.4225

4.603.904

28-Jan-2008

10:42

x64

Ntoskrnl.exe

5.2.3790.4225

4.533.760

28-Jan-2008

10:42

x64

Windows Server 2003 met Service Pack 2, IA64-versies

Bestandsnaam

Bestandsversie

Bestandsgrootte

Datum

Tijd

Platform

Ntdll.dll

5.2.3790.4225

1.636.864

28-Jan-2008

10:40

IA-64

Ntkrnlmp.exe

5.2.3790.4225

6.568.960

28-Jan-2008

10:40

IA-64

Workaround

U dit probleem omzeilen door een van de volgende methoden te gebruiken. Het is raadzaam om methode 1 te gebruiken omdat de functie uitgebreide opgeslagen procedure in toekomstige versies van SQL Server kan worden verwijderd.

Methode 1

  1. Gebruik de sp_OACreate opgeslagen procedure om te bepalen van de dll's die SQL Server wordt geladen in de SQL Server-proces. Hiertoe gaat u als volgt te werk:

    1. Open SQL Profiler en maak verbinding met het exemplaar van SQL Server.

    2. Geef in het dialoogvenster tracerings eigenschappen de naam van de tracering op, geef de locatie op waar SQL Profiler de tracering opslaat en klik vervolgens op uitvoeren.

    3. Nadat u SQL Profiler voor enige tijd hebt uitgevoerd, analyseert u de tracering om te zoeken naar de exemplaren van de sp_OACreate opgeslagen procedure.

    4. U ziet de eerste parameter van elk exemplaar van de sp_OACreate opgeslagen procedure. Opmerking De eerste parameter geeft de programma-id (ProgID) van het OLE-object of de CLSID (class identifier) van het OLE-object aan.

    5. Bepaal het DLL-bestand dat dit OLE-object bevat.

    Opmerking U SQL Profiler gebruiken voor het bewaken van het exemplaar van SQL Server wanneer u de SQL Server-service start.

  2. Zorg ervoor dat u de optie OLE-automatiserings procedures hebt ingeschakeld. Ga naar de volgende website van Microsoft develop Network (MSDN) voor meer informatie over hoe u bepalen of de optie OLE-automatiserings procedures is ingeschakeld en hoe u de optie OLE-automatiserings procedures inschakelt:

    http://msdn2.microsoft.com/en-us/library/ms191188.aspx

  3. Voer de volgende instructies uit in SQL Server Management Studio van SQL Server 2008 R2, SQL Server 2008 of SQL Server 2005 of SQL Query Analyzer van SQL Server 2000. Opmerking  De volgende code laat bijvoorbeeld zien hoe u het bestand Wbemdisp. dll laadt.

    DROP PROC sp_Load_DllGOCREATE PROC sp_Load_DllASdeclare @WmiServiceLocator int, @hr intexec @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 LOGWHILE 1=1 WAITFOR DELAY '01:00:00'GOEXEC sp_procoption 'sp_Load_Dll' , 'startup' , 'true' GO

    De overzichten maken een opgeslagen procedure. De instructies kunnen ook de opgeslagen procedure uit te voeren wanneer de SQL Server-service wordt gestart. Deze opgeslagen procedure voert de volgende bewerkingen uit:

    • Laadt het bestand Wbemdisp. dll.

    • Hiermee houdt u het bestand Wbemdisp. dll in het geheugen omdat de instructies niet worden afgesloten.

    Zolang het bestand Wbemdisp. dll zich in het geheugen bevindt, laden andere instructies het bestand Wbemdisp. dll niet opnieuw. SQL Server roept daarom niet de functie Tlsalloc en de functie tlsfree voor het bestand wbemdisp. dll. Opmerking U moet de code bijwerken om de Dll's te laden die u in stap 1 hebt vastgesteld.

  4. Voeg de instructies toe aan de sp_Load_Dll opgeslagen procedure in stap 3. Deze instructies laden de Dll's die u in stap 1 hebt vastgesteld.

  5. Start de SQL Server-service opnieuw.

  6. Controleer of SQL Server het bestand Wbemdisp. dll in het geheugen laadt. Hiertoe gaat u als volgt te werk:

    1. Open het foutenlogboek van SQL Server-bestand.

    2. Zoek het volgende bericht:

      wbemdisp. dll geladen in de SQL-adresruimte door de opstartprocedure sp_Load_DllOpmerking Dit bericht geeft aan dat het bestand Wbemdisp. dll door SQL Server is geladen.

    3. Voer de volgende opdracht uit bij een opdrachtprompt:

      tasklist /m
    4. In het resultaat dat u verkrijgt, zoek het proces Sqlservr. exe en controleer of het bestand Wbemdisp. dll wordt weergegeven. Opmerking Als het bestand Wbemdisp. dll wordt vermeld, heeft SQL Server het bestand Wbemdisp. dll geladen.

Methode 2

  1. Gebruik de sp_OACreate opgeslagen procedure om te bepalen van de dll's die SQL Server wordt geladen in de SQL Server-proces. Hiertoe gaat u als volgt te werk:

    1. Open SQL Profiler en maak verbinding met het exemplaar van SQL Server.

    2. Geef in het dialoogvenster tracerings eigenschappen de naam van de tracering op, geef de locatie op waar SQL Profiler de tracering opslaat en klik vervolgens op uitvoeren.

    3. Nadat u SQL Profiler voor enige tijd hebt uitgevoerd, analyseert u de tracering om te zoeken naar de exemplaren van de sp_OACreate opgeslagen procedure.

    4. U ziet de eerste parameter van elk exemplaar van de sp_OACreate opgeslagen procedure. Opmerking De eerste parameter geeft de programma-id (ProgID) van het OLE-object of de CLSID (class identifier) van het OLE-object aan.

    5. Bepaal het DLL-bestand dat dit OLE-object bevat.

    Opmerking U SQL Server Profiler gebruiken voor het bewaken van het exemplaar van SQL Server bij het starten van de SQL Server-service.

  2. Een uitgebreide opgeslagen procedure maken. De uitgebreide opgeslagen procedure bevat een functie waarmee de Dll's worden geladen die u in stap 1 hebt vastgesteld.

  3. De uitgebreide opgeslagen procedure toevoegen aan SQL Server.

  4. Gebruik in SQL Server de sp_addextendedproc systeem opgeslagen procedure voor het registreren van de functie in de uitgebreide opgeslagen procedure.

  5. Gebruik de sp_procoption opgeslagen procedure om de uitgebreide opgeslagen procedure automatisch te laten starten wanneer de SQL Server-service wordt gestart.

  6. Start de SQL Server-service opnieuw.

Wanneer SQL Server de functie in de uitgebreide opgeslagen procedure wordt uitgevoerd, laadt SQL Server de Dll's door het aanroepen van de LoadLibrary API.

Status

Dit is geen probleem in SQL Server. Dit is een probleem in Windows Server 2003 en Windows 2000. Dit probleem treedt niet op in Windows Vista of Windows Server 2008.

Verwijzingen

Ga naar de volgende website van Microsoft Developer Network (MSDN) voor meer informatie over de functie Tlsalloc :

http://msdn2.microsoft.com/en-US/library/ms686801.aspxGa naar de volgende MSDN-website voor meer informatie over de functie Tlsfree :

http://msdn2.microsoft.com/en-us/library/ms686804.aspxGa naar de volgende MSDN-website voor meer informatie over de sp_OACreate opgeslagen procedure:

http://msdn2.microsoft.com/en-us/library/ms189763.aspx

Meer hulp nodig?

Uw vaardigheden uitbreiden
Training verkennen
Als eerste nieuwe functies krijgen
Deelnemen aan Microsoft insiders

Was deze informatie nuttig?

Bedankt voor uw feedback.

Hartelijk dank voor uw feedback! Het lijkt ons een goed idee om u in contact te brengen met een van onze Office-ondersteuningsagenten.

×