KB2861456 - תיקון: הפרת גישה בשכפול סוכן הפצה בשכפול SQL Server שכפול טרנזקציות

חל על
SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Standard SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use)

סימפטומים

נניח שיש לך סביבת שכפול טרנזקציות של Microsoft SQL Server 2008 R2, SQL Server 2012 או SQL Server 2014. קיימים מופעי הפצה מרובים של SQL Server בסביבה. במצב זה, עלולה להתרחש הפרת גישה וסוכן ההפצה של שכפול SQL Server קורס. בנוסף, נוצר קובץ dump מצומצם.

פתרון

לאחר החלת התיקון החם, הסוכן יכבה בצורה חלקה במקום לקרוס יחד עם קובץ Dump. באפשרותך להוסיף שלב משימה נוסף במשימת סוכן ההפצה כדי להפעיל מחדש את הסוכן באופן אוטומטי כאשר הסוכן הפסיק ויש לו מצב "מתוזמן להפעלה מחדש".

לקבלת מידע נוסף על אופן הוספת שלב משימה נוסף במשימה 'סוכן הפצה', עיין בסעיף מידע נוסף.

הבעיה תוקנה לראשונה בעדכון המצטבר הבא של SQL Server.

עדכון מצטבר 1 עבור SQL Server 2014 /en-us/help/2931693

עדכון מצטבר 9 עבור SQL Server 2012 SP1 /en-us/help/2931078

עדכון מצטבר 11 עבור SQL Server 2012 /he-il/help/2908007

עדכון מצטבר 9 עבור SQL Server 2008 R2 SP2 /en-us/help/2887606

אודות עדכונים מצטברים עבור SQL Server

כל עדכון מצטבר חדש עבור SQL SQL Server מכיל את כל התיקונים החמים ואת כל תיקוני האבטחה שנכללו בעדכון המצטבר הקודם. עיין בעדכונים המצטברים האחרונים עבור SQL Server:

      

חבילת עדכון תיקון חם עבור SQL Server 2008 R2 Service Pack 1התיקון לבעיה זו הופץ לראשונה בחבילת העדכון של התיקון החם עבור SQL Server 2008 R2 Service Pack 1 .

מצב

Microsoft אישרה שזוהי בעיה במוצרי Microsoft המפורטים בסעיף "חל על".

מידע נוסף

לאחר החלת התיקון החם, הוסף את קובץ ה- Script הבא למשימה של סוכן ההפצה:DECLARE @JobID BINARY(16)
DECLARE @AgentID int
DECLARE @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 כסוכן ב- Job.job_id = Agent.job_id
        WHERE Job.name כמו '%Put text mask to identify your publisher DB jobs here%' ו- Cat.name = 'REPL-Distribution'
        קיבוץ לפי Job.job_id, Agent.id
        HAVING COUNT(step_id) = 3
פתח את JobCur
הבא הבא מ- JobCur לתוך @JobID, @AgentID
כאשר @@FETCH_STATUS = 0 BEGIN
        IF (@JobID אינו NULL) BEGIN
                set @command = N'if (בחר את top 1 runstatus מתוך MSdistribution_history שבו agent_id = ' + convert(varchar, @AgentID)+ N' order by timestamp desc) = 5
        raiserror(''Agent was scheduled for retry. מבצע הפעלה מחדש כעת',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
        הבא הבא מ- JobCur INTO @JobID, @AgentID;
END
סגור את JobCur;
DEALLOCATE JobCur;
GO