4
votes

Possibilité de RESTAURER la base de données MYSQL de l'ancienne version dans SQL Server 2017 sans la mettre à jour?

J'effectue avec succès une restauration quotidienne d'une sauvegarde d'une version antérieure sur MS SQL 2017 à l'aide de T-SQL.

Cependant, pendant la restauration, la base de données est mise à niveau vers la version actuelle.

Ceci est un problème car je souhaite modifier la base de données, puis faire une sauvegarde qui est ensuite transférée et restaurée sur un autre système qui utilise la même version antérieure de MS SQL.

Est-il possible d'exécuter le RESTORE sans la base de données en cours de mise à jour?

J'ai parcouru la documentation T-SQL et je n'ai pas trouvé cette référence.

Le code T-SQL que j'utilise est:

USE master
GO
ALTER DATABASE Polly SET SINGLE_USER
with ROLLBACK IMMEDIATE
GO

RESTORE DATABASE Polly FROM DISK = 'C:\data\Polly.bak';
GO

USE Polly
DELETE FROM SytLog;
GO

ALTER DATABASE Polly SET MULTI_USER
GO

Si quelqu'un a des améliorations générales à ci-dessus, je suis heureux de vos suggestions.

Lorsque ce qui précède s'exécute, je reçois: Base de données 'Polly' exécutant l'étape de mise à niveau de la version 782 à la version 801. ... Base de données 'Polly' exécutant l'étape de mise à niveau de la version 868 à la version 869.

Je ne souhaite aucune étape de mise à niveau, mais uniquement si la base de données est toujours utilisable.


11 commentaires

sans que la base de données ne soit mise à niveau pourquoi? Vous pouvez définir le niveau de compatibilité de la base de données si vous souhaitez qu'elle soit traitée comme une version plus ancienne. Empêcher la mise à niveau n'aurait de sens que si vous vouliez prendre ces fichiers de base de données et les attacher à une version plus ancienne.


Vérifiez les remarques sur les niveaux de compatibilité . Si la sauvegarde provient de SQL Server 2008 ou d'une version ultérieure, elle reste la même.


@PanagiotisKanavos - c'est ce que l'OP veut faire, le modifier et sauvegarder / restaurer une version précédente.


Non, ce n'est pas possible. Une fois qu'une base de données est attachée à une version plus récente de SQL Server, vous ne pouvez pas la remettre en place. La seule option dans ce cas est d'exporter / d'importer les données. Si vous avez besoin de modifier la base de données et de la replacer sur l'ancien serveur, vous devez installer un serveur avec la même ancienne version et y effectuer les restaurations!


@AndreyNikolov - c'est la réponse qui doit être publiée, pouvez-vous la convertir en une seule?


@Andrew, c'est une autre chose impossible - le déclassement. Il y a des doublons à ce sujet


Copie possible de la restauration de la sauvegarde de la base de données SQL Server sur la version inférieure


Panagiotis Kanavos - ne veut pas qu'il soit mis à niveau pour exactement la raison que vous dites, il est modifié pour le réduire, puis sauvegardé et restauré sur un système différent qui utilise une version plus ancienne qui a une ancienne version Express. Cela fait partie d'un système où le logiciel utilise une ancienne installation Express MS SQL pour fonctionner. Besoin de réduire la base de données en dessous de 10 Go pour qu'Express puisse la prendre.


Sauf si j'ai complètement mal compris, je peux modifier le niveau de compatibilité de la base de données et cela ne mettra pas à jour la base de données restaurée. ALTER DATABASE Polly SET COMPATIBILITY_LEVEL = 110 En supposant que la version du serveur source est 2012.


@LeighMS COMPATIBILITY LEVEL ne garantit pas que les fichiers de base de données resteront inchangés avec RESTORE.


L'utilisation d'un produit appelé Red Gate permet aux fichiers BAK d'être interrogés pour différentes versions, que le serveur SQL exécute ou non une version plus ancienne. bien que la restauration de bases de données plus récentes vers des versions plus anciennes ne soit pas sans douleur.


4 Réponses :


-1
votes

La documentation Microsoft indique:

Si vous restaurez une base de données SQL Server 2005 (9.x) ou supérieure vers SQL Server 2017, la base de données est automatiquement mise à niveau.

Bien que j'essaierais en cas de besoin désespéré de créer une base de données en lecture seule et de la restaurer.

Mais c'est une sorte de magie noire qui n'est pas directement prise en charge par le fournisseur.


0 commentaires

0
votes

Non, ce n'est pas possible. Une fois qu'une base de données est attachée à une version plus récente de SQL Server, vous ne pouvez pas la remettre en place. La seule option dans ce cas est d'exporter / d'importer les données. Si vous avez besoin de modifier la base de données et de la replacer sur l'ancien serveur, vous devez installer un serveur avec la même ancienne version et y effectuer les restaurations!


7 commentaires

Cela ne me dérange pas d'installer une ancienne version de SQl Server. Suis actuellement en cours d'évaluation mais j'ai l'intention d'obtenir une licence. Une licence achetée maintenant serait-elle applicable à SQL 2012? Je trouve les informations de licence MS assez compliquées. Cependant, avant de faire cela, essayez de supprimer la table, de recréer, de définir le niveau de compatibilité à 110 et de le restaurer et de voir ce qui se passe. Si cela ne craque pas, essayez-le en lecture seule, ce qui convient à cet effet, et restaurez. À défaut, débarrassez-vous de 2107 et revenez à 2012.


Selon votre cas d'utilisation, Developer Edition peut être approprié!


@BenThul Non! Vous n'êtes pas autorisé à restaurer les données de production sur l'édition Dev pour les inspecter et éventuellement les restaurer sur prod. De plus, l'édition Dev dans les anciennes versions de SQL Server est payante (50 $ ou quelque chose, mais doit encore l'acheter).


@LeighMS Je ne peux pas le dire avec certitude. Les droits de rétrogradation ne sont pas mon domaine. Autant que je sache, vous pouvez revenir à deux niveaux, c'est-à-dire de 2017 à 2016 puis à 2014, donc vous ne pouvez probablement pas utiliser cette astuce pour 2012. Mais je n'en suis pas sûr.


@AndreyNikolov - pendant que ce processus est en cours de développement, Developer Edition m'envoie directement. L'avantage est qu'il peut être mis à niveau vers n'importe quelle édition une fois que le processus est dans la nature. Cela dit, si vous vous demandez également pourquoi la restauration de la base de données sur la même instance sous un nom de base de données différent n'est pas une option. C'est (vraisemblablement) déjà sous licence ...


@BenThul Dans le monde réel, il est presque impossible de trouver une organisation, où vous pouvez obtenir l'autorisation de restaurer une base de données sur Prod pour la vérifier ou la modifier. Très peu probable, mais c'est possible, cependant


D'accord. Mais je ne sais pas non plus si la destination finale est prod ou non!



-1
votes

Le niveau de compatibilité est important. Même lorsque le niveau de compatibilité de la base de données doit être modifié, dans certaines conditions, la sauvegarde ne peut pas être simplement restaurée.

Restauration d'une sauvegarde de base de données créée sur un SQL Server 2008 R2 vers une instance SQL Server 2012 se passe bien, mais si un serveur SQL La sauvegarde 2000 est tentée d'être restaurée sur un SQL Server 2012, vous ne pouvez pas faites-le directement.


0 commentaires

2
votes

Lorsque ce qui précède s'exécute, j'obtiens: la base de données 'Polly' exécutant l'étape de mise à niveau de la version 782 à la version 801. ... Base de données 'Polly' exécutant le étape de mise à niveau de la version 868 à la version 869.

Je ne souhaite aucune étape de mise à niveau, mais uniquement si la base de données est toujours utilisable.

Ce n'est pas possible. Chaque version de SQL Server a sa structure de données et de fichiers journaux qui diffère selon les versions de serveur. Et si vous restaurez ou attachez la base de données à partir de la version inférieure, les fichiers de base de données sont mis à jour unidirectionnellement pour avoir une structure dont la version actuelle de SQL Server a besoin .

Il est impossible de ne pas mettre à niveau car la version actuelle du serveur a besoin de cette nouvelle structure pour les fichiers db.

Toutes les spéculations autour du niveau de compatibilité / propriété read_only n'aideront pas du tout, le serveur actuel ne fonctionnera jamais avec des fichiers qui ne sont pas de la structure dont il a besoin.

Dans le cas d'une base de données lecture seule , ses fichiers seront mis à jour mais la base de données restera lecture seule .

Le niveau de compatibilité n'a rien à voir avec la version de la base de données (version des fichiers db). Il indique simplement au serveur quelle version de l ' optimiseur de requêtes doit être utilisée, quelle syntaxe héritée peut encore être analysée, etc.


2 commentaires

J'ai essayé de jouer avec compatibilité et read_only, et comme vous le savez probablement, cela n'a pas fonctionné. De mon point de vue, la meilleure solution est de trouver un support d'installation pour la version de MS SQL qui correspond à ce qui est installé par le logiciel. Compte tenu de sa taille, je ne suis pas pris par l'idée des décharges SQL. Semble une solution maladroite, et pourrait ne pas y parvenir car la base de données a une structure complexe de tables fortement interconnectées.


>>> Compte tenu de sa taille, je ne suis pas pris par l'idée des dumps SQL <<< Qu'entendez-vous par "dumps"? Voulez-vous estimer la taille de la sauvegarde en fonction de la taille de la base de données?