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.
Voici ce que je propose:
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 .
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:
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.
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: