2011-08-23 5 views
0

J'ai besoin de consolider les données de 30 bases de données et 20 tables. Ma première tentative a été de créer un flux de données pour chaque table. Chaque flux de données aurait 30 sources db qui prend les données de 1 table de chaque DB, puis insère dans 1 destination. Cela ne fonctionne pas car il n'y a pas assez de mémoire. J'ai essayé de filtrer les données pour ignorer les données qui ne vont pas être utilisées - cela n'a pas aidé. Ces tâches devraient fonctionner quotidiennement. Consolidation complète db est supprimé, puis de nouvelles données sont insérées, ce qui signifie que d'énormes quantités de données sont insérées quotidiennement. Quelqu'un a une suggestion de la façon de gérer le problème de la mémoire?SSIS Consolider une énorme quantité de données - suggestion

La seule solution pour l'instant je vois est de créer 20 paquets. Chaque paquet aurait 30 flux de données. Chaque flux de données prendrait les données d'une seule base de données. Mais encore une fois, je ne sais pas quel est l'ordre d'exécution? Les flux de données d'un paquet commenceront-ils à s'exécuter en même temps ou vont-ils un par un?

EDIT:

Voilà comment je l'ai fait ... voici capture d'écran du flux de contrôle: enter image description here

Capture d'écran de flux de données: http://img833.imageshack.us/img833/355/45908206.png

J'ai créé un paquet pour une table de toutes les bases de données. Dans ce cas, chaque flux de données prend des données de 4 ans à partir d'une table et les importe dans une base de données source. Le problème est que j'ai une table dans une base de données qui a trop de données et il renvoie l'erreur:

The buffer manager failed a memory allocation call for 10484608 bytes, but was unable to swap out any buffers to relieve memory pressure. 20 buffers were considered and 20 were locked. Either not enough memory is available to the pipeline because not enough are installed, other processes were using it, or too many buffers are locked.

Des suggestions?

+0

Exactement - la même structure et il exécute une fois tous les jours. –

Répondre

2

Voici ce que je suggérerais si vous envisagez de le faire dans SSIS.

  1. Supposons que vous avez des tables A, B, C ..., R, S, T dans les bases de données DB1, DB2 .. DB30. Et aussi votre base de données de consolidation dans MainDB.

  2. Créer un package SSIS qui contiendra 1 ou plusieurs tâches de flux de données pour transférer des données à partir des tables de base de données DB1 aux tables dans la base de données MainDB. Pour ce faire, vous pouvez utiliser une source OLEDB pour récupérer des données à partir de DB1. Si vous devez appliquer certaines transformations, vous pouvez le faire avec les tâches de transformation appropriées. Pour insérer des données dans les tables de destination, vous pouvez utiliser une destination OLE DB.

  3. Enregistrer la chaîne de connexion dans le fichier de configuration de package (dtsConfig)

  4. Créer 30 configuration différents fichiers contenant chacun la chaîne de connexion pour les 30 bases de données que vous avez.

  5. Vous pouvez créer 30 travaux SQL sous Agent SQL Server pour planifier l'exécution quotidienne.

  6. Chaque travail SQL exécute le même package SSIS mais utilise le fichier de configuration correspondant pour pointer vers la base de données correcte.

Other options are:

  1. En utilisant SQL Server Replication. Vous avez besoin d'un processus en deux étapes. Tronquer les données dans MainDB en utilisant un travail SQL, puis synchroniser les données entre les bases de données.

  2. Utilisez des produits commerciaux comme Redgate ou Idera

Espoir qui vous donne une idée.

+0

"Créer un package SSIS qui va synchroniser les 20 tables entre la base de données DB1 et MainDB." - Que voulez-vous dire exactement par "synchronisation"? Je ne comprends pas cette étape. Merci d'avoir répondu! –

+0

J'ai édité ma question ... le problème est en mémoire, évidemment cette méthode essaie de gérer trop de données. Merci de votre aide! –

+0

il manque quelques détails dans cette réponse pour le rendre compréhensible pour un débutant ... voici ce que je suis arrivé à la fin: 1) C'est la méthode que j'ai utilisée dans la tâche de flux de données pour insérer/mettre à jour/supprimer des enregistrements: http://stackoverflow.com/questions/7254079/ssis-delete-rows 2) Utiliser la boucle FOREACH: http://stackoverflow.com/questions/7347284/ssis-using-foreach-to-read -from-multipe-dbs 3) Si vous rencontrez des problèmes de mémoire, cela pourrait être l'une des solutions: http://stackoverflow.com/questions/7393027/ssis-out-of-memory-error-again –

Questions connexes