web-dev-qa-db-fra.com

Rétrogradation de SQL Server 2008 vers 2005

Les fichiers de base de données créés à l'aide de SQL 2008 ne sont pas compatibles avec 2005. Y a-t-il un problème?

32
Sevki

Aucun outil tiers n'est nécessaire. SQL Server 2008 Management Studio nous a donné un outil très puissant pour rétrograder une base de données car ils ont ajouté une option "Données de script" à l'assistant "Base de données de scripts".

Faites simplement un clic droit sur la base de données dans le SSMS SQL2008, et allez dans Tâches, puis "Générer des scripts"

Parcourez l'assistant, assurez-vous de choisir "True" pour "Script Data" sous les options de table/vue. Choisissez tous les objets, puis exécutez le script qu'il crée sur le serveur 2005. (Veuillez garder à l'esprit que le script créé pourrait être massif si la base de données d'origine est très grande!)

Notez que vous pouvez même exécuter l'assistant sur un serveur SQL2005 pour convertir une base de données SQL2005 en SQL2000 (vous auriez besoin des outils 2008 installés sur votre poste de travail, bien sûr).

16
BradC

Vous pouvez BCP les données d'une instance SQL Server vers une autre instance. Ce serait le moyen le plus rapide de copier les données d'une version à une autre. Selon le volume de données, cela peut prendre du temps.

16
Jeremiah Peschka

Il n'y a aucun moyen direct, à ma connaissance, de rétrograder une base de données du format de 2008 au 2005 de malheureusement.

La façon dont j'ai fait cela dans le passé (en fait avec les anciennes versions de SQL Server, mais le processus sera le même) est la suivante:

  1. Restaurer la base de données sur une instance SQL2008 si ce n'est déjà fait
  2. Construisez une base de données vide avec les structures correctes (tables, index, contraintes, vues, procs, triggers, ...) sur une instance SQL2005. J'espère que vous pouvez le faire à partir de votre procédure de génération et/ou de votre code source existants, mais sinon, vous pouvez utiliser SQL Server Manager pour créer des scripts pour tout dans la base de données 2005 et exécuter le résultat sur un espace vierge dans l'instance 2008.
  3. Assurez-vous que les deux instances peuvent se voir (c'est-à-dire qu'aucun pare-feu ne bloque les connexions si les instances se trouvent sur des machines différentes) et reliez-les à l'aide de sp_addlinkedserver .
  4. Copiez toutes les données d'une base de données à l'autre. S'il n'y a pas de contraintes de clé étrangère et de problèmes similaires dans les déclencheurs, vous pouvez simplement lier les bases de données et faire défiler la liste des tables (en les sélectionnant dans sys.objects) et en cours d'exécution.
    INSERT destinationserver.destinationdb.schema.table SELECT * FROM sourcedb.schema.table
    (ou INSERT schema.table SELECT * FROM sourceserver.sourcedb.schema.table si vous avez lié les instances de cette façon)
    pour chaque table. Si vous avez une cohérence inter-table qui impose des contraintes et des déclencheurs, vous devrez bien sûr être un peu plus intelligent sur l'ordre de ces opérations, surtout si vous avez des contraintes cycliques comme une table avec une contrainte basée sur elle-même (une hiérarchie de détention données, comme exemple possible).

Il peut être plus efficace de simplement copier les données en premier et d'ajouter toutes les autres structures (index, procs, déclencheurs, ...) après l'étape 3. Cela évite les problèmes de commande d'insertion de lignes causés par les contraintes et les déclencheurs, et la construction des index au niveau La fin devrait en théorie être plus rapide que de les construire car toutes les données sont ajoutées - bien que si vous avez des index clusterisés sur vos tables, créez-les avant d'ajouter les données car ils ne seraient pas plus rapides à créer après coup.

Bien sûr, tout cela suppose qu'aucun de vos objets n'utilise de fonctionnalités spécifiques à SQL 2008 - s'ils le font, vous pourrez, espérons-le, découvrir et corriger ces choses lorsque des erreurs se produisent lors de la reconstruction du schéma. Si l'un de vos codes repose sur un comportement officiellement indéfini qui varie entre les versions de SQL Server, vous pouvez avoir des bogues beaucoup plus subtils et insaisissables à rechercher et à résoudre plus tard.

15
David Spillett

J'ai fait face à une situation similaire et j'ai utilisé la publication de base de données Wizard pour créer un schéma de script et des données pour SQL Server 2005 à partir de la base de données SQL Server 2008.

Service Web d'hébergement SQL Server (et boîte à outils)

Assistant de publication de base de données

7
CoderHawk

Vous devez d'abord créer un script pour la base de données et vous assurer sur la version que vous spécifiez le type auquel vous souhaitez rétrograder. Et pour copier les données de la version supérieure vers la version inférieure, la comparaison des données SQL vous fera l'affaire.

Bonne chance!

1
Mbongeni