2 votes

Copier une table d'un serveur SQL à un autre - Impossible de les lier

J'ai deux serveurs SQL : MyServer y LeurServeur . Je n'ai pas la possibilité de relier ces deux serveurs.

J'aimerais récupérer toutes les données d'une table sur LeurServeur et le copier dans MyServer sur une base quotidienne. Le nombre actuel d'enregistrements dans la table est de plus de 600k et va augmenter lentement. Les tables sont identiques l'une à l'autre, les noms des colonnes et les types de données.

Ma première idée était d'essayer de remplir un tableau de données avec un fichier de type Select * contre TheirServer, et ensuite essayer une SQLBulkCopy en MyServer . Naturellement, cela provoque une exception System.OutOfMemoryException sur le serveur Web. En suivant ce raisonnement, mon prochain plan d'attaque est d'utiliser un fichier de type SQLDataReader pour extraire environ 50 000 enregistrements à la fois, puis interrompre la lecture et copier en masse ces enregistrements, rincer et répéter. Avant de faire cela, j'ai pensé que je pourrais voir si je ne m'y prends pas de la mauvaise façon.

Note : Puisque je ne demande qu'une meilleure pratique, peu m'importe que le code soit en C# ou en VB, ou qu'il y ait du code tout court.

3voto

Nicholas Carey Points 24614

La ligne de commande (shell) est votre amie. Consultez le bcp d'utilité .

L'utilisation pour votre scénario est assez simple :

bcp src-database.dbo.src-table out "c:\work\datafile.dat" -S srcSQLServerInstance -E -n
bcp tgt-database.dbo.tgt-table int "c:\work\datafile.dat" -S tgtSQLServerInstance -E -n

Vous devrez tronquer la table de destination (cible) avant de charger la nouvelle chute de données.

Tout cela peut être fait dans un fichier batch *.cmd et programmé.

Vous pouvez également écrire un paquet SSIS ou DTS pour accomplir la même chose et le programmer dans SQL Server.

Moi-même, j'aime avoir un script qui peut facilement être débogué/testé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X