web-dev-qa-db-fra.com

Quand SP_OACREATE ET. Al. devenir obsolète?

J'ai eu un problème sur une instance de SQL Server que je soutiens et que de nombreux sites de piles ont des informations sur ces fonctionnalités, mais la plupart d'entre eux disent essentiellement "N'utilisez pas celles-ci; ils sont obsolètes/buggy/fuites". Je vais essayer de mettre en œuvre des contours de travail pour ma question spécifique, mais ma question est de savoir quand des fonctionnalités telles que sp_OACreate et sp_OAMethod devenir obsolète? Je dois expliquer cela à mon administrateur SYS et à mon patron afin de justifier une réécriture et je ne suis pas tout simplement abordé par Googling (bien que mes termes de recherche soient peut-être pauvres).

3
akousmata

Bien que je n'ai pas été incapable de trouver un avis officiel de déprécation pour le OLE Automation STOCTRESH PROCÉDURES STANDÉES (sp_OA*), Je crois qu'ils sont généralement considérés comme obsolètes de la libération de SQL Server 2005. Les procédures stockées étendues, d'autre part, étaient officiellement obsolète à partir de SQL Server 2005. Ces deux caractéristiques ont été obsolètes par l'introduction de la fonctionnalité d'intégration CLR (IE SQLCLR).

Lorsque les fonctionnalités sont obsolètes, elles sont énumérées dans la documentation suivante:

fonctionnalités de moteur de base de données obsolètes dans SQL Server 2005

Ce lien vous amène à la version SQL Server 2005 du document. Vous pouvez utiliser la liste déroulante vers le haut pour vérifier d'autres versions. Aucune version semble énumérer "OLE Automation" ou "SP_OA", il apparaît donc que la fonctionnalité n'est pas officiellement obsolète.

Oui, vous avez entendu correctement que le OLE = Buggy and Fuel (ou au moins ont été à différents niveaux de pack de services/services). Ils sont moins sécurisés que SQLCLR (l'automatisation OLE Procédures stockées "La fonctionnalité est activée ou désactivée; il n'y a pas de contrôle sur qui utilise la fonctionnalité si activé ou comment elle est utilisée, qui sont toutes deux contrôlables - à un degré - dans SQLCLR).

Aussi, autant que j'ai vu, le OLE = API API (IE COM) n'a pas été mis à jour pour travailler avec des types de données introduits à partir de SQL Server 2005 (c'est-à-dire des types max, XML, DATE, TIME, DATETIMEOFFSET, types de CLR, etc.).

Vous devriez utiliser SQLCLR au lieu de sp_OA* Procédures stockées pour tout nouveau code. Pour le code existant qui fonctionne, il convient probablement de le laisser tel quel. Mais si cela existe sp_OA* Le code devrait casser, alors il serait préférable de réécrire comme SQLCLR au lieu d'essayer d'obtenir le sp_OA* Approche Travailler.

4
Solomon Rutzky