web-dev-qa-db-fra.com

Puis-je restaurer un fichier .bak SQL Server sans SQL Server?

J'ai des gros .bak fichiers d'un vidage SQL Server 2005.

Puis-je les restaurer sans utiliser SQL Server, soit sur PostgreSQL, MySQL ou sur des fichiers texte plats?

Une solution open source serait très utile.

17
Abe

Voici ce que je propose:

  1. construire une machine virtuelle exécutant Windows, avec suffisamment d'espace disque pour contenir la sauvegarde. Copiez-y le fichier de sauvegarde. Si vous n'avez pas déjà la possibilité de construire des machines virtuelles, vous pouvez le faire avec produits gratuits comme Oracle VirtualBox .
  2. téléchargez et installez l'édition d'évaluation de SQL Server . Assurez-vous d'inclure à la fois le moteur de base de données et les outils de gestion - terminés.
  3. si le VM a assez d'espace pour contenir la sauvegarde mais pas assez d'espace pour la restaurer également, vous pouvez effectuer une "restauration virtuelle" en utilisant la version d'essai d'un produit de Red- Gate avec le même nom (qui vous permet d'interagir avec le fichier de sauvegarde comme s'il avait été restauré). Sinon, restaurer la base de données normalement .

  4. Une fois la base de données disponible (via une restauration normale ou une restauration virtuelle), vous pouvez générer des scripts pour le schéma et les données de la manière suivante:

    • Ouvrez Management Studio et connectez-vous à votre instance.
    • Ouvrez l'Explorateur d'objets.
    • Cliquez avec le bouton droit sur votre base de données nouvellement restaurée, choisissez Tâches> Générer des scripts ...
    • Cliquez sur Suivant, cliquez sur Suivant
    • Sur la page "Choisir les options de script", faites défiler vers le bas et définissez "Données de script" sur True
    • Cliquez sur Suivant
    • Vérifiez tous les objets pertinents et cliquez sur Suivant
    • Cochez les tables souhaitées et cliquez sur Suivant
    • Choisissez de créer un script dans un fichier. Maintenant, vous aurez un fichier qui contient tous vos objets et données en utilisant la syntaxe d'insertion SQL Server, vous devrez jouer avec la sortie pour l'obtenir dans un format qui fonctionne pour Postgres (je ne suis pas au courant de différences de syntaxe mineures).

Alternativement, vous pouvez essayer de jouer avec tilitaire bcp pour extraire des données vers des fichiers CSV ou similaire, mais vous devrez le faire table par table ou utiliser des scripts intelligents (PowerShell, T-SQL , C #/SMO, etc.) pour générer toutes les commandes bcp pour vous. Une fois dans les fichiers CSV, il devrait être trivial de charger en masse les données dans Postgres (mais vous aurez encore du travail pour générer les tables).

Comme dernière suggestion, si le fichier .bak n'est pas génial et que les données ne sont pas confidentielles, je suis plus que disposé à essayer de générer des fichiers pour vous dans le format dont vous avez besoin. J'ai beaucoup de machines virtuelles Windows avec de l'espace, le défi serait d'obtenir le fichier .BAK à un endroit où je peux le récupérer - surtout s'il est plus grand que la plupart des services de partage de fichiers pris en charge.

19
Aaron Bertrand

Malheureusement, il n'y a aucun moyen d'accéder au contenu d'un fichier .bak sans avoir une connaissance approfondie de l'intérieur du fichier lui-même. Je peux penser à une personne ici qui pourrait avoir accès à ces informations, mais je ne peux pas dire si cette personne vous dirait comment procéder.

Vous devrez donc installer une instance SQL Server. Vous devrez également vous assurer que cette instance peut parler à votre serveur Postgres (frigging avec le pg_hba.conf) Une fois là-bas, vous avez quelques bons chemins pour migrer les données.

Le premier chemin consiste à installer le pilote Postgres Windows ODBC et à configurer une connexion au serveur pg. Ensuite, vous pouvez utiliser SSIS pour créer un script de migration des données. Si vous allez y aller route, je vous suggère d'installer SSIS lors de l'installation du serveur de base de données.

L'autre option implique également la connexion du pilote ODBC, mais vous pouvez créer un serveur lié dans SQL Server et exécuter des insertions sur l'instance pg via SQL Server. J'ai répondu à cette question exacte ici avant donc ça ne devrait pas être difficile à trouver.

ÉDITER

Pour intégrer le commentaire d'Aaron, une fois SQL Server opérationnel, vous pouvez également exporter les données vers des fichiers plats de différentes manières. Si vous choisissez ce chemin, faites-le moi savoir et je posterai quelques façons de le faire

MODIFIER (2):

Le processus de serveur lié n'est peut-être pas la meilleure approche, sauf si vous souhaitez créer les structures à l'avance. C'est ma méthode préférée, mais j'ai généralement déjà la structure en place des deux côtés.

Cela laisse la réponse d'Aaron Bertrand comme la meilleure réponse. Veuillez noter qu'en plus des types de données (IDENTITY vs SEQUENCE, postgres ne sait rien de NVARCHAR puisque vous définissez l'encodage sur la base de données elle-même). Postgres ne sait rien de CREATE CLUSTERED INDEX ( CLUSTER peut fonctionner pour vous). Enfin, comme je vois dans les commentaires que vous allez utiliser des données spatiales, postgresql ne sait rien de CREATE SPATIAL INDEX syntaxe. Vous devrez installer postgis et utiliser le mot clé INDEXTYPE pour créer des index spatiaux. Enfin, assurez-vous de gérer les schémas de manière appropriée.

Longue histoire courte:

  1. Générer des scripts et des données en utilisant la méthode d'Aaron Bertrand (je m'en tiendrai probablement au niveau de la table)
  2. Prenez note de l'index DDL (s'il est toujours valide), mais ne l'incluez pas
  3. Créer des index sur postgres une fois la structure et les données en place
7
swasheck