2010-05-12 4 views
1

Problème simple. Je travaille sur une seule base de données SQL Server qui est partagée entre plusieurs bureaux. Chaque bureau a son propre schéma dans cette base de données, divisant ainsi la base de données en morceaux logiques. (Plus un schéma partagé entre plusieurs bureaux.) La base de données est stockée sur un serveur dédié et nous utilisons une base de données unique pour faciliter la procédure de sauvegarde/restauration. Le problème, cependant, est que le service de comptabilité peut modifier un grand nombre de données et que le secrétariat fait une erreur qui nécessite la restauration d'une sauvegarde. Malheureusement, la restauration de la sauvegarde signifie que la comptabilité perdra ses données récemment ajoutées. Ainsi, la solution alternative consiste à restaurer la sauvegarde dans une nouvelle base de données, à supprimer les données de l'ancien schéma comptable et à déplacer les données pour la comptabilisation uniquement à partir de la sauvegarde vers la base de données d'origine. C'est la solution actuelle qui prend du temps et est sujette aux erreurs.Comment faire une sauvegarde partielle de base de données et restaurer?

Alors, existe-t-il un moyen de faire des sauvegardes d'un schéma unique, éventuellement par le biais du code? Et puis de restaurer juste ce schéma, probablement à travers le code aussi?

+1

avez-vous des FKs qui vont entre schémas? –

+0

Non. Chaque schéma est une entité indépendante. Il existe un schéma partagé que partagent tous les bureaux, mais il s'agit principalement de données génériques, que n'importe quel bureau peut copier dans son propre schéma lorsqu'il en a besoin. (Fondamentalement, c'est juste une collection de valeurs par défaut.) –

Répondre

1

Vous pouvez créer un script qui copie chacun des schémas à une base de données séparée (backup_Accounting, backup_Secretary, backup_Shared), et crée ensuite une sauvegarde fichier pour chacune de ces bases de données. Si vous devez effectuer une restauration, vous pouvez restaurer le fichier de sauvegarde dans la base de données appropriée, puis exécuter un script pour copier les données dans la base de données principale.

+0

C'est l'idée que je veux avoir. Mais comment créer un script qui va sauvegarder et restaurer toutes les données de chaque table dans un schéma unique? (Sans avoir besoin de lister toutes les tables.) –

0

Il n'existe aucun moyen de sauvegarder et de restaurer un seul schéma.

Cependant, vous pouvez essayer cette approche: Restaurez la base de données entière (tous les schémas) dans une base de données différente xyz_OLD ou quelque chose comme ça.

Vous pouvez ensuite corriger les données à l'aide d'un script comme:

UPDATE y 
    SET col1=o.col1 
    FROM xyz.YourTable y 
     INNER JOIN xyz_Old.xyz.YourTable o ON y.PK=o.PK 

INSERT INTO xyz.YourTable 
     (col1, col2, col3,...) 
    SELECT 
     col1, col2, col3,... 
     FROM xyz_Old.xyz.YourTable o 
     WHERE NOT EXISTS (SELECT 1 FROM xyz.YourTable y WHERE o.PK=y.Pk) 

etc... 
+0

Cela ne fonctionnera pas, car les données seront également supprimées. La seule suggestion que je sais que cela fonctionnerait serait de trunking toutes les tables dans un schéma unique, puis de les déplacer de la base de données de sauvegarde vers le schéma. Bien que possible, cela semble horrible ... –

+0

cela fonctionne pour les suppressions de, je n'ai tout simplement pas écrire le DELETE, vous supprimez de la table locale où l'ancien n'existe pas. –

1

Vous pouvez utiliser les groupes de fichiers et la commande de sauvegarde partielle.

Vous devez déplacer chaque schéma vers un groupe de fichiers différent, puis utiliser des sauvegardes/restaurations partielles si nécessaire.

Voir ici pour plus d'informations sur les sauvegardes partielles: http://msdn.microsoft.com/en-us/library/ms191539.aspx

Voir ici pour plus d'informations sur les groupes de fichiers: http://msdn.microsoft.com/en-us/library/ms179316.aspx

Voir ici pour plus d'informations sur restauration fragmentaire: http://msdn.microsoft.com/en-us/library/ms177425.aspx

+0

Suggestion intéressante. Malheureusement, nous avons choisi de tout combiner dans une seule base de données pour éviter d'avoir beaucoup de fichiers de base de données.En outre, comment est-ce que je précise à SQL Server quel schéma doit être dans quel fichier? Et gardera-t-il toutes les données pour toutes les tables dans ce schéma dans le même fichier? –

+1

Je ne pense pas qu'il existe un moyen d'automatiser la relation entre le schéma et le groupe de fichiers. Le groupe de fichiers dans lequel une table est créée est défini lors de l'émission de l'instruction CREATE TABLE (via la clause ON). Si beaucoup de personnes peuvent créer des tables, l'application de la relation schéma/groupe de fichiers peut être difficile à appliquer. Toutefois, vous pouvez peut-être utiliser des déclencheurs DDL pour appliquer la relation. Voir http://msdn.microsoft.com/en-us/library/ms190989(v=SQL.100).aspx (ceux-ci sont également disponibles dans SQL2005). –

Questions connexes