Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Using a Trigger to Launch a DTS Package

Îåêßíçóå áðü ôï ìÝëïò axaros. Τελευταία δημοσίευση από το μέλος axaros στις 05-01-2006, 20:29. Υπάρχουν 9 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  05-01-2006, 16:32 8410

    Using a Trigger to Launch a DTS Package

    ΚΑΛΗ ΧΡΟΝΙΑ !!!!!
    Πως θα το κάνω παιδιά ;

     


    Πάνος Αβραμίδης
  •  05-01-2006, 19:06 8414 σε απάντηση της 8410

    Απ: Using a Trigger to Launch a DTS Package

    Μάλιστα... Κλασική ερώτηση...

    Υπάρχουν δύο τρόποι. Ο πρώτος είναι να χρησιμοποιήσεις την extended sp xp_cmdshell μέσω της οποίας θα καλέσεις το DTSRUN utility. Ο δεύτερος τρόπος είναι να χρησιμοποιήσεις τις OLE stored procedures για να εκτελέσεις το DTS πακέτο ως COM object (εδώ ένα παράδειγμα) .

    Ωραία, και τώρα μπορείς να ξεχάσεις την απάντηση και να ψάξεις για workaround! Πλάκα-πλάκα, θα σου πρότεινα να εξετάσεις προσεκτικά το κατά πόσο είναι απαραίτητο να κάνεις κάτι τέτοιο. Ανάλογα τη φύση του trigger και των operations που γίνονται πάνω στον πίνακα, μπορεί να αυξηθεί κατακόρυφα ο χρόνος που θα χρειάζονται για να ολοκληρωθούν τα transactions (είτε implicit - είτε explicit) που θα έχουν προκαλέσει την εκτέλεση του trigger, οπότε θα μειωθεί ανάλογα και το concurency του συστήματος (περισσότερα locks, κλπ), ειδικά σε ένα busy OLTP σύστημα.

    Αν περιγράψεις τι θέλεις να κάνεις, ενδεχομένως να έχουμε κάτι εναλλακτικό να σου προτείνουμε.


    Vir prudens non contra ventum mingit
  •  05-01-2006, 19:36 8415 σε απάντηση της 8414

    Απ: Using a Trigger to Launch a DTS Package

    Μάνο ευχαριστώ !!!
    Ο trigger δεν θα κάνει τίποτε άλλο παρά να καλεί ένα package που
    τρέχει ένα statement και παράγει ένα text (fixed length) αρχείο :

    COMMIT TRAN
    EXEC master..xp_cmdshell "DTSRUN /S SERVER /E /NTransfer /A 'c:\ExportedData\TEST.txt'"

    Έχοντας το ίδιο πρόβλημα με παλαιότερα (δεν θέλω να "χάσω" την νέα εγγραφή)
    θα κάνω COMMIT στην είσοδο.

    Το ξέρω ότι σας έχω πρήξει με αυτό το ζήτημα αλλά πάλι export data θέλω να κάνω :

    1. SELECT ένα Set εγγραφών
    2. Να μαρκάρω τις εν λόγω με κάποιο flag σαν exported
    3. Να γράψω το text αρχείο


    Πάνος Αβραμίδης
  •  05-01-2006, 19:44 8416 σε απάντηση της 8415

    Απ: Using a Trigger to Launch a DTS Package

    Γιατί βρε ματάκια μου όλα πρέπει να γίνουν την ίδια στιγμή;

    Γιατί μέσα στο trigger σου δεν βάζεις να γράφει μια εγγραφή σε ένα τρίτο table και στη συνέχεια να έχεις ένα system service/timed application που σε τακτά χρονικά διαστήματα να τσεκάρει τις εγγραφές στο τρίτο table, να κάνει τα exports και αφού είναι επιτυχιμένα να κάνει και ένα update στην εγγραφή ότι έγινε το export;

    Ετσι και την διαδικασία της εγγραφής δεν κόβεις και είναι γρήγορη, και δεν πρόκεται να σου φύγει κάποια...

     

    George J.

     


    George J. Capnias: Χειροπρακτικός Υπολογιστών, Ύψιστος Γκουράρχης της Κουμπουτερολογίας
    w: capnias.org, t: @gcapnias, l: gr.linkedin.com/in/gcapnias
    dotNETZone.gr News
  •  05-01-2006, 19:51 8417 σε απάντηση της 8415

    Απ: Using a Trigger to Launch a DTS Package

    Το ερώτημα είναι, θες να γίνεται αυτή η δουλειά σύχρονα; Αν δεν είναι απαραίτητο, θα μπορούσες να φτιάξεις ένα job που ανα τακτά χρονικά διαστήματα θα ελέγχει για εγγραφές που έχουν το flag set και θα τις κάνει export. Το ίδιο πράγμα μπορεί να γίνει αν φτιάξεις κάποιο service που θα τρέχει στο background και κάνει την ίδια δουλειά , ωστόσο θα πρέπει να κάνεις εσύ το implement του κώδικα που θα δημιουργεί το text αρχείο - όχι ότι είναι κανένα βουνό, με τις κλάσεις του System.IO namespace είναι παιχνίδι.

    Από την άλλη μεριά, αν θες να το κάνεις σύγχρονα, μπορείς να φτιάξεις ένα server-side component που θα κάνει αυτή τη δουλειά έτσι ώστε να μην επιβαρρύνεις τον SQL Server. Περισσότερη δουλειά αλλά να σου πω, θα έκανα τα πάντα για να μην καταφύγω στο DTS. Ακόμα και το απλό παγματάκι που περιγράφεις, έχει αρκετό overhead. Φαντάσου δηλαδή ένα t-sql statement που τελειώνει σε δέκατα του δευτερολέπτου και βάλε από πάνω το overhead που έχει ένα COM component για να τρέξει.

     


    Vir prudens non contra ventum mingit
  •  05-01-2006, 19:53 8418 σε απάντηση της 8410

    Απ: Using a Trigger to Launch a DTS Package

    Πω-πω-πω! Αυτό είναι response... Smile [:)]

    Μέχρι να γράψω την απάντηση είχε προλάβει ο Γιώργος... Πάντως βλέπεις; Οι 40 κατασκευαστές συμφωνούν...


    Vir prudens non contra ventum mingit
  •  05-01-2006, 19:55 8419 σε απάντηση της 8418

    Απ: Using a Trigger to Launch a DTS Package

     KelMan wrote:
    Πω-πω-πω! Αυτό είναι response... Smile [:)]

    Μέχρι να γράψω την απάντηση είχε προλάβει ο Γιώργος... Πάντως βλέπεις; Οι 40 κατασκευαστές συμφωνούν...

    Πρέπει να είναι και η πρώτη φορά που προλαβαίνω κάποιον... Big Smile [:D]

     

    George J.

     


    George J. Capnias: Χειροπρακτικός Υπολογιστών, Ύψιστος Γκουράρχης της Κουμπουτερολογίας
    w: capnias.org, t: @gcapnias, l: gr.linkedin.com/in/gcapnias
    dotNETZone.gr News
  •  05-01-2006, 20:10 8421 σε απάντηση της 8419

    Απ: Using a Trigger to Launch a DTS Package

    Παιδιά έχετε δίκιο,
    Το έχω ήδη φτιάξει με Service και δουλεύει μια χαρά ...
    Από περιέργεια κοιτάω και άλλους τρόπους ...

    Μία ερώτηση ακόμη :

    Πως θα χρησιμοποιήσω κάποιο Global Variable για να περνάω παραμετρικά το
    όνομα του text File με /Α ;
    Πάνος Αβραμίδης
  •  05-01-2006, 20:16 8422 σε απάντηση της 8410

    Απ: Using a Trigger to Launch a DTS Package

    Εδώ είναι που ο τρόπος του xp_cmdshell σηκώνει τα χέρια... Μόνο με τον άλλον τρόπο μπορείς να το κάνεις αυτό!
    Vir prudens non contra ventum mingit
  •  05-01-2006, 20:29 8423 σε απάντηση της 8419

    Απ: Using a Trigger to Launch a DTS Package

    Μάνο αν έχεις χρόνο μου ρίχνεις κάτι πιο συγκεκριμένο γιατί αυτό το
    dynamic properties task μου έχει πρήξει τα συκώτια !!!!

    Κάτι σχετικό βρήκα εδώ :
    http://www.databasejournal.com/features/mssql/article.php/10894_3559551_1


    Πάνος Αβραμίδης
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems