Le service SQL Server se bloque lorsque vous exécutez une requête de serveur lié Oracle

Symptôme

Prenons l’exemple du scénario suivant :

  • Vous installez Microsoft SQL Server sur un ordinateur exécutant Windows Server.

  • Vous pouvez créer un serveur lié pour une base de données Oracle.

  • Activez l’option autoriser le processus dans la boîte de dialogue Options du fournisseur de serveur lié. Remarque Par défaut, l’option n’est pas sélectionnée.

  • Vous exécutez une requête de serveur lié à l’aide du fournisseur OraOLEDB.

Dans ce scénario, le service SQL Server se bloque et aucun résultat n’est retourné pour la requête. Par ailleurs, vous pouvez rencontrer les problèmes suivants :

  • Vous recevez le message d’erreur suivant dans le journal des événements du système Windows :

    ---------------------------------- Le service SQL Server (MSSQLSERVER) s’est arrêté de manière inattendue. Il a suivi 1 temps. ----------------------------------

  • Un fichier de minividage du processus SQL Server est généré avec la corruption du tas et vous recevez un message d’exception qui ressemble à ce qui suit :

    Dans minidump. mdmp les instructions d’assembly sur ntdll ! RtlReportCriticalFailure + 62 dans C:\Windows\System32\ntdll.dll de Microsoft Corporation a entraîné une exception inconnue (0xc0000374) sur le thread 235 Dans le cas d’un journal des erreurs, vous pouvez également voir une autre exception : SqlDumpExceptionHandler : le processus 74 a généré une exception irrécupérable c0000005 EXCEPTION_ACCESS_VIOLATION. SQL Server a arrêté ce processus.

  • La pile du fichier de minividage contient des modules tiers dans le processus SqlServer. exe. Par exemple, le fichier de minividage contient les informations suivantes dans les modules Oracle :

    OraOLEDButl11 OraOLEDBrst11 OraOLEDBrst10 Pile d’appels complète : fonction ARG 1 ARG 2 ARG 3 argument 4 ntdll! RtlReportCriticalFailure + 62 00000000 ' 00000002 00000000 ' 00000023 00000000 ' 403cc8a2 00000000 ' 00000003 ntdll! RtlpReportHeapFailure + 26 00000000 ' 403c95f0 00000000 ' 403d7a78 00000000 ' 403d7ab0 00000000 ' 4d200e30 ntdll! RtlpHeapHandleError + 12 00000000 ' 04180000 00000000 ' 00000000 00000000 ' 00000000 00000000 ' 00000000 ntdll! RtlpLogHeapFailure + a4 00000000 ' 403d7b40 00000000 ' 04180000 00000000 ' 403d7b50 00000000 ' 00000008 ntdll! RtlFreeHeap + 1aa8f 00000000 ' 00000020 00000000 ' 403cd850 00000000 ' 00000001 00000000 ' 403d0024 antérieur! CoTaskMemFree + 36 00000000 ' 403d6b00 00000000 ' 00000001 00000000 ' 4d200e30 00000000 ' 00000024 OraOLEDButl11 + 1a5f 00000000 ' 00000001 00000000 ' 4d200e30 00000000 ' 00000024 00000000 ' 403d7ab8 0x403d6b00 00000000 ' 4d200e30 00000000 ' 00000024 00000000 ' 403d7ab8 00000000 ' 24492843 0x00000001 00000000 ' 00000024 00000000 ' 403d7ab8 00000000 ' 24492843 00000000 ' 403b8c00 0x4d200e30 00000000 ' 403d7ab8 00000000 ' 24492843 00000000 ' 403b8c00 00000000 ' 403c95f0 0x00000024 00000000 ' 24492843 00000000 ' 403b8c00 00000000 ' 403c95f0 00000000 ' 403ca610 0x403d7ab8 00000000 ' 403b8c00 00000000 ' 403c95f0 00000000 ' 403ca610 00000000 ' 403ca610 OraOLEDBrst11 + 12843 00000000 ' 403c95f0 00000000 ' 403ca610 00000000 ' 403ca610 00000000 ' 403c95f0 0x403b8c00 00000000 ' 403ca610 00000000 ' 403ca610 00000000 ' 403c95f0 00000000 ' 244928b1 0x403c95f0 00000000 ' 403ca610 00000000 ' 403c95f0 00000000 ' 244928b1 00000000 ' 403d7ab8 0x403ca610 00000000 ' 403c95f0 00000000 ' 244928b1 00000000 ' 403d7ab8 00000000 ' 403c95f0 0x403ca610 00000000 ' 244928b1 00000000 ' 403d7ab8 00000000 ' 403c95f0 00000000 ' 4966a260 0x403c95f0 00000000 ' 403d7ab8 00000000 ' 403c95f0 00000000 ' 4966a260 00000000 ' 05cd21e0 OraOLEDBrst11 + 128b1 00000000 ' 403c95f0 00000000 ' 4966a260 00000000 ' 05cd21e0 00000000 ' 00000000 0x403d7ab8 00000000 ' 4966a260 00000000 ' 05cd21e0 00000000 ' 00000000 00000000 ' 2449ca03 0x403c95f0 00000000 ' 05cd21e0 00000000 ' 00000000 00000000 ' 2449ca03 00000000 ' 4d200e30 0x4966a260 00000000 ' 00000000 00000000 ' 2449ca03 00000000 ' 4d200e30 00000000 ' 00000001 0x05cd21e0 00000000 ' 2449ca03 00000000 ' 4d200e30 00000000 ' 00000001 00000000 ' 05cd21e0

Les produits tiers mentionnés dans le présent article proviennent de sociétés indépendantes de Microsoft. Microsoft exclut toute garantie, implicite ou autre, concernant les performances ou la fiabilité de ces produits.

Cause

Ce problème se produit car le caractère spécial « -- » existe dans la requête vers le serveur lié Oracle. Ces caractères sont utilisés comme symbole de commentaire.

Le processus SQL Server se bloque parce que le fournisseur de serveur lié tiers est chargé à l’intérieur du processus SQL Server et qu’il modifie de manière incorrecte la mémoire de segment qui ne lui appartient pas. Si le tas par défautà l’intérieur d’un processus est instable pour une protection contre l’endommagement des données, le processus est automatiquement arrêté par le système d’exploitation. Si le fournisseur de serveur lié tiers est activé en même temps que l’option autoriser le processus, le processus SQL Server se bloque lorsque ce serveur lié tiers rencontre le problème décrit.

Solution de contournement

Pour contourner ce problème, appliquez l'une des méthodes suivantes :

  • Supprimez le symbole des commentaires.

  • Remplacez le symbole de commentaire par le symbole de commentaires suivant :

    /* */

Informations supplémentaires

Veuillez contacter le fournisseur tiers pour plus d’informations et de correctifs. Pour obtenir la version la plus récente du fournisseur OLEDB, consultez la page suivante :

https://www.oracle.com/technetwork/database/windows/downloads/index-090165.html 

 

Besoin d’aide ?

Développez vos compétences
Découvrez des formations
Accédez aux nouvelles fonctionnalités en avant-première
Rejoindre Microsoft Insider

Ces informations vous ont-elles été utiles ?

Nous vous remercions pour vos commentaires.

Merci pour vos commentaires. Il serait vraisemblablement utile pour vous de contacter l’un de nos agents du support Office.

×