SQL 2012 : compatibilité descendante et mise à niveau

Comment SQL Server 2012 prend il en charge les instances, bases de données ou fonctionnalités de versions antérieures et en particulier SQL 2000 ? Quels impacts sur la mise à niveau ?

Comme c'était le cas avec les versions précédentes, la compatibilité descendante d'une version de SQL Server couvre deux versions antérieures.

Pour SQL Server 2012 (11.0), la version 2008 R2 n'étant pas considérée comme une version à part entière, les versions prises en charge sont donc dans ce cas 2005 (9.0), 2008 (10.0) et 2008 R2 (10.5).

Cette compatibilité s'applique tout d'abord à plusieurs fonctionnalités, qui peuvent poser problème pour la mise à niveau depuis une version trop ancienne (SQL Server 2000)  :

  • La mise à niveau directe de la version (upgrade) vers SQL 2012 n'est supportée qu'à partir de SQL Server 2005 SP4. Venant de SQL Server 2000, une mise à niveau intermédiaire (ou mieux une migration entre instances) s'impose.
  • La restauration de sauvegardes ou attachement de bases de données provenant d'une version antérieure : supportée à partir de SQL Server 2005 seulement. Venant de SQL Server 2000, le passage par 2005 ou 2008/R2 est indispensable. Le message d'erreur est explicite : Msg 3169 La base de données a été sauvegardée sur un serveur exécutant la version 8.00.2039. Cette version est incompatible avec ce serveur, qui exécute la version 11.00.2100. Restaurez la base de données sur un serveur qui prend en charge la sauvegarde ou utilisez une sauvegarde compatible avec ce serveur.

  • Le mode de compatibilité (option de base de données) : SQL Server 2012 ne prend plus en charge le mode de compatibilité 80. S'il vous reste du code TSQL incompatible avec le mode 90 (voir par exemple mon précédent article http://blog.datafly.pro/post/2011/06/12/Migration-:-réécrire-ses-jointures-ANSI-89), il sera nécessaire de le récrire.

  • La connection avec le client natif SQL Server : le client natif 2012 SQLNCLI11 ne peut pas se connecter à une version antérieure à SQL 2005. Ce qui pose en particulier un problème si l'on veut faire de la réplication ou configurer un serveur lié avec SQL 2000. En fin de compte, on y arrive : la réplication peut fonctionner en mode hétérogène en utilisant un client 2008 (SQLNCLI10). Pour la configuration d'un serveur lié c'est un peu plus délicat, voir la solution que je propose sur https://connect.microsoft.com/SQLServer/feedback/details/731869/using-sqlncli10-to-create-a-linked-server-to-sql-server-2000-causes-a-fault

Des fonctionnalités considérées comme dépréciées depuis plusieurs versions sont aussi supprimées. En particulier, SQL 2012 ne prend plus en charge :

  • SQLMail : cette fonctionnalité de messagerie basée sur MAPI est remplacée définitivement par DatabaseMail qui existe depuis SQL Server 2005 !
  • DTS : n'est plus pris en charge dans Management Studio 2012 ni dans la base système msdb. Le remplacement est bien entendu SSIS, qui nécessite généralement une grande part de réécriture. A noter aussi que l'assistant de migration depuis DTS étant lui aussi supprimé, il faudra passer par une version intermédiaire pour les fonctionnalités de migration. Il est cependant toujours possible d'installer le runtime dts sur un serveur et de lancer des packages DTS stockés en fichiers par l'exécutable DTSRUN.

Ceci sans parler des nombreuses autres fonctionnalités ou syntaxes supprimées ou modifiées dans cette version (voir site technet) auxquelles il faudra ajouter, si l'on vient de SQL 2000, celles déjà disparues ou modifiées avec SQL 2005 ou SQL 2008.

Moralité : il vaut mieux ne pas se laisser distancer par le rythme des versions, un écart de plus de 2 versions peut compliquer considérablement les opérations de mise à niveau !

Pour anticiper les choses, vous pouvez, depuis SQL Server 2005, identifier le code obsolète (ou qui va le devenir) grâce au profiler : deux évènements de trace sont à votre disposition.

  • Deprecation Announcement : fonctions qui seront supprimées mais pas encore dans la prochaine version
  • Deprecation Final Support : fonctions qui seront supprimées dans la prochaine version

Et vous avez même depuis SQL 2008 un compteur de l'analyseur de performances "Deprecated Features" pour évaluer l'ampleur des dégâts...

Bonne migration, si ce n'est pas déjà fait...