10
votes

Comment exécuter un package SSIS lorsqu'un fichier est arrivé au dossier

L'exigence est d'exécuter un package SSIS, lorsqu'un fichier est arrivé dans un dossier, je ne veux pas démarrer le package manuellement.

Ce n'est pas sûr de la synchronisation de l'arrivée du fichier, les fichiers peuvent également arriver plusieurs fois .Lorsque les fichiers sont arrivés, il faut charger une table.Je pense, une solution comme la tâche de l'observateur de fichiers, attendez-vous toujours à démarrer le package.


1 commentaires

Il y a un post similaire ici, vous pouvez essayer: Stackoverflow.com/Questtions/15273593/...


4 Réponses :


2
votes

Vous pouvez créer un service Windows utilisant WMI pour détecter les packages d'arrivée du fichier et de lancement. Détails sur la façon de se situer ici: http://msbimentalist.wordpress.com/2012/04/27/trigger-ssis-package-Que-ffiles-Available-in-a-folder-part2/?relatedPosts_exclude=330


3 commentaires

Il semble que j'ai besoin de connaissances dans .net pour le faire. Quelqu'un dans les SSIS de choisir cela?


@ user1254579 Vous pouvez exécuter un package de boucle pour toujours avec une tâche de script qui recherche un fichier, puis exécute un autre package. Votre fichier sera-t-il toujours appelé la même chose? I.e. Customer.txt ou sera-ce à la clientèle1.txt puis Customer2.txt


Initial Googlings Show Vous pouvez utiliser la tâche FileWatcher, mais que des avertissements de fuite de mémoire me feraient semblant. On dirait qu'il montre exactement ce que vous devez faire.



10
votes

La façon dont je l'ai fait dans le passé est avec un package en boucle infini appelé Agent SQL Server, par exemple;

Ceci est mon emballage en boucle infinie: p>

 package simple p>

Set 3 variables: strong> p>

isfileeexistes - Boolean - 0 p>

folderLocation - String - c: \ Où le fichier doit être mis en \ p>

isfileeexistes booléen - 0 p>

pour le conteneur de boucle:

pour conteneur de boucle p>

Définir le isfileeexistes Code> Variables comme ci-dessus. p>

Configuration d'une tâche de script C # avec l'utilisateur ReadonlyVariable sous la forme Utilisateur :: FolderLocation Code> et avez les suivants: P>

 public void Main()
    {
        int fileCount = 0;
        string[] FilesToProcess;
        while (fileCount == 0)
        {
            try
            {

                System.Threading.Thread.Sleep(10000);
                FilesToProcess = System.IO.Directory.GetFiles(Dts.Variables["FolderLocation"].Value.ToString(), "*.txt");
                fileCount = FilesToProcess.Length;

                if (fileCount != 0)
                {
                    for (int i = 0; i < fileCount; i++)
                    {
                        try
                        {

                            System.IO.FileStream fs = new System.IO.FileStream(FilesToProcess[i], System.IO.FileMode.Open);
                            fs.Close();

                        }
                        catch (System.IO.IOException ex)
                        {
                            fileCount = 0;
                            continue;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        // TODO: Add your code here
        Dts.TaskResult = (int)ScriptResults.Success;
    }
}
}


3 commentaires

Merci pour la solution.La chose est que nous avons SQL 2000 en tant que base de données cible (DWh) et une installation de SSIS 2008 sur la machine locale.L'AFP est possible de planifier l'agent SQL pour exécuter le package?


J'imagine que vous pouvez exécuter l'emballage avec DTEXec sur la machine locale, configurez-le avec un programme de tâches Windows pour exécuter lorsque l'ordinateur redémarre, surveille les options pour arrêter la tâche si elle est exécutée pendant une certaine période. Bien que vous ayez besoin de services d'intégration installés. Autre que cela je ne suis pas tout à fait sûr.


@Peter_r "Définir 3 variables"? Mais ensuite, les variables sont appelées "isfileeexistes", "folderlocation" et "isfileeexistes" à nouveau?



6
votes

Comme d'autres personnes déjà suggérées, l'utilisation de la tâche WMI ou une boucle infinie sont deux options pour y parvenir, mais l'OMI SSIS est intensive de ressource. Si vous laissez un paquet couramment exécuté en arrière-plan, il pourrait manger beaucoup de mémoire, de la CPU et de causer des problèmes de performances avec d'autres packages en fonction du nombre d'autres packages que vous utilisez. Ainsi, une autre option que vous souhaiterez envisager est de planifier un travail d'agent toutes les 5 minutes ou 10 minutes ou quelque chose et appelez votre colis au travail. Configurez le paquet pour continuer uniquement lorsqu'un fichier est là ou cesser de fumer autrement.


3 commentaires

La chose est que nous avons SQL 2000 en tant que base de données cible (DWH) .et une installation de SSIS 2008 sur la machine locale.L'AF-Postile de planifier l'agent SQL pour exécuter le package?


Je ne connais pas avec certitude les paquets SQL 2000 emplois en cours d'exécution 2008.


Vous pouvez exécuter le paquet n'importe où que le SSIS Runtime est installé (c'est-à-dire sur votre installation SQL 2008). Vous devez clarifier l'endroit où le fichier est et où vous devez exécuter le package.



2
votes

0 commentaires