Une base de données à partir d'une version antérieure de SQL Server deviendrait inutilisable lorsque vous l'attachez à une instance de SQL Server 2012

Traductions disponibles Traductions disponibles
Numéro d'article: 2710782 - Voir les produits auxquels s'applique cet article
Agrandir tout | Réduire tout

Sommaire

Symptômes

Envisagez le scénario suivant :
  • Vous installez une instance de Microsoft SQL Server 2005, Microsoft SQL Server 2008 ou de Microsoft SQL Server 2008 R2.
  • L'instance de SQL Server est nommée INST1 et héberge une base de données nommé Test_RO_FG_DB.
  • La base de données contient les groupes de fichiers suivants :
    • Principal
    • RO_FG
    • RW_FG
  • Le groupe de fichiers nommé RO_FG est marquée comme READ_ONLY.
  • Vous installez une nouvelle instance de Microsoft SQL Server 2012. Cette instance de SQL Server 2012 est nommée Inst2 la.
  • Vous détachez la base de données Test_RO_FG_DB INST1.
  • Vous essayez d'attacher la base de données Test_RO_FG_DB à Inst2 la.
  • Vous recevez un message d'erreur semblable au suivant :
    Msg 3415, niveau 16, état 2, ligne 1
    Base de données « Test_RO_FG_DB » ne peut pas être mis à niveau, car il est en lecture seule, a des fichiers en lecture seule ou l'utilisateur ne dispose pas des autorisations pour modifier certains fichiers. Rendre la base de données ou fichiers inscriptible et réexécutez la récupération.
  • Vous essayez de rattacher la base de données Test_RO_FG_DB INST1.
Dans ce scénario, vous ne pouvez pas rattacher à INST1. Et, vous recevez le message d'erreur suivant dans le journal des erreurs de SQL Server :

2012-05-03 22:55:45.37 spid52 démarrage de la base de données 'Test_RO_FG_DB'.
2012-05-03 22:55:45.78 spid52 * *******************************************************************************
2012-05-03 22:55:45.78 spid52 * commencer le vidage de pile :
spid52 de 22:55:45.78 2012-05-03 * 03/05/12 22 : 55 : 45 spid 52
2012-05-03 22:55:45.78 spid52 * emplacement : logscan.cpp:1490
2012-05-03 22:55:45.78 spid52 * Expression : FALSE
2012-05-03 22:55:45.78 spid52 * SPID : 52
2012-05-03 22:55:45.78 spid52 * ID de processus : 9156
2012-05-03 22:55:45.78 spid52 * Description : valeur de commutateur non valide
2012-05-03 22:55:45.78 spid52 * 98 de mémoire tampon d'entrée octets -
2012-05-03 22:55:45.78 spid52 * modifier la base de données Test_RO_FG_DB en ligne
2012-05-03 22:55:51.05 spid52 erreur : 17065, gravité : 16, état: 1.
2012-05-03 22:55:51.05 spid52 SQL Server Assertion : fichier : <logscan.cpp>, ligne = Échec de l'Assertion 1490 = valeur 'FALSE' commutateur non valide. Cette erreur peut être liée à la synchronisation. Si l'erreur persiste après la réexécution de l'instruction, utilisez DBCC CHECKDB pour vérifier la base de données pour l'intégrité structurelle ou redémarrez le serveur afin de garantir des structures de données en mémoire ne sont pas endommagés.
2012-05-03 22:55:51.10 spid52 erreur : 3624, gravité : 20, état: 1.
vérification d'assertion 2012-05-03 22:55:51.10 spid52 un système a échoué. Vérifiez le journal des erreurs de SQL Server pour plus d'informations. En règle générale, un échec d'assertion est dû à une corruption de données ou bogue logiciel. Pour vérifier la base de données, envisagez d'exécuter DBCC CHECKDB. Si vous avez accepté d'envoyer des dumps à Microsoft pendant l'installation, un mini vidage est envoyé à Microsoft. Une mise à jour peut-être être disponible auprès de Microsoft dans le dernier Service Pack ou un correctif QFE auprès du Support technique.
2012-05-03 22:56:09.16 spid52 erreur : 3414, gravité : 21, état: 1.
2012-05-03 22:56:09.16 spid52 une erreur s'est produite pendant la restauration, empêche le redémarrage de la base de données 'Test_RO_FG_DB' (base de données ID 19). Diagnostiquer les erreurs de récupération et les corriger ou restaurer à partir d'une sauvegarde correcte. Si des erreurs ne sont pas corrigées ou attendus, contactez le Support technique.
Erreur de spid52 22:56:09.18 2012-05-03 : 928, gravité : 20, état: 1.
2012-05-03 22:56:09.18 spid52 lors de la mise à niveau, l'exception de la base de données déclenché 926, gravité 14, état 1, l'adresse 0000000000F6A971. Utilisez le numéro d'exception pour déterminer la cause.</logscan.cpp>


Remarque : Ce problème se produit uniquement lorsque vous essayez d'attacher une base de données qui contient un groupe de fichiers qui est marquée READ_ONLY. Ce problème ne se produit pas lorsque vous essayez de déplacer une base de données READ_ONLY dans lequel toutes les données est marquée READ_ONLY.

Cause

Ce problème se produit car SQL Server 2012 ne détecte pas le groupe de fichiers en lecture seule avant de commencer à mettre à niveau la base de données. Après que la mise à niveau a démarré, SQL Server 2012 écrit des entrées dans le journal des transactions. Les versions antérieures ne peut pas lire les nouvelles entrées de journal de transactions.

Statut

Microsoft a confirmé qu'il s'agit d'un problème pour les produits Microsoft répertoriés dans la section « S'applique à ».

Résolution

Informations de mise à jour cumulative

SQL Server 2012

Le correctif de ce problème a été tout d'abord publié de mise à jour Cumulative 2 pour SQL Server 2012. Pour plus d'informations sur ce package de mise à jour cumulative, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
2703275 Package de mise à jour cumulative 2 pour SQL Server 2012
Remarque Les versions étant cumulatives, chaque nouvelle version de correctif contient tous les correctifs et correctifs de sécurité inclus avec la précédente 2012 de SQL Server version du correctif. Microsoft vous recommande l'application la plus récente version du correctif qui comprendra ce correctif. Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
2692828 L'année 2012 SQL Server versions publiées après la publication de SQL Server 2012
Vous devez appliquer un correctif SQL Server 2012 à une installation de SQL Server 2012.

Contournement

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

Méthode 1

Restaurer une sauvegarde de la base de données à partir de INST1 sur Inst2 la.

Remarque : Le problème décrit dans la section « Symptômes » ne se produit pas dans SQL Server 2012 lorsque vous restaurez une sauvegarde d'une version antérieure.

Méthode 2

Effectuer une réinstallation de la version antérieure de SQL Server à SQL Server 2012.

Méthode 3

Déplacer une base de données qui contient un groupe de fichiers en lecture seule à une instance de SQL Server 2012. Pour ce faire, procédez comme suit.

Remarque : Exécutez les étapes 4 à 11 sur le serveur qui exécute SQL Server 2012. Par exemple, exécutez les étapes 4 à 11 sur Inst2 la.
  1. Sur INST1, détachez la base de données. Par exemple, détachez la base de données Test_RO_FG_DB.
  2. Déplacer les fichiers de base de données vers le serveur qui héberge l'instance Inst2 la.
  3. Essayez d'attacher la base de données pour Inst2 la. L'exemple de code suivant montre comment effectuer cette opération :
    CREATE DATABASE [Test_RO_FG_DB] ON PRIMARY ( NAME = N'Test_RO_FG', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RO_FG.mdf' ), 
    FILEGROUP [RO_FG] ( NAME = N'Test_RO_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RO_FG_File1.ndf' ), 
    FILEGROUP [RW_FG] ( NAME = N'Test_RW_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RW_FG_File1.ndf' )
    LOG ON ( NAME = N'Test_RO_FG_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RO_FG_log.ldf' )
    FOR ATTACH;
    GO
    Remarque : Vous recevrez le message d'erreur 3425 qui est mentionné dans la section « Symptômes ».
  4. À l'invite de commandes, renommez les fichiers de base de données. L'exemple de commande suivant montre comment effectuer cette opération :
    rename Test_RO_FG.mdf original_Test_RO_FG.mdf
    rename Test_RO_FG_File1.ndf original_Test_RO_FG_File1.ndf
    rename Test_RW_FG_File1.ndf original_Test_RW_FG_File1.ndf
    rename Test_RO_FG_log.ldf original_Test_RO_FG_log.ldf
  5. Dans SQL Server Management Studio, créez une base de données ayant le même nom et la structure physique que la base de données que vous voulez joindre. L'exemple de code suivant montre comment effectuer cette opération :
    CREATE DATABASE [Test_RO_FG_DB] ON PRIMARY ( NAME = N'Test_RO_FG_DB', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RO_FG_DB.mdf' , SIZE = 4072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ), 
    FILEGROUP [RO_FG] ( NAME = N'Test_RO_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RO_FG_File1.ndf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ), 
    FILEGROUP [RW_FG] ( NAME = N'Test_RW_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RW_FG_File1.ndf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
    LOG ON ( NAME = N'Test_RO_FG_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RO_FG_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
    GO
  6. Définir la base de données en mode hors connexion. Pour ce faire, exécutez la commande suivante :
    ALTER DATABASE [Test_RO_FG_DB] SET OFFLINE
    GO
  7. À l'invite de commandes, renommez les fichiers dans la nouvelle base de données. L'exemple de commande suivant montre comment effectuer cette opération :
    rename Test_RO_FG.mdf new_Test_RO_FG.mdf
    rename Test_RO_FG_File1.ndf new_Test_RO_FG_File1.ndf
    rename Test_RW_FG_File1.ndf new_Test_RW_FG_File1.ndf
    rename Test_RO_FG_log.ldf new_Test_RO_FG_log.ldf
  8. À l'invite de commandes, renommez les fichiers de base de données que vous avez déplacé à l'étape 2. Renommez les fichiers pour correspondre à la base de données que vous avez créé à l'étape 4. L'exemple de commande suivant montre comment effectuer cette opération :
    rename original_Test_RO_FG.mdf Test_RO_FG.mdf 
    rename original_Test_RO_FG_File1.ndf Test_RO_FG_File1.ndf 
    rename original_Test_RW_FG_File1.ndf Test_RW_FG_File1.ndf 
    rename original_Test_RO_FG_log.ldf Test_RO_FG_log.ldf
  9. Définir la base de données en ligne. Pour ce faire, exécutez la commande suivante :
    ALTER DATABASE [Test_RO_FG_DB] SET ONLINE
    GO
  10. Vérifiez que la base de données est en ligne, puis rétablir la fonctionnalité Service Broker.
  11. Supprimez les fichiers de base de données qui ne sont pas nécessaires. L'exemple de commande suivant montre comment effectuer cette opération :
    del /P new_Test_RO_FG.mdf
    del /P new_Test_RO_FG_File1.ndf
    del /P new_Test_RW_FG_File1.ndf
    del /P new_Test_RO_FG_log.ldf
Méthode 4

Rattachez une base de données qui contient un groupe de fichiers en lecture seule à l'instance précédente de SQL Server. Pour ce faire, procédez comme suit.

Notes
  • La base de données contient également les nouvelles entrées du journal des transactions à partir de la mise à niveau a échoué.
  • Les étapes 3 à 10 sur le serveur qui exécute une version antérieure de SQL Server. Par exemple, les étapes 3 à 10 sur INST1.

  1. Déplacez les fichiers de base de données à l'instance de SQL Server qui héberge INST1.
  2. Essayez d'attacher la base de données à INST1. L'exemple de code suivant montre comment effectuer cette opération :
    CREATE DATABASE [Test_RO_FG_DB] ON PRIMARY ( NAME = N'Test_RO_FG_DB', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RO_FG_DB.mdf' ), 
    FILEGROUP [RO_FG] ( NAME = N'Test_RO_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RO_FG_File1.ndf' ), 
    FILEGROUP [RW_FG] ( NAME = N'Test_RW_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RW_FG_File1.ndf' )
    LOG ON ( NAME = N'Test_RO_FG_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RO_FG_log.ldf' )
    FOR ATTACH
    GO
    Remarque : Vous recevrez le message d'erreur 3624 qui est mentionné dans la section « Symptômes ». Vous recevrez également un message d'erreur 1813.
  3. À l'invite de commandes, renommez les fichiers de base de données sur INST1. L'exemple de commande suivant montre comment effectuer cette opération :
    rename Test_RO_FG.mdf original_Test_RO_FG.mdf
    rename Test_RO_FG_File1.ndf original_Test_RO_FG_File1.ndf
    rename Test_RW_FG_File1.ndf original_Test_RW_FG_File1.ndf
    rename Test_RO_FG_log.ldf original_Test_RO_FG_log.ldf
  4. Dans SQL Server Management Studio, créez une base de données ayant le même nom et la structure physique que la base de données que vous voulez joindre. L'exemple de code suivant montre comment effectuer cette opération :
    CREATE DATABASE [Test_RO_FG_DB] ON PRIMARY ( NAME = N'Test_RO_FG_DB', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RO_FG_DB.mdf' , SIZE = 4072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ), 
    FILEGROUP [RO_FG] ( NAME = N'Test_RO_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RO_FG_File1.ndf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ), 
    FILEGROUP [RW_FG] ( NAME = N'Test_RW_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RW_FG_File1.ndf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
    LOG ON ( NAME = N'Test_RO_FG_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RO_FG_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
    GO
  5. Définir la base de données en mode hors connexion. Pour ce faire, exécutez la commande suivante :
    ALTER DATABASE [Test_RO_FG_DB] SET OFFLINE
    GO
  6. À l'invite de commandes, renommez les fichiers dans la nouvelle base de données. L'exemple de commande suivant montre comment effectuer cette opération :
    rename Test_RO_FG.mdf new_Test_RO_FG.mdf
    rename Test_RO_FG_File1.ndf new_Test_RO_FG_File1.ndf
    rename Test_RW_FG_File1.ndf new_Test_RW_FG_File1.ndf
    rename Test_RO_FG_log.ldf new_Test_RO_FG_log.ldf
  7. À l'invite de commandes, renommez les fichiers de base de données que vous avez déplacé à l'étape 2. Renommez les fichiers pour correspondre à la base de données que vous avez créé à l'étape 4. L'exemple de commande suivant montre comment effectuer cette opération :
    rename original_Test_RO_FG.mdf Test_RO_FG.mdf 
    rename original_Test_RO_FG_File1.ndf Test_RO_FG_File1.ndf 
    rename original_Test_RW_FG_File1.ndf Test_RW_FG_File1.ndf 
    rename original_Test_RO_FG_log.ldf Test_RO_FG_log.ldf
  8. Définissez la base de données en mode d'urgence et effectuer une réparation. Pour ce faire, exécutez la commande suivante.

    Remarque : Les journaux des transactions de base de données sont recréés au cours de cette étape. Cela peut entraîner des pertes de données. Par conséquent, nous vous recommandons de sauvegarder la base de données avant d'effectuer cette étape.
    ALTER DATABASE Test_RO_FG_DB SET EMERGENCY
    GO
    ALTER DATABASE Test_RO_FG_DB SET SINGLE_USER
    GO
    DBCC CHECKDB (Test_RO_FG_DB, repair_allow_data_loss) WITH ALL_ERRORMSGS
    GO
    ALTER DATABASE Test_RO_FG_DB SET MULTI_USER
    GO
  9. Vérifiez que la base de données est en ligne, puis rétablir la fonctionnalité Service Broker.
  10. Supprimez les fichiers de base de données qui ne sont pas nécessaires. L'exemple de commande suivant montre comment effectuer cette opération :
    del /P new_Test_RO_FG.mdf
    del /P new_Test_RO_FG_File1.ndf
    del /P new_Test_RW_FG_File1.ndf
    del /P new_Test_RO_FG_log.ldf

Plus d'informations

Il existe plusieurs étapes qui se produisent lorsqu'une base de données est attaché à une instance de SQL Server. Ces étapes comprennent la récupération de la base de données et mise à niveau des fichiers des versions antérieures de SQL Server.

Dans le problème décrit dans la section « Symptômes », SQL Server 2012 commence le processus de mise à niveau avant les fichiers en lecture seule dans la base de données sont détectées. Les étapes de mise à niveau incluent le démarrage d'une transaction pour effacer le bit « arrêtée » dans la page de démarrage de la base de données. Les versions antérieures de SQL Server Impossible de lire l'enregistrement du début de transaction. Par conséquent, la base de données n'est pas utilisable dans les versions antérieures de SQL Server et SQL Server génère l'erreur 3624.

Mises à niveau sur place lorsqu'une base de données est marquée comme étant en lecture seule

Lorsque vous effectuez une mise à niveau sur place d'une instance de SQL Server qui contient une base de données en lecture seule qui est nommé Test_RO_DB à SQL Server 2012, vous pouvez recevoir des messages d'erreur semblables aux suivants dans le journal des erreurs de SQL Server :

2012-05-04 21:03:59.23 spid19s 'Test_RO_DB' de la base de données en cours de démarrage.
base de données 21:03:59.56 2012-05-04 spid19s conversion de 'Test_RO_DB' à partir de la version 661 vers la version actuelle 706.
Erreur de spid19s de 21:03:59.56 2012-05-04 : 928, gravité : 20, état: 1.
2012-05-04 21:03:59.56 spid19s au cours de mise à niveau, base de données déclenché exception 3415, gravité 16, état 1, adresse 000007FEE66D784A. Utilisez le numéro d'exception pour déterminer la cause.
2012-05-04 21:03:59.61 spid19s erreur : 3415, gravité : 16, état: 1.
2012-05-04 21:03:59.61 spid19s 'Test_RO_DB' ne peut pas être mise à niveau, car il est en lecture seule, a des fichiers en lecture seule ou l'utilisateur ne dispose pas des autorisations pour modifier certains fichiers. Rendre la base de données ou fichiers inscriptible et réexécutez la récupération.


À la fin du processus de mise à niveau, la base de données Test_RO_DB sera dans l'état RECOVERY_PENDING. Vous devez utiliser la commande ALTER DATABASE pour définir la base de données READ_WRITE. Puis utilisez la commande ALTER DATABASE pour définir la base de données READ_ONLY. Ainsi, le moteur de SQL Server la base de données de mise à niveau vers la version correcte.

Place mises à niveau lorsqu'une base de données en lecture-écriture contient des groupes de fichiers qui sont marqués en lecture seule

Lorsque vous effectuez une mise à niveau sur place à SQL Server 2012, vous pouvez recevoir des messages semblables aux suivants dans le journal des erreurs SQL Server. Ce problème se produit lorsque l'instance antérieure de SQL Server héberge une base de données en lecture-écriture et contient les groupes de fichiers qui sont marqués READ_ONLY. Toutefois, la mise à niveau terminée comme prévu et démarrage de la base de données en ligne.

Remarque : Dans le message d'erreur suivant, la base de données est nommé Test_RO_FG :

2012-05-04 21:03:59.23 spid18s 'Test_RO_FG' de la base de données en cours de démarrage.
base de données 21:03:59.71 2012-05-04 spid18s conversion de 'Test_RO_FG' à partir de la version 661 vers la version actuelle 706.
2012-05-04 21:03:59.71 spid18s base de données 'Test_RO_FG' exécution de l'étape de mise à niveau à partir de version 661 version 668.



Propriétés

Numéro d'article: 2710782 - Dernière mise à jour: lundi 18 juin 2012 - Version: 2.0
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft SQL Server 2012 Enterprise
Mots-clés : 
kbsurveynew kbprb kbtshoot kbmt KB2710782 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 2710782
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com