2010-01-21 9 views
3

Un fournisseur a une base de données de données (en lecture seule) qui nous est envoyée via dvd chaque semaine. Leur script de mise à niveau détache la copie existante de la base de données, écrase le MDF et le LDF, supprime tous les utilisateurs et recrée ce qu'ils pensent que la sécurité devrait être. Y at-il un moyen que je peux simplement synchroniser les données sans mettre la base de données hors ligne? Ceci est une installation 24/7 qui provoque 15 minutes d'indisponibilité pendant les mises à jour. Informations auxiliaires: La base de données contient ~ 50 tables d'une taille totale de 400 Mo. La quantité réelle de données modifiées est quelque part autour de 400kb. Le serveur exécute Server 2008 avec SQL Server Enterprise Edition 2008.Remplacer la base de données SQL Server

Répondre

5

lire sur Red Gate Comparer les données

http://www.red-gate.com/products/SQL_Data_Compare/index.htm

Cela va générer un script de différences pour vous que vous pouvez appliquer à la base de données existante.

Cela a également la possibilité de synchroniser automatiquement vos données

Vous devrez charger la base de données entrant sur un serveur pour cette opération.

+0

Impossible de vivre sans les outils RedGate lorsque vous travaillez avec SQL Server. Si seulement 400k de données sont en train de changer, une mise à jour en direct devrait suffire. Vous pouvez même écrire le script, sauvegarder et exécuter la comparaison/synchronisation. – Tom

+0

Ces outils me font un peu peur ... Pouvez-vous comparer des données sur des bases de données live à haute utilisation sans bloquer les tables? –

+0

Cela ne génèrera-t-il pas une livraison complète de journaux sans utilité? En outre, si vous effectuez une mise à jour en direct, vous allez effectuer tous les changements et émettre un seul commit? Avez-vous l'espace nécessaire pour le faire ou allez-vous permettre des lectures sales? Donc, toutes les requêtes dans le processus obtiendront des données confuses avec certaines des anciennes lignes et les nouvelles lignes? –

0

Vous pouvez écrire votre propre programme qui se connecte à la base de données fournie par le fournisseur et à la vôtre (éventuellement une application DTS ou C#) et qui dispose de certaines informations sur les données doit être déplacé/migré de la base de données fournisseur dans le vôtre.

0

Vous pouvez charger la base de données en tant que base de données distincte, puis utiliser un utilitaire tel que SQL Data Compare pour différencier les différences de données et générer un script.

0

Ceci devrait être une opération de sauvegarde/restauration. Détacher/rattacher est rapide et facile mais met évidemment la base de données hors ligne.

Alternativement, ils peuvent fournir des scripts diff pour mettre à jour toutes les modifications de données et de schéma dont ils ont besoin. Exécutez les scripts (essentiellement un ensemble de créer, modifier, ajouter et supprimer pour les changements de schéma, ainsi que des insertions pour de nouvelles données) sur la base de données active pour le mettre à jour. Cela a l'avantage que les scripts peuvent être facilement contrôlés en version.

0

Vous pouvez synchroniser les données à l'aide d'un outil tel que Red-Gate Data Compare.

4

Une chose que vous pouvez faire est d'avoir deux bases de données DB_A et DB_B quand ils vous envoient le nouveau DB que vous installez et remplacez DB_B. En attendant, tous vos utilisateurs utilisent DB_A. Ensuite, renommez DB_A en DB_C et renommez DB_B en DB_A. Cela réduira le temps d'arrêt à presque 0. Ou vous pouvez simplement changer la connexion pour pointer de DB_A à DB_B une fois que la base de données est prête.

+1

Vous ne pouvez pas renommer une base de données lorsque les connexions sont ouvertes. Vous devez d'abord mettre la base de données en mode mono-utilisateur (mais attendre que les utilisateurs ne se trouvent pas dans la base de données/forcer tous les utilisateurs), effectuer le swap et le remettre en mode multi-utilisateur. –

1

Je ne peux pas croire que personne n'a mentionné cette méthode.

BAISER: Vous pouvez charger la restauration (ou joindre) la DB à un nouveau catalogue, puis reconfigurer vos applications (par exemple par une source de données ODBC) pour travailler avec le nouveau DB - une fois que vous le roulement se fait vous pouvez détacher l'ancien. Cette méthode est appelée "Rolling upgrade" et est utilisée partout pour les sites 24/7.

0

Vous pouvez utiliser SSIS pour créer un processus d'importation/mise à jour de données. Une question que j'aurais avant de faire ceci serait quelle serait la question si pendant une courte période de temps la table a de nouvelles données et le tableau b n'a pas été mis à jour? Toutes les données doivent-elles rester synchronisées? Suivez les conseils de Jose Chama, si vous le pouvez, ne pas synchroniser les choses même pendant une minute.

Questions connexes