Un non-DBA demande: comment copier / déplacer sans difficulté une instance SQL Server vers un autre serveur via une sauvegarde / restauration?

11

Nous venons de recevoir un nouveau serveur, j'ai donc besoin de copier l'instance SQL Server 2008 existante à partir de l'ancienne boîte de base de données.

Normalement, je fais cela en copiant les fichiers .mdf et journaux et en les attachant, mais je ne suis pas en mesure de retirer les dbs car ils sont utilisés 24/7, j'ai donc sauvegardé les bases de données et les ai restaurées sur la nouvelle machine. Cependant, je me suis retrouvé avec quelques problèmes dont l'un est lié aux utilisateurs orphelins . Donc, ce que je recherche, c'est un processus à sécurité intégrée pour tout déplacer avec un minimum de tracas / ennuis / maux de tête. Je suis un développeur .Net avec une bonne quantité de SQL à mon actif, mais le fonctionnement interne de SQL Server est en grande partie un mystère pour moi et je trouve la documentation MS difficile à parcourir.

Veuillez aider.

5arx
la source
1
Vous pouvez trouver quelques idées dans cette question précédente . Mais les réponses précédentes sont assez explicatives. Je pense que la meilleure idée serait d'établir une mise en miroir et de la casser après, ou une expédition de journaux (ne peut le faire qu'à partir de l'assistant) pour tous les dbs et de restaurer simplement les sauvegardes de journaux nécessaires, mais si vous dites que vous n'êtes pas un DBA , alors probablement la méthode des sauvegardes est meilleure.
Marian

Réponses:

10

Si vous ne pouvez pas mettre les bases de données hors ligne, vous devez effectuer une sauvegarde / restauration. Je suggérerais ce qui suit:

  1. Installez SQL 2008 sur la nouvelle boîte, en utilisant la même structure de fichiers que l'ancienne boîte pour les fichiers MDF et LDF.
  2. Faites des sauvegardes de toutes les bases de données sur l'ancienne boîte.
  3. Restaurez le maître de l'ancienne boîte vers la nouvelle boîte en démarrant le SQL en mode mono-utilisateur. Restaurer la méthode principale
  4. Restaurez chaque base de données de l'ancienne boîte vers la nouvelle boîte avec l'option NORECOVERY afin de pouvoir appliquer les futures sauvegardes Diff ou T-log.
  5. Restaurez msdb de l'ancienne boîte vers la nouvelle boîte.

Si vous construisez et configurez la nouvelle boîte pour qu'elle ressemble exactement à l'ancienne, vous n'aurez que peu de bruit.

Je n'ai aucune idée de la taille de vos bases de données, donc cette méthode pourrait prendre beaucoup de temps. La chose la plus simple à faire serait d'arrêter l'ancienne boîte et de copier les fichiers MDF et LDF, puis (après la restauration du maître), il vous suffirait de redémarrer SQL pour mettre vos bases de données en ligne. Mais vous avez déclaré que ce n'était pas une option, car les bases de données ne sont pas autorisées à être hors ligne.

SQLRockstar
la source
3
N'oubliez pas de copier les modifications apportées aux données après avoir effectué les sauvegardes. Vous pouvez effectuer une sauvegarde diff ou une sauvegarde tlog et les appliquer au nouveau serveur après sa mise en service, mais avant de basculer.
Eric Humphrey - lotsahelp
bon point, j'ai oublié de le mentionner également. peut-être devrais-je inclure une configuration de miroir db, qui pourrait être cassée par la suite?
SQLRockstar
1
J'imagine que quelqu'un a déjà un article complet sur les différentes façons de migrer les serveurs. En outre, voici un article sur le transfert des connexions à un nouveau serveur: support.microsoft.com/kb/246133
Eric Humphrey - lotsahelp
8

Vous mentionnez un fonctionnement 24h / 24 et 7j / 7, donc la meilleure façon de le faire est de créer un miroir de base de données sur le nouveau système, puis vous pouvez simplement basculer avec un minimum - peut-être zéro, selon la structure de votre application - des temps d'arrêt à l'aide d'un client - redirection latérale. Les étapes de base sont les suivantes:

  1. Assurez-vous que votre base de données principale s'exécute en mode de récupération complète .
  2. Sauvegardez le primaire et restaurez-le sur le miroir WITH NORECOVERY
  3. Créez des «points de terminaison» sur les deux serveurs et assurez la connectivité (par exemple, les règles de pare-feu), en définissant le port et l'adresse IP correctement), par exemple:

    CREATE ENDPOINT endpoint1
    STATE=STARTED AS TCP(LISTENER_PORT = 5222, LISTENER_IP = 192.168.1.5) 
    FOR DATA_MIRRORING(ROLE = PARTNER, AUTHENTICATION = WINDOWS NEGOTIATE, ENCRYPTION = REQUIRED ALGORITHM RC4)
  4. Configurez la mise en miroir sur le miroir, en pointant vers le principal:

    ALTER DATABASE GaiusMirrorDB SET PARTNER = 'TCP://192.168.1.5:5222'
    go
    EXEC sys.sp_dbmmonitoraddmonitoring
    go
  5. Et sur le principal, pointant vers le miroir (juste un nom de base de données et une adresse IP différents.

  6. Puis, le moment venu, passez simplement du primaire au miroir:

    ALTER DATABASE GaiusDB SET PARTNER FAILOVER
    GO

Remarque: je suppose que ces deux serveurs sont sur le même réseau, il sera donc correct de fonctionner en mode synchrone. S'il s'agit d'une liaison WAN, utilisez le mode asynchrone.

Gaius
la source