Συμπτώματα
Ας υποθέσουμε ότι έχετε ένα περιβάλλον αναπαραγωγής συναλλαγών Microsoft SQL Server 2008 R2, SQL Server 2012 ή SQL Server 2014. Υπάρχουν πολλές παρουσίες διανομής του SQL Server στο περιβάλλον. Σε αυτήν την περίπτωση, ενδέχεται να παρουσιαστεί παραβίαση πρόσβασης και να διακοπεί η λειτουργία του παράγοντα διανομής αναπαραγωγής του SQL Server. Επιπλέον, δημιουργείται ένα μικρό αρχείο ένδειξης σφαλμάτων.
Επίλυση
Μετά την εφαρμογή της επείγουσας επιδιόρθωσης, ο παράγοντας θα τερματίζεται ομαλά αντί να συντρίβεται με ένα αρχείο ένδειξης σφαλμάτων. Μπορείτε να προσθέσετε ένα πρόσθετο βήμα εργασίας στην εργασία του παράγοντα διανομής για να επανεκκινήσετε τον παράγοντα αυτόματα όταν ο παράγοντας έχει διακοπεί και έχει την κατάσταση "προγραμματισμένη για επανεκκίνηση". Για περισσότερες πληροφορίες σχετικά με τον τρόπο με τον οποίο μπορείτε να προσθέσετε ένα επιπλέον βήμα εργασίας στην εργασία του παράγοντα διανομής, ανατρέξτε στην ενότητα περισσότερες πληροφορίες. Το πρόβλημα διορθώθηκε για πρώτη φορά με την ακόλουθη αθροιστική ενημέρωση του SQL Server.
Αθροιστική ενημερωμένη έκδοση 1 για τον SQL Server 2014 /en-us/help/2931693
Αθροιστική ενημερωμένη έκδοση 9 για SQL Server 2012 SP1 /en-us/help/2931078
Αθροιστική ενημερωμένη έκδοση 11 για τον SQL Server 2012 /en-us/help/2908007
Αθροιστική ενημερωμένη έκδοση 9 για SQL Server 2008 R2 SP2 /en-us/help/2887606
Κάθε νέα αθροιστική ενημέρωση για τον SQL Server περιέχει όλες τις επείγουσες επιδιορθώσεις και όλες τις επιδιορθώσεις ασφαλείας που συμπεριλήφθηκαν στην προηγούμενη αθροιστική ενημέρωση. Ανάληψη ελέγχου των πιο πρόσφατων αθροιστικών ενημερώσεων για τον SQL Server:
Πακέτο ενημερωμένης έκδοσης επειγουσών επιδιορθώσεων για τον SQL Server 2008 R2 Service Pack 1Η επιδιόρθωση για αυτό το πρόβλημα κυκλοφόρησε για πρώτη φορά στο πακέτο ενημέρωσης επειγουσών επιδιορθώσεων για τον SQL Server 2008 R2 Service Pack 1.
Κατάσταση
Η Microsoft έχει επιβεβαιώσει ότι πρόκειται για ένα πρόβλημα στα προϊόντα της Microsoft που παρατίθενται στην ενότητα "ισχύει για".
Περισσότερες πληροφορίες
Μετά την εφαρμογή της επείγουσας επιδιόρθωσης, προσθέστε την ακόλουθη δέσμη ενεργειών στην εργασία του παράγοντα διανομής:DECLARE @JobID BINARY(16)DECLARE @AgentID intDECLARE @command varchar(max)DECLARE JobCur CURSOR FOR SELECT Job.job_id, Agent.id FROM msdb.dbo.sysjobs AS Job INNER JOIN msdb.dbo.syscategories AS Cat ON Job.category_id = Cat.category_id INNER JOIN msdb.dbo.sysjobsteps AS Steps ON Job.job_id = Steps.job_id INNER JOIN distribution.dbo.MSdistribution_agents AS Agent ON Job.job_id = Agent.job_id WHERE Job.name like '%Put Text Mask To Identify Your Publisher DB Jobs Here%' AND Cat.name = 'REPL-Distribution' GROUP BY Job.job_id, Agent.id HAVING COUNT(step_id) = 3OPEN JobCurFETCH NEXT FROM JobCur INTO @JobID, @AgentIDWHILE @@FETCH_STATUS = 0 BEGIN IF (@JobID is not NULL) BEGIN set @command = N'if (select top 1 runstatus from MSdistribution_history where agent_id = ' + convert(varchar, @AgentID)+ N' order by timestamp desc) = 5 raiserror(''Agent was scheduled for retry. Performing restart now'',16,1)' EXEC msdb.dbo.sp_add_jobstep @job_id=@JobID, @database_name=N'distribution', @step_name=N'Check for retry', @step_id=4, @on_fail_action=4, @on_fail_step_id=1, @command=@command EXEC msdb.dbo.sp_update_jobstep @job_id=@JobID, @step_id=2, @on_success_action=4, @on_success_step_id=4 END FETCH NEXT FROM JobCur INTO @JobID, @AgentID;ENDCLOSE JobCur;DEALLOCATE JobCur;GO