ΕΠΙΔΙΌΡΘΩΣΗ: Εμφανίζεται μήνυμα λάθους όταν προσπαθείτε να εισαγάγετε δεδομένα στο συνδρομητή ένα αναπαραγωγής συγχώνευσης στον SQL Server 2005: "Msg 548, επίπεδο 16, κατάσταση 2, γραμμή 1. Η εισαγωγή απέτυχε"

Σφάλμα #: 50002854 (SQL επείγουσας επιδιόρθωσης)
Η Microsoft διανέμει ενημερώσεις κώδικα του Microsoft SQL Server 2005 ως ένα αρχείο με δυνατότητα λήψης. Επειδή οι ενημερώσεις κώδικα είναι αθροιστικές, κάθε νέα έκδοση περιέχει όλες τις επείγουσες επιδιορθώσεις και όλες τις ενημερώσεις κώδικα ασφαλείας που είχαν περιληφθεί σε προηγούμενες SQL Server 2005 έκδοση της ενημέρωσης κώδικα.

Συμπτώματα

Εξετάστε το ακόλουθο σενάριο. Στον SQL Server 2005, μπορείτε να ρυθμίσετε μια δημοσίευση συγχώνευσης. Μπορείτε να προσθέσετε έναν πίνακα που περιέχει μια στήλη αναγνωριστικών στη δημοσίευση συγχώνευσης. Στη συνέχεια, εισάγετε δεδομένα σε πίνακα του publisher. Μπορείτε να συγχρονίσετε τα δεδομένα μεταξύ του συνδρομητή και τον εκδότη του και, στη συνέχεια, προσπαθήσετε να εισαγάγετε πρόσθετα δεδομένα σχετικά με τον εκδότη. Σε αυτό το σενάριο, λαμβάνετε το ακόλουθο μήνυμα λάθους στον εκδότη:
Msg 548, επίπεδο 16, κατάσταση 2, γραμμή 1
Η εισαγωγή απέτυχε. Τη διένεξη με έναν περιορισμό του ελέγχου περιοχή ταυτότητας στη βάση δεδομένων 'όνομα βάσης δεδομένων', πίνακα από αναπαραγωγή 'σχήματος. Όνομα πίνακα', στήλη 'ColumnName'. Εάν η στήλη ταυτότητας γίνεται αυτόματα κατά την αναπαραγωγή, ενημερώνουν την περιοχή ως εξής: για τον εκδότη, εκτέλεση sp_adjustpublisheridentityrange; ο συνδρομητής, εκτελέστε τον παράγοντα διανομής ή τον παράγοντα συγχώνευση.
Εάν προσπαθήσετε να εκτελέσετε το sp_adjustpublisheridentityrange αποθηκευμένη διαδικασία από τον εκδότη, όπως αναφέρεται στο μήνυμα λάθους, ακόμα δεν μπορείτε να επιλύσετε αυτό το ζήτημα.

Αυτό το ζήτημα παρουσιάζεται όταν πολλοί παράγοντες συγχώνευσης συγχρονίσετε τα δεδομένα ταυτόχρονα για την ίδια δημοσίευση συγχώνευσης. Αυτό το ζήτημα μπορεί να θα επιδεινωθεί εάν έχετε πολλούς συνδρομητές στη δημοσίευση συγχώνευσης.

Αιτία

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

Προτεινόμενη αντιμετώπιση

Η ενημέρωση κώδικα για αυτό το ζήτημα κυκλοφόρησε πρώτα στην αθροιστική ενημερωμένη έκδοση 8. Για περισσότερες πληροφορίες σχετικά με τον τρόπο απόκτησης αυτού του πακέτου αθροιστική ενημερωμένη έκδοση για τον SQL Server 2005 Service Pack 2, κάντε κλικ στον αριθμό του άρθρου παρακάτω, για να προβάλετε το άρθρο της Γνωσιακής Βάσης της Microsoft:
951217 συγκεντρωτική ενημερωμένη έκδοση πακέτου 8 για SQL Server 2005 Service Pack 2
Σημείωση Επειδή το build που είναι αθροιστικές, κάθε νέα έκδοση της ενημέρωσης κώδικα περιέχει όλες τις επείγουσες επιδιορθώσεις και όλες τις ενημερώσεις κώδικα ασφαλείας που είχαν περιληφθεί σε προηγούμενες SQL Server 2005 έκδοση της ενημέρωσης κώδικα. Η Microsoft συνιστά να σκέφτεστε εφαρμογή στην πιο πρόσφατη έκδοση της ενημέρωσης κώδικα που περιέχει αυτήν την επείγουσα επιδιόρθωση. Για περισσότερες πληροφορίες, κάντε κλικ στον αριθμό του άρθρου παρακάτω, για να προβάλετε το άρθρο της Γνωσιακής Βάσης της Microsoft:
937137 του SQL Server 2005 δημιουργεί που κυκλοφόρησαν μετά την κυκλοφορία του SQL Server 2005 Service Pack 2
Επείγουσες επιδιορθώσεις του Microsoft SQL Server 2005 δημιουργούνται για συγκεκριμένο SQL Server service pack. Μια εγκατάσταση του SQL Server 2005 Service Pack 2, πρέπει να εφαρμόσετε μια επείγουσα επιδιόρθωση του SQL Server 2005 Service Pack 2. Από προεπιλογή, κάθε επείγουσα επιδιόρθωση που παρέχεται σε ένα service pack του SQL Server περιλαμβάνεται στο επόμενο service pack του SQL Server.

Εναλλακτικός τρόπος αντιμετώπισης

Για να επιλύσετε αυτό το ζήτημα, πρέπει να αποφεύγεται πολλές ταυτόχρονες συγχώνευσης συγχρονισμών. Για να γίνει αυτό, ορίστε την ιδιότητα max_concurrent_merge στη δημοσίευση συγχώνευσης, εκτελώντας την ακόλουθη δήλωση:
sp_changemergepublication '<PublicationName>', 'max_concurrent_merge', 1
Σημείωση Αφού χρησιμοποιήσετε αυτόν τον εναλλακτικό τρόπο αντιμετώπισης, επιδόσεις μπορεί να μειωθεί αν έχετε πολλούς συνδρομητές για τη δημοσίευση. Αυτή η συμπεριφορά παρουσιάζεται επειδή μόνο ένα συνδρομητή να συγχρονίσετε δεδομένα κάθε φορά.

Κατάσταση

Η Microsoft έχει επιβεβαιώσει ότι πρόκειται για ένα ζήτημα των προϊόντων της Microsoft που παρατίθενται στην ενότητα "Ισχύει για".

Περισσότερες πληροφορίες

Τρόπος διαπίστωσης αν αντιμετωπίζετε αυτό το πρόβλημα

Για να εξακριβώσετε αν αντιμετωπίζετε αυτό το ζήτημα, ακολουθήστε τα εξής βήματα:
  1. Βεβαιωθείτε ότι η τρέχουσα τιμή ταυτότητα είναι μικρότερο από το κάτω όριο της πρώτης περιοχής ταυτότητα του περιορισμού ελέγχου ταυτότητας περιοχής.

    Για να αποκτήσετε την τρέχουσα τιμή ταυτότητας, εκτελέστε την ακόλουθη δήλωση:
    SELECT IDENT_CURRENT ('<TableName>')
    Για να αποκτήσετε τις περιοχές ταυτότητα του περιορισμού ελέγχου ταυτότητας περιοχής, εκτελέστε μία από τις παρακάτω δηλώσεις:
    Δήλωση 1
    sp_helpconstraint '<TableName>'
    Δήλωση 2
    select * from MSmerge_identity_rangewhere is_pub_range <>1
    AND artid IN
    (select artid from sysmergearticles where name='<TableName>')
    AND subid in
    (select subid from sysmergesubscriptions MS
    join sysmergepublications MP
    on MS.subscriber_server=MP.publisher
    AND MS.db_name = MP.publisher_db
    WHERE name='<PublicationName>'
    )

  2. Χρησιμοποιήστε ένα ίχνος Profiler διακομιστή SQL για να προσδιορίσετε αν έχουν ξεκινήσει παρεμβαλλόμενη εκτελέσεις της διαδικασίας sp_MSsetup_publisher_idrange αποθηκεύονται με ξεχωριστές περιόδους λειτουργίας συγχώνευσης παράγοντα για την ίδια δημοσίευση.

    Ωστόσο, παρεμβαλλόμενη εκτελέσεις της διαδικασίας sp_MSsetup_publisher_idrange αποθηκευτεί δεν πάντα υποδηλώνουν ότι αντιμετωπίζετε αυτό το ζήτημα. Αυτό συμβαίνει επειδή ο SQL Server Profiler δεν λειτουργούσε κατά την αρχική εμφάνιση του το συγχρονισμό συγχώνευσης που δημιουργήθηκε το πρώτο μήνυμα σφάλματος. Ωστόσο, παρεμβαλλόμενη εκτελέσεις της διαδικασίας sp_MSsetup_publisher_idrange αποθηκεύονται αυξάνουν την πιθανότητα της αντιμετωπίζει αυτό το πρόβλημα.
  3. Μπορείτε να βρείτε επικαλυπτόμενες συγχρονισμών συγχώνευσης που προκύπτουν όταν λαμβάνετε το μήνυμα λάθους "548". Για να γίνει αυτό, μπορείτε να δείτε το ιστορικό της συγχώνευσης στη βάση δεδομένων διανομής. Για να γίνει αυτό, εκτελέστε τις ακόλουθες δηλώσεις:
    Use distributionGO
    select session_id, agent_id, B.publication, min(time) as StartTime, max(time) as EndTime
    into #sessiontimes
    from dbo.MSmerge_history A
    join dbo.msmerge_agents B
    on A.agent_id = B.id
    group by session_id, agent_id, publication
    order by 3 desc
    GO
    -- The left side result is the original session. The right side result is the overlapping session.
    select A.*, B.*
    from #sessiontimes A
    Join #sessiontimes B
    On B.StartTime >= A.StartTime
    AND B.StartTime <= A.EndTime
    AND A.session_id <> B.session_id
    And A.publication=B.publication
    Order By A.StartTime asc
    GO
    drop table #sessiontimes

Τρόπος για να διορθώσετε υπάρχοντα κατεστραμμένων περιοχών ταυτότητα για προβληματικά πίνακα

Μετά την εγκατάσταση της αθροιστικής ενημερωμένης έκδοσης ή όταν χρησιμοποιείτε τη μέθοδο που περιγράφεται στην ενότητα εναλλακτικός τρόπος αντιμετώπισης, δεν διορθώνεται μια υπάρχουσα περιοχή ταυτότητας είναι κατεστραμμένο σε έναν πίνακα. Θα εξακολουθείτε να λαμβάνετε το μήνυμα λάθους "548" Εάν επιχειρήσετε να εισαγάγετε δεδομένα σε πίνακα και συγχρονίστε τα δεδομένα στον συνδρομητή. Επομένως, θα πρέπει να διορθώσετε με μη αυτόματο τρόπο τις περιοχές ταυτότητα είναι κατεστραμμένο για τον πίνακα. Για να γίνει αυτό, ακολουθήστε τα εξής βήματα.

Σημείωση Αυτά τα βήματα περιλαμβάνουν την αντικατάσταση με μη αυτόματο τρόπο την τρέχουσα τιμή Φύτρο ταυτότητας για τον πίνακα για να reseed σωστά την τιμή ταυτότητας στον εκδότη. Σε κατεστραμμένη κατάσταση, η τρέχουσα τιμή ταυτότητα είναι μικρότερη από την πρώτη περιοχή ταυτότητας με τον περιορισμό ελέγχου περιοχής για την ταυτότητα αναπαραγωγής συγχώνευσης. Τα βήματα με μη αυτόματο τρόπο να αυξήσετε την τιμή ταυτότητας να πέσει μέσα στην περιοχή ταυτότητας που έχει οριστεί από τον περιορισμό ελέγχου περιοχής για την ταυτότητα αναπαραγωγής συγχώνευσης. Τα βήματα αυτά προϋποθέτουν ότι οι ταυτότητες έχουν ρυθμιστεί με αύξουσα τρόπο και ότι η προσαύξηση identity έχει ρυθμιστεί για την αύξηση με τιμή 1.
  1. Επιβεβαιώστε ότι η τιμή προσαύξησης ταυτότητας είναι 1 και ότι η ταυτότητα συνεχίζεται σε αύξουσα τρόπο. Μπορείτε να αποκτήσετε την τιμή προσαύξησης ταυτότητας, εκτελώντας την ακόλουθη δήλωση σχετικά με τον εκδότη:
    SELECT IDENT_INCR( '<TableName>')
  2. Εκτελέστε την ακόλουθη δήλωση σχετικά με τον εκδότη για να βρείτε την τρέχουσα ταυτότητα τιμή στη στήλη ταυτότητας προβληματικά:
    DBCC CHECKIDENT ('<TableName>')
    Αφού λάβετε το αποτέλεσμα, σημειώστε την τρέχουσα τιμή ταυτότητα τιμή για σύγκριση με τα επόμενα βήματα. Σημειώστε ότι το
    τρέχουσα τιμή της στήλης valye μπορεί να είναι είτε μεγαλύτερη ή μικρότερη από την τρέχουσα ταυτότητα αξία.


    Εάν η τρέχουσα τιμή στήλης τιμή είναι μεγαλύτερη από την τρέχουσα ταυτότητα αξία, την τιμή της στήλης μπορεί να έχουν προήλθε σε άλλες αναπαραγωγές στην τοπολογία και να συγχωνευθεί με επιτυχία με την αναπαραγωγή του publisher. Εάν η τρέχουσα τιμή στήλης τιμή είναι μικρότερη από την τρέχουσα ταυτότητα αξία, οι τιμές ενδέχεται να έχουν εισαχθεί από τον εκδότη σε μια προηγούμενη φάση χρησιμοποιώντας την πρόταση ON IDENTITY_INSERT ΟΡΙΣΤΕΊ πριν από τη ρύθμιση παραμέτρων αναπαραγωγής συγχώνευσης.
  3. Εκτελέστε τις ακόλουθες δηλώσεις σχετικά με τον εκδότη για να προσδιορίσετε τις τρέχουσες περιοχές ταυτότητα της περιοχής ταυτότητα του περιορισμού για προβληματικών πίνακα ελέγχου:
    Use <PublishedDatabaseName>GO
    sp_helpconstraint '<TableName>'
    GO

    Αφού λάβετε το αποτέλεσμα, σημειώστε την τιμή της
    constraint_keys στήλη της καρτέλας όπου η τιμή του
    η στήλη constraint_name είναι "repl_identity_range_GUID". Η τιμή GUID που αντιστοιχεί στην τιμή του
    artid στήλη για το άρθρο στον πίνακα συστήματος sysmergearticles. Για να αποκτήσετε το αναγνωριστικό GUID, εκτελέστε την ακόλουθη δήλωση:
    select artid from sysmergearticles where name = '<TableName>'
    Τον περιορισμό ελέγχου περιοχή ταυτότητας εκτείνεται σε δύο ξεχωριστές περιοχές. Τα δύο σύνολα περιοχές δεν χρειάζεται να είναι συνεχόμενα. Για παράδειγμα, η τιμή της στήλης constraint_keys μπορεί να είναι ως εξής:
    ([ColumnName] > (1001) και [ColumnName] < =(2001)

    Ή [ColumnName] > (9001) και [ColumnName] < =(10001))
    Σημείωση Αυτό το άρθρο χρησιμοποιεί αυτό το παράδειγμα, για να παρουσιάσετε κώδικα με τα υπόλοιπα βήματα.

    Σε αυτό το παράδειγμα, οι περιοχές εκτείνεται σε 1.000 τιμές. 1.000 είναι το προεπιλεγμένο μέγεθος της περιοχής. Ωστόσο, μπορείτε να αλλάξετε το μέγεθος της περιοχής ταυτότητα, χρησιμοποιώντας μία από τις ακόλουθες μεθόδους:
    • Καθορίστε την παράμετρο @pub_identity_range , όταν εκτελείτε τη διαδικασία sp_addmergearticle αποθηκεύονται.
    • Αλλάξετε την ιδιότητα μέγεθος περιοχής συνδρομητής στο άρθρο η
      Στο παράθυρο διαλόγου Ιδιότητες άρθρου .
  4. Εάν αντιμετωπίζετε το ζήτημα που περιγράφεται στην ενότητα "Συμπτώματα", η τρέχουσα τιμή ταυτότητα που σημειώσατε στο βήμα 2 θα πρέπει να είναι μικρότερο από το κάτω όριο της πρώτης περιοχής ταυτότητα του περιορισμού ελέγχου ταυτότητας περιοχής που σημειώσατε στο βήμα 3.

    Εάν η τρέχουσα τιμή ταυτότητα στο βήμα 2 είναι μεγαλύτερο από το άνω όριο της δεύτερης περιοχής ταυτότητα της περιοχής ταυτότητα του περιορισμού ελέγχου, επιλύστε το πρόβλημα, χρησιμοποιώντας τη μέθοδο που προτείνεται στο μήνυμα λάθους. Επομένως, πρέπει να εκτελέσετε τη διαδικασία sp_adjustpublisheridentityrange αποθηκεύονται από τον εκδότη.

    Για περισσότερες πληροφορίες σχετικά με τη sp_adjustpublisheridentityrange αποθηκευμένη διαδικασία, επισκεφθείτε την ακόλουθη τοποθεσία του Microsoft Developer Network (MSDN) στο Web:
  5. Εκτελέστε την ακόλουθη δήλωση για να διαπιστώσετε αν τις γραμμές στις τρέχουσες περιοχές ταυτότητα του περιορισμού ελέγχου ταυτότητας περιοχής:
    SELECT COUNT(*) FROM TableName WHERE ([ColumnName]>(1001) AND [ColumnName]<=(2001) 
    OR [ColumnName]>(9001) AND [ColumnName]<=(10001))

    Σημειώσεις
    • Εάν η εντολή επιστρέφει την τιμή 0, δεν γραμμές είναι την τρέχουσα ταυτότητα περιοχών. Σε αυτήν την περίπτωση, προχωρήστε στο βήμα 6.
    • Εάν η εντολή επιστρέφει μια τιμή που είναι μεγαλύτερη από 0, εκτελέστε την ακόλουθη εντολή για να λάβετε την τιμή μέγιστου ταυτότητα των περιοχών τρέχουσα ταυτότητα:
      SELECT MAX(ColumnName) as MaxValue FROM TableName WHERE ([ColumnName]>(1001) AND [ColumnName]<=(2001) OR 
      [ColumnName]>(9001) AND [ColumnName]<=(10001))

      Σημειώστε την τιμή που επιστρέφεται και, στη συνέχεια, προχωρήστε στο βήμα 7.
  6. Reseed με μη αυτόματο τρόπο την τρέχουσα ταυτότητα για προβληματικά πίνακα για να βρίσκονται μέσα σε μια έγκυρη περιοχή.


    Reseed την τρέχουσα ταυτότητα στην τιμή μικρότερη από την τρέχουσα ταυτότητα περιοχές συν 1. Για παράδειγμα, αν η χαμηλότερη τιμή από την τρέχουσα ταυτότητα περιοχές είναι 1001, η πρώτη δυνατή τιμή στην περιοχή είναι 1002 επειδή το κατώτατο άκρο της περιοχής του περιορισμού ελέγχου ταυτότητας περιοχή χρησιμοποιεί το μεγαλύτερο σύμβολο (>). Για να γίνει αυτό, εκτελέστε την ακόλουθη δήλωση σχετικά με τον εκδότη του και, στη συνέχεια, προχωρήστε στο βήμα 8:
    DBCC CHECKIDENT ('TableName', RESEED, 1002)
  7. Reseed με μη αυτόματο τρόπο την τρέχουσα ταυτότητα για προβληματικά πίνακα για να βρίσκονται μέσα σε μια έγκυρη περιοχή.

    Ας υποθέσουμε ότι η προσαύξηση ταυτότητα είναι 1. Reseed την τρέχουσα ταυτότητα με την τιμή που σημειώσατε στο βήμα 5 και, στη συνέχεια, προσθέστε 1. Για παράδειγμα, εάν η τιμή που σημειώσατε στο βήμα 5 1507, reseed την τρέχουσα ταυτότητα να 1508. Για να γίνει αυτό, εκτελέστε την ακόλουθη δήλωση σχετικά με τον εκδότη:
    DBCC CHECKIDENT ('TableName', RESEED, 1508)
  8. Εκτελέστε μια δοκιμή για να εξακριβώσετε αν μπορούν να εισαχθούν νέες γραμμές στον πίνακα στη βάση δεδομένων του εκδότη χωρίς 548 παρουσιάζεται σφάλμα.
Για περισσότερες πληροφορίες σχετικά με το ποια αρχεία αλλάζουν και για πληροφορίες σχετικά με τις προϋποθέσεις για να εφαρμόσετε το πακέτο αθροιστική ενημερωμένη έκδοση που περιέχει την επείγουσα επιδιόρθωση που περιγράφεται σε αυτό το άρθρο της Γνωσιακής Βάσης της Microsoft, κάντε κλικ στον αριθμό του άρθρου παρακάτω, για να προβάλετε το άρθρο της Γνωσιακής Βάσης της Microsoft:
951217 συγκεντρωτική ενημερωμένη έκδοση πακέτου 8 για SQL Server 2005 Service Pack 2

Αναφορές

Για περισσότερες πληροφορίες σχετικά με τη λίστα εκδόσεις που είναι διαθέσιμες μετά από το SQL Server Service Pack 2, κάντε κλικ στον αριθμό του άρθρου παρακάτω, για να προβάλετε το άρθρο της Γνωσιακής Βάσης της Microsoft:
937137 του SQL Server 2005 δημιουργεί που κυκλοφόρησαν μετά την κυκλοφορία του SQL Server 2005 Service Pack 2
Για περισσότερες πληροφορίες σχετικά με το μοντέλο τμηματικής συντήρησης για τον SQL Server, κάντε κλικ στον αριθμό του άρθρου παρακάτω, για να προβάλετε το άρθρο της Γνωσιακής Βάσης της Microsoft:
935897 μια τμηματική μοντέλο συντήρησης είναι διαθέσιμα από την ομάδα του SQL Server για την παράδοση επείγουσες επιδιορθώσεις για ζητήματα που αναφέρθηκαν
Για περισσότερες πληροφορίες σχετικά με τον τρόπο απόκτησης του SQL Server 2005 Service Pack 2, κάντε κλικ στον αριθμό του άρθρου παρακάτω, για να προβάλετε το άρθρο της Γνωσιακής Βάσης της Microsoft:
913089 Τρόπος λήψης του τελευταίου service pack για τον SQL Server 2005
Για περισσότερες πληροφορίες σχετικά με τις νέες δυνατότητες και τις βελτιώσεις σε SQL Server 2005 Service Pack 2, επισκεφθείτε την ακόλουθη τοποθεσία της Microsoft στο Web:Για περισσότερες πληροφορίες σχετικά με τη διάταξη ονομασίας των ενημερωμένων εκδόσεων του SQL Server, κάντε κλικ στον αριθμό του άρθρου παρακάτω, για να προβάλετε το άρθρο της Γνωσιακής Βάσης της Microsoft:
822499 νέα διάταξη ονομασίας για το λογισμικό Microsoft SQL Server πακέτα ενημερωμένων εκδόσεων
Για περισσότερες πληροφορίες σχετικά με την ορολογία των ενημερώσεων λογισμικού, κάντε κλικ στον αριθμό του άρθρου παρακάτω, για να προβάλετε το άρθρο στη Γνωσιακή Βάση της Microsoft:
824684 περιγραφή της βασικής ορολογίας που χρησιμοποιείται για την περιγραφή ενημερωμένων εκδόσεων λογισμικού της Microsoft
Ιδιότητες

Αναγνωριστικό άρθρου: 953481 - Τελευταία αναθεώρηση: 14 Ιαν 2017 - Αναθεώρηση: 1

Σχόλια