Copie Express de SQL Server Base de données à un Autre Ordinateur
Je suis de migration de l'extrémité arrière d'un client d'Accès de l'application de demain et il faut être prêt avec un plan pour un problème particulier avec ce client. Le patron doit être en mesure de prendre le fichier de données à l'extérieur du bureau où le Serveur SQL est sur une base régulière (généralement tous les mois) et d'exécuter des analyses statistiques sur les données.
J'ai regardé Manière la plus facile de copier l'intégralité d'une Base de données SQL server à partir d'un serveur local SQL Express, et les solutions ne fonctionnent pas dans ce scénario, car:
- ne pouvez pas utiliser une seule fois (solution de Base de données de l'Assistant de Publication), comme cela doit être scriptable.
- ne pouvez pas utiliser une méthode qui repose sur les deux ordinateurs en réseau, ce qui n'est pas une option -- les données transférées via clé USB (donc pas de réplication).
- ne pouvez pas utiliser une méthode qui repose sur l'exécution d'outils de gestion SQL Server à partir de la console du serveur ou du poste de travail pour la sauvegarde.
- ne peut pas se connecter à la base de données SQL Server directement pour l'analyse, car les données doivent être transférables à d'autres endroits.
Ce que je pense que j'ai besoin est une façon d'appeler un script qui crée un fichier de sauvegarde, puis copier le résultat sur le lecteur USB. J'ai alors besoin d'un deuxième script pour copier le fichier de sauvegarde à partir de la clé USB et de le restaurer sur un autre Serveur SQL.
Les données transportées est en lecture seule (ou, toutes les modifications apportées n'ont pas besoin de revenir vers le serveur principal), et les données ne sont pas actualisées dans le deuxième emplacement. Il est actuellement scriptées avec un bon vieux fichier de commandes pour copier les fichier MDB, et j'ai besoin de quelque chose qui est simple pour l'utilisateur.
Il ne peut pas avoir toutes les dépendances sur, disons, Powershell (de SQL Server Management Studio), parce que je ne veux pas qu'il est installé sur l'ordinateur de l'utilisateur exécute le script (il y a une demi-douzaine de postes de travail, le script doit être exécutable, et je ne veux pas à avoir à installer quelque chose sur l'ensemble de ceux-ci).
Je vais être la configuration de l'agent de sauvegarde pour créer une sauvegarde chaque nuit, donc je pourrais peut-être de copier ce fichier sans avoir besoin de lancer la sauvegarde avant de le copier. Ainsi, je pourrais seulement besoin de faire un script de restauration sur l'ordinateur cible.
Pensées, des suggestions, des pointeurs?
OriginalL'auteur David-W-Fenton | 2010-08-31
Vous devez vous connecter pour publier un commentaire.
Vous devez certainement être en mesure de créer quelque chose comme ça.
Une partie serait un T-SQL
CREATE BACKUP
script comme un.sql
script et l'exécuter à partir d'un standard de commandes Windows (*.bat
) ou commande (*.cmd
) de fichiers à l'aide de lasqlcmd
outil de ligne de commande.Qui serait quelque chose comme ceci:
de sauvegarde.sql
La deuxième partie serait une .fichier sql avec un T-SQL
RESTORE
script, essentiellement de la lecture des données à partir d'un emplacement sur le disque et de le restaurer à l'instance de SQL Server.de restauration.sql
Bien sûr, vous avez besoin d'adapter ces noms et chemins d'accès à vos propres exigences - mais ça doit vous donner une idée comment commencer avec cette entreprise.
À exécuter l'un de ceux-ci .sql script à l'aide de
sqlcmd
, vous besoin de quelque chose comme:par exemple
Ressources:
OK, je vois que j'ai installer les utilitaires de ligne de commande séparément pour l'utilitaire SQLCMD. Depuis que j'ai installer SQL Server Native Client, je suppose qu'il n'est pas déraisonnable de les installer en même temps. Malheureusement, le téléchargement de docs pour que (microsoft.com/downloads/...) disent qu'il faut Windows Installer 4.5, encore un autre poids lourd de l'installation (qui nécessite un redémarrage pour WinXP postes de travail). Cette recherche est incroyablement lourd sur la source à la fin (même si OK sur la cible, ce qui permettra de disposer de SQL Server Express est installé).
Le R2 téléchargements sont dans le microsoft.com/downloads/...
Même si cette réponse ne convient pas à toutes les restrictions de ma situation (je ne veux pas installer les utilitaires de ligne de commande sur les postes de travail), je pense que c'est probablement la meilleure réponse à la question dans sa forme la plus générale, c'est à dire, sans mon restrictions spécifiques, donc je l'accepte comme la réponse.
Je pourrais jurer que j'ai accepté la réponse. Je n'ai aucune idée de ce qui s'est passé là-bas!
OriginalL'auteur marc_s
J'ai eu ce même problème de transport de db entre la production (serveur) et de test-développement (local à un autre endroit) et également le transport terminé db pour serveur hébergé.
Comme il s'est avéré que je peux le transport de l' .MDF par lui-même.
Je le fais tout le temps; fonctionne parfaitement -- enregistre le problème de transport d'un grand .ldf. (J'utilise souvent dropbox.com au lieu d'une clé usb et de crypter le fichier avec PKZIP/SecureZip premier.)
Je ne suis pas sûr de ce qui se passe si vous copiez le MDF avec le serveur est démarré, mais je n'ai pas l'arrêter avant de le copier. Je ne suis pas sûr de savoir comment faire ce scriptable -- l'attachement peut être scriptable, mais je ne suis pas sûr à propos de la suppression de la .LDF avant de continuer.
Vous pourriez script du serveur pour faire une copie d'instantané de la base de données, puis de transport que le MDF en sachant qu'il n'a pas été mis à jour.
Une autre idée - d'écrire un programme pour insérer tous les enregistrements dans SQL Server compact edition fichier et de le transporter? Je n'ai pas essayé, mais lire à ce sujet.
J'ai relu deux fois et n'ai pas vu où tu voulais un "petit" fichier -- de toute façon... de sauvegarde doit contenir MDF/LDF combo -- MDF seul devrait être plus petit. Je ne suis pas sûr que vous devez arrêter le serveur pour l'obtenir. C'est probablement zips en bas. Mais voici quelques idées si vous ne pensez pas que SQL/Server Compact edition de travail: 1. Utilisation de SQL Serveur/editeur/réplication abonné à "mise à jour" de la db -- seules les modifications de venir devrait donc être rapide. Si pas de réseau comme vous l'avez dit ensuite avoir un "hub" hébergé -- je utiliser serverintellect.com -- si vite c'est presque comme être local
Ou 2. Essayez les services de synchronisation: msdn.microsoft.com/en-us/sync/default.aspx -- lequel il est dit que la synchronisation avec SQL/Server compact edition. Si l'exigence est pas de réseau, pas Internet de l'histoire (la petite portable alimenté par USB, disque Seagate seulement), alors vous ne savez pas comment vous pouvez éviter de copier le plus complet db, sauf si vous copiez juste les enregistrements modifiés depuis la dernière mise à jour. Espérons que cela aide.
Je n'ai pas demandé pour un fichier plus petit, mais vous avez soulevé la question des fichiers plus petits, en suggérant à sauter le fichier LDF. Je me préoccupe seulement de combien de temps prend le processus, et la copie plus de données prend plus de temps. Mais pour moi, le temps qu'il faut pour arrêter/démarrer le serveur est de loin le plus gros problème, pas le moindre, car il ne peut pas être effectuée pendant les heures d'affaires régulières.
À l'aide de SQL Server CE serait besoin de l'installer sur le poste de travail cible, ou de la configurer en tant que serveur lié. Je ne peux pas voir la valeur dans le faire. À compter de ce moment, j'ai complètement abandonné l'idée de la copie de la base de données SQL Server, et je suis plutôt d'importer les données dans une base de données Access, et en les utilisant. C'est beaucoup plus simple que le poste de travail cible n'a pas besoin de SQL Server installé dans ce scénario.
OriginalL'auteur pghcpa
Juste une pensée, mais si il s'en va avec une copie d'un fichier MDB avec toutes les données seulement pour lui-même, alors pourquoi ne pas continuer comme ça. Vous pourriez faire tout cela dans l'accès à une requête pour chaque table.
Si vous configurez votre “déclaration” MDB avec les tables liées et appelé “tblFoo_LINKED” et une table locale appelée “tblFoo”, vous pouvez alors juste un peu de code VBA qui serait une boucle sur toutes les tables et de les exécuter quelque chose comme
La sauvegarde de SQL server restauration serait toujours l'option que je voulais aller, mais simplement offrir un tour différent sur les choses qui pourraient correspondre à vos besoins
J'ai commencé à donner ce plus la pensée, car je ne pense pas que mes préoccupations au sujet de la principale application de travail sont importantes. J'ai eu de travail à l'aide de DoCmd.Transférerbase (devrait être plus efficace qu'un MakeTable et d'obtenir des données plus précises types), mais ce n'est pas de l'importation de l'index. Hmm. Dois faire un peu plus de la spéléologie....
Je ne suis pas d'accepter ce que la réponse, même si c'est plus proche de ce que j'ai fini par choisir de ma solution. Ma raison est que je pense que c'est mieux d'accepter la réponse la plus directe correspond à la question que j'avais posée (qui a été SQL Server uniquement). Mais je suis upvoting parce qu'il m'a fait penser à travers et de tester cette approche. Je vais utiliser l'une des deux approches (je n'ai pas testé les performances encore): A. insérer les données dans les modèles vide MDB avec des indices déjà défini, ou B. l'importation avec Transférerbase et ajouter l'index à l'aide de DAO.
C'est assez juste, merci pour la voter. Comme pour vos deux plans, ses proches, mais je pense que mon argent serait à l'importation et à l'établissement de l'index, mais tout juste. Il sera intéressant d'entendre à nouveau avec le fleuron des résultats
Mon souci avec la construction de l'index est simplement qu'il est pointilleux code. Si je pouvais le script de la base de données existante, je serais plus enclins à l'utiliser. Je ne crois que l'importation serait plus rapide que les INSERTs. Avant de m'endormir la nuit dernière, il a fait se produire pour moi que Transférertexte pouvez importer dans une table existante, alors peut-être Transférertexte pouvez, aussi? Je vais devoir vérifier que, parce que s'il le peut, c'est de loin la méthode la plus simple (de l'importation dans des tables dans une coquille vide de la base de données).
OriginalL'auteur Kevin Ross
Pourquoi ne pas continuer à copier l'ensemble du fichier de base de données? Ce livre se lit comme un assez petit pour obtenir loin avec une pause momentanée: Vous pouvez réduire la base de données, détacher, et de copier les fichiers directement. Sur le système cible, vous pourriez fixez le SQLExpress DB par nom de fichier dans la chaîne de connexion.
J'ai été vu la dernière déclaration sur l'utilisation d'une soirée copie de sauvegarde, ce qui suggère qu'il est copié d'une part, et seulement d'avoir besoin d'un script de restauration. Si le plan de sauvegarde comprend une tâche de copie de la db (E. G.: par l'intermédiaire d'un T-SQL tâche dans le plan de maintenance), et la chaîne de connexion objectifs de la db de nom de fichier, alors il n'y aurait pas besoin d'être un script de restauration.
Eh bien, je n'ai pas créé le plan de sauvegarde pour l'instant, puisque je n'ai pas fait la migration -- c'est demain! Mais, oui, j'ai pensé que je devais partager la destination pour la sauvegarde de script, et, la copie que ce serait facile, mais qui ne nécessitent pas de toutes les choses que vous avez recommandé à propos de l'arrêt du serveur de base de données et ainsi de suite. Arrêter le serveur et copier les fichiers réels est un non-starter, en tout cas, si la cité URL n'aide pas vraiment.
OriginalL'auteur Steve