Rétrogradation de SQL Server 2008 à 2005

32

Les fichiers de base de données construits à l'aide de SQL 2008 ne sont pas compatibles avec 2005. Existe-t-il une solution de contournement?

Sevki
la source
N'oubliez pas d'exporter également les noms de connexion du serveur.
StanleyJohns
Est-ce parce que vous développez en 2008 mais que vos serveurs de production sont toujours en 2005? Toute solution que vous proposez va simplement retarder l'inévitable tout en rendant votre vie misérable, car vous finirez probablement par faire ces déclassements sur une base régulière.
datagod

Réponses:

16

Aucun outil tiers n'est nécessaire. SQL Server 2008 Management Studio nous a fourni un outil très puissant pour convertir une base de données vers le bas, car une option "Données de script" a été ajoutée à l'assistant "Base de données de script".

Cliquez simplement avec le bouton droit de la souris sur la base de données dans SQL2008 SSMS, puis allez à Tâches, puis "Générer des scripts".

Parcourez l'assistant en vous assurant de choisir "True" pour "Données de script" dans les options de table / vue. Choisissez tous les objets, puis exécutez le script créé sur le serveur 2005. (S'il vous plaît garder à l' esprit que le script créé pourrait être énorme si la base de données d' origine est très grand!)

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

BradC
la source
4
Aucune infraction, mais cela ne peut pas être une solution si la base de données est grande. Essayez cette technique sur n’importe quelle table contenant quelques millions de lignes (et considérez varchar (max) comme type de données d’une colonne) et si Management Studio est capable d’ouvrir et d’analyser ce fichier, vous serez heureux, mais je suis satisfait. Bien sûr, il ne s’ouvrira pas, il va planter. Désolé, mais ce n'est pas la solution à ce problème, sauf si la base de données est vraiment petite.
Marian
3
Bien sûr, si la base de données est trop volumineuse, écrivez uniquement un script dans la structure de la base de données, puis utilisez votre méthode préférée (SSIS, BCP, Assistant Importation) pour transmettre les données.
BradC
Dans SSMS 11.0, il ne semble pas y avoir d’option permettant d’écrire des données avec la structure. i.imgur.com/SGkG8oZ.png
jcollum
Ah, OK, c'est maintenant sous "Types de données pour le script" juste au-dessus des options de la table /
affichage
16

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 un certain temps.

Jérémie Peschka
la source
2
En fonction du volume de données, cela prendra presque toujours beaucoup de temps
jcolebrand
Oui, ça va aller. Déplacer une base de données volumineuse vers une ancienne version de SQL Server n'est pas une tâche facile.
mrdenny
2
L'avantage de BCP est qu'il sera plus rapide que d'utiliser des données de script. Oui, c'est lent, mais c'est plus rapide que beaucoup d'alternatives.
Jeremiah Peschka le
15

À ma connaissance, il n’existe aucun moyen direct de déclasser une base de données de 2008 au format 2005, malheureusement.

Voici comment je l'ai fait par le passé (en fait avec les anciennes versions de SQL Server, mais le processus sera le même):

  1. Restaurez 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 appropriées (tables, index, contraintes, vues, procs, triggers, ...) sur une instance SQL2005. J'espère que vous pourrez le faire à partir de votre procédure de génération existante et / ou du code source, mais sinon, vous pourrez utiliser SQL Server Manager pour créer des scripts pour tout ce qui se trouve dans la base de données 2005 et exécuter le résultat sur un emplacement vierge dans l'instance de 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 les liez à l'aide de sp_addlinkedserver .
  4. Copiez toutes les données d'un DB à un autre. S'il n'y a pas de contrainte 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.tablesi vous avez lié les instances de cette manière). )
    pour chaque table. Si vous avez des contraintes et des déclencheurs imposant une cohérence entre les tables, vous devrez bien sûr vous montrer un peu plus astucieux quant au classement de ces opérations, en particulier si vous avez des contraintes cycliques comme une table avec une contrainte basée sur elle-même (une hiérarchie données, comme exemple possible).

Il peut être plus efficace de simplement copier les données d’abord et d’ajouter toutes les autres structures (index, procs, déclencheurs, ...) après l’étape 3. Cette procédure évite les problèmes d’ordre d’insertion de lignes provoqués par des contraintes et des déclencheurs, et la construction des index au niveau de la sauvegarde. En principe, end devrait être plus rapide que de les construire, car toutes les données sont ajoutées. Toutefois, si vous avez des index en cluster sur vos tables, créez-les avant d'ajouter les données, car elles ne seraient pas plus rapides à créer après coup.

Bien entendu, tout cela suppose qu'aucun de vos objets n'utilise les fonctionnalités spécifiques à SQL 2008; sinon, vous découvrirez et corrigerez de telles choses lorsque des erreurs se produiront lors de la reconstruction du schéma. Si l'un de vos codes repose sur un comportement officiellement non défini qui varie d'une version de SQL Server à l'autre, il se peut que vous ayez des bogues beaucoup plus subtils et insaisissables à rechercher et à aplanir ultérieurement.

David Spillett
la source
1
-1 parce que c'est en fait inefficace (sélectionnez * dans de) par rapport à la BCP.
jcolebrand
@jcolebrand assez juste sur l'efficacité. Bien que la technique soit celle avec laquelle j'ai eu du travail.
David Spillett
c'est un système juste, je pensais juste que je l'inclurais à cause des lecteurs futurs ici. Vous avez actuellement les votes positifs pour que cela ne soit pas un problème. ;)
jcolebrand
1

Vous devez d’abord créer un script pour la base de données et vous assurer que vous indiquez sur le type de version que vous voulez utiliser. Et pour copier les données de la version la plus récente vers la version la plus basse, SQL Data compare fera l'affaire pour vous.

Bonne chance!

Mbongeni
la source