Migration de Microsoft SQL Server 2008 vers SQL Server 2008 R2 en mode silencieux

Introduction

2 précédents articles, parus respectivement en novembre 2010 et février 2011, présentaient les installations en mode silencieux (silent install) de serveurs de bases de données MS SQL Server 2008 (sans les autres composants Analysis Services, Integration Services, MS Reporting etc...):

Le cas de la migration en mode silencieux d'un serveur de bases de données Microsoft SQL Server 2008 vers Microsoft SQL Server 2008 R2 est à présent abordé en s'attardant sur la méthodologie et les opérations réalisées durant cette migration. Il s'agit d'une instance MS SQL Server par défaut (SRVWINFR24) et non une instance nommée.

Avant la migration, le conseiller de migration vers SQL Server 2008 R2 (Upgrade Advisor) a scanné l'instance en question et n'a pas détecté d'incompatibilités pour une migration de SQL Server 2008 vers SQL Server 2008 R2. Pour plus d'informations sur le conseiller de migration SQL Server 2008 R2 : Installation et utilisation à distance en ligne de commandes du conseiller de migration Microsoft SQL 2008 R2 (upgrade advisor) »

Migration en mode silencieux de SQL Server 2008 vers SQL Server 2008 R2 avec un fichier de configuration

SQL_2008_ENT_R2 correspond au répertoire contenant la distribution d'installation de SQL Server 2008 R2 (en local ou partage réseau). La migration est réalisée avec la ligne de commande suivante :

start /wait SQL_2008_ENT_R2\setup.exe /configurationfile=upgrade.ini
                /Q /IACCEPTSQLSERVERLICENSETERMS 

Le fichier de configuration upgrade.ini est un format INI classique de type TAG=VALEUR.

Pour une migration le paramètre ACTION doit être Upgrade dans le fichier de configuration qui ressemble à ceci (les éléments les plus importants étant spécifiés au début du fichier de configuration) :

upgrade.ini
;SQLSERVER2008 Configuration File
[SQLSERVER2008]

INSTANCEID="MSSQLSERVER"
INSTANCENAME="MSSQLSERVER"

; Specifies a Setup work flow, like INSTALL, UNINSTALL, or UPGRADE.
; This is a required parameter. 
ACTION="Upgrade"

FAILOVERCLUSTERROLLOWNERSHIP="2"
FTUPGRADEOPTION="Import"

 ...

HELP="False"
INDICATEPROGRESS="False"
QUIET="False"
QUIETSIMPLE="False"
X86="False"
ENU="True"
UIMODE="Normal"
ERRORREPORTING="False"
SQMREPORTING="False"
ISSVCSTARTUPTYPE="Automatic"
ISSVCACCOUNT="NT AUTHORITY\NetworkService"
BROWSERSVCSTARTUPTYPE="Disabled"
RSCATALOGSERVERINSTANCENAME="Unknown"

Toutes les entrées spécifiées dans le fichier de configuration peuvent être passées en paramètre à setup.exe. ACTION="Upgrade" dans le fichier ini devient /ACTION=upgrade lorsque ce paramètre est donné à la ligne de commande setup. La ligne de commande surcharge le fichier ini, cela signifie que si une valeur est définie à la fois dans le fichier ini et passée en paramètre, c'est la valeur passée en paramètre qui est prise en compte.

Chaque exécution du setup créé les fichiers de log dans un nouveau répertoire horodaté YYYYMMDD_hhmmss dans le répertoire %programfiles%\Microsoft SQL Server\100\Setup Bootstrap\Log\.

Quelques remarques notables à propos de quelques paramètres :

Paramètres Commentaire
INSTANCEID Paramètre obligatoire lorsqu'il s'agit d'une migration depuis SQL Server 2008. Pour SQL Server 2000 et SQL Server 2005, ce paramètre est optionnel. Le paramètre INSTANCEID est utilisé pour spécifier où installer les composants de l'instance (binaires...) ainsi que le chemin dans la base de registres. INSTANCEID doit être unique. Pour une instance base de données SQL Server 2008 : SQLInstanceID = MSSQL10_50.<INSTANCEID> Ce qui génèrera l'installation des composants SQL 2008 R2 propres à l'instance (binaires, clés de registres...) dans le répertoire %Program Files%\Microsoft SQL Server\<SQLInstanceID>
INSTANCENAME Paramètre qui indique le nom de l'instance SQL Server à migrer. MSSQLSERVER lorsqu'il s'agit d'une instance par défaut, <nom de l'instance> pour une instance nommée.
FAILOVERCLUSTERROLLOWNERSHIP Paramètre qui contrôle le comportement des bascules FAILOVER lorsqu'il s'agit de noeuds d'un cluster MS SQL Server 2008. Avec SQL Server 2008 R2, la migration doit être réalisée noeud par noeud en commençant par les noeuds passifs. Par défaut (2), lorsque la moitié au moins des noeuds a été migrée, le Setup de la migration basculera sur un noeud migré en SQL 2008 R2. Pour ce paramètre :
  • 0 : Aucune bascule automatique vers les noeuds migrés en SQL 2008 R2 est réalisée et le noeud en cours de migration n'est pas ajouté dans la liste des propriétaires possibles du cluster MS SQL à la fin de la migration.
  • 1 : Une bascule automatique est réalisée vers un noeud migré en SQL 2008 R2 et le noeud en cours de migration est ajouté dans la liste des propriétaires possibles du cluster MS SQL à la fin de la migration.
  • 2 : comportement par défaut. Le setup gère la bascule automatique vers un noeud migré vers SQL 2008 R2 lorsqu'au moins la moitié des noeuds est migrée vers SQL Server 2008 R2.
FTUPGRADEOPTION La migration de la fonctionnalité fulltext , si elle est mise en place, est réalisée selon trois modes possibles grâce au paramètre FTUPGRADEOPTION. Le choix de la méthode dépend du volume des indexes fulltext.
  • REBUILD
  • RESET
  • IMPORT

Veiller à ne bien utiliser que les paramètres autorisés par le mode "UPGRADE", dans le cas contraire, la migration silencieuse est en échec. Voici un exemple dans lequel le paramètre non autorisé SQLSVCPASSWORD (mot de passe du compte de service AD exécutant l'instance SQL Server 2008) est donné au setup :

Slp: Exception type: Microsoft.SqlServer.Chainer.Infrastructure.InputSettingValidationException
 Slp:     Message: 
 Slp:         The setting 'SQLSVCPASSWORD' is not allowed when the value of setting 'ACTION' is 'Upgrade'.
 Slp:     Data: 
 Slp:       SQL.Setup.FailureCategory = InputSettingValidationFailure
 Slp:       DisableWatson = true
 Slp:     Stack: 
 ...
 Slp: ----------------------------------------------------
 Slp: Error result: -2068578299
 Slp: Result facility code: 1204
 Slp: Result error code: 5

Opérations principales réalisées

Attardons nous à présent sur les opérations réalisées et plus particulièrement l'étape de migration de l'instance SQL Server 2008 R2 en elle-même.

Dans le répertoire %programfiles%\Microsoft SQL Server\100\Setup Bootstrap\Log\YYYYMMDD_HHMMSS généré lors du setup, comme son nom l'indique le fichier Summary_<instancename>_YYYYMMDD_HHMMSS.txt résume assez bien les opérations réalisées : détection des composants à migrer, statuts des composants migrés... Voici des extraits

Détection des composants à migrer :

Product features discovered:
  Product           Instance      Instance ID            Feature                               
           Language   Edition              Version         Clustered 

  Sql Server 2008   MSSQLSERVER   MSSQL10.MSSQLSERVER    Database Engine Services              
           1033       Enterprise Edition   10.0.1600.22    No        

  Sql Server 2008   MSSQLSERVER   MSSQL10.MSSQLSERVER    SQL Server Replication         
           1033       Enterprise Edition   10.0.1600.22    No        

  Sql Server 2008   MSSQLSERVER   MSSQL10.MSSQLSERVER    Full-Text Search              
           1033       Enterprise Edition   10.0.1600.22    No        

  Sql Server 2008                                        Management Tools - Basic         
           1033       Enterprise Edition   10.0.1600.22    No        

  Sql Server 2008                                        Management Tools - Complete     
           1033       Enterprise Edition   10.0.1600.22    No        

  Sql Server 2008                                        Client Tools Connectivity       
           1033       Enterprise Edition   10.0.1600.22    No        

  Sql Server 2008                                        Client Tools Backwards Compatibility
           1033       Enterprise Edition   10.0.1600.22    No 

Statut de la migration des composants :

Detailed results:
...
  Feature:                       Database Engine Services
  Status:                        Passed
  MSI status:                    Passed
  Configuration status:          Passed
...

Que se passe-t-il plus spécifiquement pour le moteur de bases de données SQL Server lors de cette migration ? Ce sont les fichiers de log SQLServer_ERRORLOG_YYYY-MM-DDTHH.MM.SS.txt créés dans le répertoire des fichiers de log qui nous en disent beaucoup.

Lorsque les composants SQL 2008 R2 (binaires sqlservr etc...) sont prêts dans le répertoire %Program Files%\Microsoft SQL Server\MSSQL10_50.<INSTANCEID>, l'instance est démarrée avec SQL Server 2008 R2 avec les paramètres de démarrage supplémentaires ci-dessous dans la ligne de commandes :

  • -m SqlSetup (démarrage en mode single user et connexion à l'instance réservée uniquement au programme SqlSetup).
  • -T 4022 (trace flag pour empêcher le démarrage automatique des procédures stockées).
  • -T 4010 (trace flag non documenté).
  • -T 1905 (trace flag non documenté).
... Server      (c) Microsoft Corporation.
 ... Server      All rights reserved.
 ... Server      Server process ID is 5848.
 ... Server      Authentication mode is MIXED.
 ... Server      Logging SQL Server messages in file 'E:\MSSQL\MSSQLSERVER\MSSQL.1\MSSQL\LOG\ERRORLOG'.
 ... Server      Registry startup parameters: 
 -d E:\MSSQL\MSSQLSERVER\MSSQL.1\MSSQL\DATA\master.mdf
 -e E:\MSSQL\MSSQLSERVER\MSSQL.1\MSSQL\LOG\ERRORLOG
 -l E:\MSSQL\MSSQLSERVER\MSSQL.1\MSSQL\DATA\mastlog.ldf
 ... Server      Command Line Startup Parameters:
 -m SqlSetup
 -T 4022
 -T 4010
 -T 1905

Les bases systèmes master et model et non systèmes sont ensuite migrées :

 ... spid10s     Converting database 'model' from version 655 to the current version 661.
 ... spid10s     Database 'model' running the upgrade step from version 655 to version 660.
 ... spid10s     Database 'model' running the upgrade step from version 660 to version 661.
 ... spid10s     CHECKDB for database 'model' finished without errors 
 ...

Vient ensuite l'exécution de scripts SQL pour la mise à jour des objets et procédures systèmes de la base système msdb, du log shipping, des tables systèmes pour SSIS, la réplication etc... La sortie est très verbeuse, en voici seulement quelques extraits :

spid7s      ----------------------------------
spid7s      Starting execution of INSTMSDB.SQL
spid7s      ----------------------------------
 ...
spid7s      Dropping procedure [dbo].[sp_syscollector_create_collection_item]...
spid7s      Creating procedure [dbo].[sp_syscollector_create_collection_item]...
 ...
spid7s      Upgrading SQL Server Log Shipping...
spid7s      Upgraded SQL Server Log Shipping successfully.
 ...
spid7s      Upgrading Database Mail related objects...
spid7s      Completed upgrade of Database Mail related objects...
 ...
spid7s      Executing replication upgrade scripts.
spid7s      Executing sp_vupgrade_replication.
 ...

L'instance est ensuite redémarrée en mode normal avec les binaires de SQL Server 2008 R2.