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

 

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

Enterprise Services - MSDTC

Îåêßíçóå áðü ôï ìÝëïò akisk. Τελευταία δημοσίευση από το μέλος KelMan στις 19-01-2006, 10:38. Υπάρχουν 19 απαντήσεις.
Σελίδα 1 από 2 (20 εγγραφές)   1 2 >
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  05-01-2006, 14:30 8407

    Enterprise Services - MSDTC

    Mesa apo ena Enterprise Services (ES) xrisimopio Distributed Transaction (MSDTC) gia na meatafero dedomena apo mia DB apo SQL Server 2000 se mia deyteri DB se Oracle 8i.
    Eno tis perisoteres fores oli h diadikasia ektelite xoris kanena problima, merikes fores o MSDTC mou epistrefi to akolou8o minima:

    Error Code: 8525 Error Message: Distributed transaction completed. Either enlist this session in a new transaction or the NULL transaction.

    Perigafi Efarmogis:
    H diadikasia tis metaforas dedomenon ektelite meso enos windows service ka8e 5 sec. Ta dyo sistimata den einai sto idio diktio (iparxi firewall metaksi tous). Oi portes exoun "setaristi" sosta kai sta 2 firewall (135 - RPC,  1433-SQL server,  MSDTC ports ).
    To parapano la8os mporei na emfanisti gia sintomo xroniko diastima kai meta xoris kamia allagi na treksi sosta, omos iparxoun kai periptosis pou epanalambanete sinexomena.

    1) Kamia idea ?
    2)To connection string sto ES component me ton SQL Server 8a prepi na exei Enlist=True h False
    3)To OS sto mixanima pou "trexei" to ES einai Windows 2003 Server eno o SQL Server einai se Windows 2000. Ena setaro to Isolation Level tou component se Read Commited 8a iparxei problima pou to OS tou deyterou sistimatos einai Win2000 (ta win2000 ipostirizoun mono IL:serialized)?

    Tnx!
  •  05-01-2006, 15:16 8408 σε απάντηση της 8407

    Απ: Enterprise Services - MSDTC

    Αυτό το μήνυμα μπορεί να εμφανιστεί αν κάποια από τις βάσεις έχει ήδη κάνει commit ή rollback όταν πάει το component να κάνει commit. Αυτό μπορεί να συμβαίνει επειδή κάποια από τις δύο βάσεις έκανε rollback εξαιτίας κάποιου λάθους.


    Το Enlist πρέπει να είναι true, αλλά αυτή είναι και η default τιμή. Η έκδοση του μηχανήματος στον οποίο τρέχει ο SQL Server δεν έχει σημασία, μόνο η έκδοση του μηχανήματος στο οποίο τρέχει το COM+. Όπως και να έχει πάντως, μην αρχίζεις να πειράζεις τις ρυθμίσεις, σχεδόν σίγουρα δεν φταίνε αυτές για το πρόβλημα.
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  05-01-2006, 15:34 8409 σε απάντηση της 8407

    Απ: Enterprise Services - MSDTC

    To problima to exw mono sto SQL Server. H diadikasia einai aplh, perno mia tixaia eggrafi (ORDER By NEWID()) apo ena pinaka kai thn diagrafo. Me mia deyteri me8odos tou component eisago thn eggrafi stin Oracle. Panta to problima dimiourgite stin proti me8odo (exception type: SqlException).
    Den ksero mipos to problima einai sto Transaction Timeout tou component.
    To read/delete ston pinaka ginete ana 5 sec me neo object ka8e fora .To timeout sto component einai ana 25sec.
  •  05-01-2006, 16:35 8412 σε απάντηση της 8409

    Απ: Enterprise Services - MSDTC

    Το πρόβλημα δεν εμφανίζεται στον SQL Server, έχει ήδη εμφανιστεί όταν φτάνεις εκεί. Θα πρέπει να βεβαιωθείς ότι και η Oracle δεν κάνει κάποιο rollback στα κρυφά.

    Κάτι άλλο που θα πρέπει να κοιτάξεις είναι αν έχεις βάλει το [AutoComplete] attribute στην μέθοδο του serviced component που καλείς ή αν χειρίζεσαι μόνος σου το transaction μέσω των μεθόδων SetCommit, SetAbort. Βεβαιώσου επίσης ότι δεν ξεμένει κανένα reference στο serviced component που δεν του επιτρέπει να καταστραφεί.

    Άλλο σημείο που μπορεί να δημιουργήσει πρόβλημα είναι αν κρατάς σε κάποιο πεδίο το connection αντί να το δημιουργείς και να το καταστρέφεις μέσα στη μέθοδο σου. Ανάλογα με το πως έχεις βάλει τις ρυθμίσεις του component (Object pooling? JIT Activation? AutoComplete?) αλλάζει ο χρόνος κατά τον οποίο δημιουργούνται και καταστρέφονται τα connections.

    Γενικά τα "τυχαία" μηνύματα λάθους οφείλονται σε απρόσμενους χρόνους καταστροφής των αντικειμένων. Ειδικά στην περίπτωση των serviced components θα πρέπει να αποφεύγεις την αβεβαιότητα καλώντας με το χέρι τις μεθόδους Dispose ή Close, ή χρησιμοποιώντας το using αν γράφεις σε C#.

    Α, ναι. Έχεις εγκαταστήσει τα τελευταία service packs στα μηχανήματα, έτσι? Τουλάχιστον να μην έχουμε κι αυτό το θέμα
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  09-01-2006, 10:13 8464 σε απάντηση της 8407

    Απ: Enterprise Services - MSDTC

    To [AutoComplete] attribute iparxi stin me8odo tou component den xeirizomai egw to transaction.
    To connection den to kratao se kapoi pedio alla mesa stin me8odo.
    Ta settings tou component einai:
    Object Pooling = false
    JIT Activation = true
    TransactionOption = RequiresNew
    TransactionIsolationLevel = ReadCommitted

    8a prospa8iso na perigrapso me pseydokodika to comonent:
    -----------------------------------------------------------------------------------------------------------
    Public Class Component

    Public Sub TransferDataFromSQLtoOracle()
    GetDataFromSQL()
    InsertDataToOracle()
    End Sub

    AutoComplete
    Private Sub GetDataFromSQL
    Try
        open connection
        get record from table (SELECT Top 1....FROM T1 With (NOLOCK))
        delete record (DELETE FROM T1 with (ROWLOCK) WHERE ID=...)
    Catch
    Finally
        close connection
    End Try
    End Sub

    AutoComplete
    Private Sub InsertDataToOracle
    Try
        open connection
        insert record
    Catch
    Finally
        close connection
    End Try

    End Sub

    End class
    ----------------------------------------------------------------------------------------------------

    Distixos o SQL Server briskete se allh etairia kai den exw ton elegxo...
    Pantos tsekara tin version pou exoun kai distixos den exoun riksi kanena SP!!!
    tous enimerosa kai perimeno na dw an to problima htan ayto...oso gia to OS perimeno akoma apantisi ti SP exoun riksi...

    Tnx again...!
  •  09-01-2006, 18:14 8469 σε απάντηση της 8409

    Απ: Enterprise Services - MSDTC

     akisk wrote:
    To read/delete ston pinaka ginete ana 5 sec me neo object ka8e fora .To timeout sto component einai ana 25sec.

    Γεια σου akisk,
    Από περιέργεια,
    αυτά δεν θα έπρεπε να είναι ανάποδα;


    Πάνος Αβραμίδης
  •  10-01-2006, 08:52 8482 σε απάντηση της 8469

    Απ: Enterprise Services - MSDTC

    Ka8e 5sec dimiourgite ena neo object. Sini8os aytos o xronos einai arketos gia to read/delete kai tin katastrofi tou object, se periptosi pou den paei kati kala o DTC 8a kanei timeout sta 25 sec. Aplos se ayta ta 25sec 8a exoun dimiourgi8i kai alla objects kai 8a kanoun kai ayta read/delete ston pinaka. Ayto den dimiourgi kapoio problima (toulaxiston etsi nomizo dior8osteme an kano la8os) mias kai to Isolation Level einai read committed kai to locking einai se epipedo record.

    Akis.
  •  10-01-2006, 09:59 8486 σε απάντηση της 8407

    Απ: Enterprise Services - MSDTC

    Θα μπορούσες να μην βάλεις AutoComplete, αλλά να κάνεις εσύ explicit SetComplete/SetAbort χρησιμοποιώντας μια δομή Try...Catch όπου στο Catch μπορείς να καταγράφεις το exception (πχ στο Application log) ώστε να πάρεις μια ιδέα πότε και γιατί χτυπάει.
    Vir prudens non contra ventum mingit
  •  10-01-2006, 11:36 8492 σε απάντηση της 8486

    Απ: Enterprise Services - MSDTC

    Auto ginete kai tora...yparxei to Try/Catch kai sto catch to exception pou pairnw einai SQLException me perigrafi:

    Distributed transaction completed. Either enlist this session in a new transaction or the NULL transaction. (8525)

    To opio kai katagrafo sto Event Log pou exw dimiourgisi (me thn EventLog class tou .NET) gia to windows service pou kalei to component.

    To parapano exception simbeni mono stin me8odo tou component pou kanei read/delete sto SQL Server kai oxi stin me8odo pou kanei insert ta data stin Oracle. Kai opos exw perigrapsi stin arxi paroti to exception simbeni poli spania iparxi periptosi kai ola ta epomena objects pou dimiourgountai ana 5sec na "skane" me to idio exception....

    Akis
  •  10-01-2006, 11:37 8493 σε απάντηση της 8486

    Απ: Enterprise Services - MSDTC

    Κανένα SP?! Τώρα δέσαμε... Γενικά πάντως δεν είναι και η καλύτερη δυνατή ιδέα να εκτελείς distributed transaction μεταξύ μηχανημάτων διαφορετικών εταιρειών. Καθόλου καλή. Καθόλου καθόλου. Μια γκάφα του άλλου και κρεμάει η δική σου εφαρμογή! Η έννοια του two-phase commit ΔΕΝ δημιουργήθηκε γι αυτή τη χρήση.

    Δεν έχει σημασία πάντως το Isolation level ούτε το timeout, ούτε ο αριθμός των αντικειμένων που δημιουργούνται. Για κάποιο άλλο λόγο είτε το distributed transaction είτε ένα από τα δύο transactions στις βάσεις έχει ολοκληρωθεί πριν τελειώσει η εκτέλεση της μεθόδου. Με κάποιο τρόπο θα πρέπει να ελέγξεις τα πιθανά λάθη που επιστρέφονται και από τις δύο βάσεις.

    Οπωσδήποτε, κοίτα τα στατιστικά και το transaction list του DTC από το Component Services. Μπορείς επίσης να ενεργοποιήσεις tracing στο DTC αν πας από τα Component Services στο My Computer->Properties. Ένα από τα tab περιέχει τις ρυθμίσεις του DTC και settings για tracing.

    Ίσως βέβαια να φταίει και κάτι άλλο. Αν η ταχύτητα σύνδεσης των δύο εταιρειών δεν επαρκεί ή αν υπάρχει καθυστέρηση λόγω φόρτου, μπορεί κάποια transactions να κάνουν timeout περιμένοντας απάντηση από την άλλη άκρη. Οπότε θα πρέπει να ελέγξεις και την κίνηση στο δίκτυο ....

    Σε τέτοιες αρχιτεκτονικές πάντως είναι προτιμότερο να χρησιμοποιείς queues για την επικοινωνία μεταξύ των δύο εταιρειών, ακριβώς για να βγάλεις από τη μέση την αβεβαιότητα του δικτύου αλλά και για να αποσυνδέσεις τα δύο συστήματα. Αν γίνει ένα deadlock στην άλλη εταιρεία, ή αν μπλοκάρει ο άλλος επίτηδες το transaction, θα μπλοκάρει και η δική σου εφαρμογή.

    Σκέψου το σύστημα του Χρηματιστηρίου να βρισκόταν σε two-phase commit με μια ΑΧΕ ... η οποία θα ωφελούνταν αν κάποιες συναλλαγές καθυστερούσαν λίιιιιγάκι ...
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  10-01-2006, 12:06 8494 σε απάντηση της 8493

    Απ: Enterprise Services - MSDTC

    H proti lisi pou eixa protini den htan me Enterprise Services alla me Web Services...disitxos aporif8ike giati 8a eprepe na kataskeyasoyn kai apo tin meria tous ena WS,  kati  pou adinatousan na kanoun tin sigekrimeni xroniki stigmi. Etsi 8a eixa apofigi na mplekso me baseis dedomenon kai two-phase commit.

    Tora "eriksan" to SP3a ston SQL Server alla akomi den exei gini kapoio test....(makari na htan ayto to problima an kai den to nomizo)
    To diktio einai kati to opio den exw tsekari akomi kai den mporo na apokliso ta timeout na simbenoun logo kapias ka8isterisis...

    To Messaging den to eixa psaksi arketa....kai telika isos na odigi8o se kati tetio an eksakolou8iso na exw to problima.

    tnx again ...

    Akis

  •  10-01-2006, 13:56 8500 σε απάντηση της 8407

    Απ: Enterprise Services - MSDTC

    Αυτό το exception που παίρνεις μήπως έχει άλλα inner exceptions;
    Vir prudens non contra ventum mingit
  •  10-01-2006, 15:07 8504 σε απάντηση της 8494

    Απ: Enterprise Services - MSDTC

    Βρε akisk, γιατί συνεχίζεις τα greeklish? Είναι εξαιρετικά ενοχλητικά για όποιον προσπαθεί να διαβάσει τα μηνύματα στα γρήγορα, και μάντεψε ... όλοι μας είμαστε πηγμένοι! Εγώ ειδικά έχω προλάβει να δω μόνο 2 φορές τα posts αυτή τη βδομάδα. Άσε που αν προσπαθήσει κάποιος να κάνει search δεν πρόκειται να βρει posts με greeklish. Αυτή τη στιγμή προσπαθώ να γράψω μια μετάφραση, να δω τί θα κάνω με τον Κωτσόβολο που μου έκανε μαντάρα τη λίστα γάμου (τα χρήματα πάνε σε άλλη λίστα) και ταυτόχρονα να διαβάσω κανένα ενδιαφέρον post, π.χ. ένα για MSDTC!

    Έχω ημιφρικάρει! (Το άλλο μισό φρικάρισμα θα το φάω αν γεμίσω βάζα επειδή ο κόσμος δεν μπορούσε να βάλει χρήματα στον Κωτσόβολο)
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  10-01-2006, 15:44 8507 σε απάντηση της 8407

    Απ: Enterprise Services - MSDTC

    Συγνώμη !! από εδώ και εμπρός μόνο ελληνικά.!!
  •  10-01-2006, 15:58 8509 σε απάντηση της 8500

    Απ: Enterprise Services - MSDTC


    1) Όχι δεν υπάρχει άλλο inner exception. Μόνο το "Distributed transaction completed. Either enlist this session in a new transaction or the NULL transaction."

    2) Μετά από την εγκατάσταση του SP3a στον SQL Server το πρόβλημα εξακολουθεί και υπάρχει....

    Akis.

Σελίδα 1 από 2 (20 εγγραφές)   1 2 >
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems