Simptomi
Pretpostavimo da imate Microsoft SQL Server 2008 R2, SQL Server 2012 ili SQL Server 2014 Transactional Replication okruženje. U okruženju postoji više instanci distribucije sistema SQL Server. U ovoj situaciji može doći do narušavanja pristupa i pad agenta za distribuciju replikacije sql servera. Pored toga, generiše se datoteka mini slike stanja memorije.
Rešenje
Nakon što primenite hitnu ispravku, agent će se graciozno isključiti umesto da se sruši zajedno sa datotekom slike stanja memorije. Možete dodati dodatni korak posla u poslu agenta za distribuciju da biste automatski ponovo pokrenuli agenta kada agent prestane i ima status "zakazano za ponovno pokretanje". Za više informacija o dodavanju dodatnog koraka posla u poslu agenta za distribuciju pogledajte odeljak Više informacija. Problem je prvi put otklonjen u sledećoj kumulativnoj ispravki sistema SQL Server.
Kumulativna ispravka 1 za SQL Server 2014 /en-us/help/2931693
Kumulativna ispravka 9 za SQL Server 2012 SP1 /en-us/help/2931078
Kumulativna ispravka 11 za SQL Server 2012 /en-us/help/2908007
Kumulativna ispravka 9 za SQL Server 2008 R2 SP2 /en-us/help/2887606
Svaka nova kumulativna ispravka za SQL Server sadrži sve hitne ispravke i sve bezbednosne ispravke koje su bile uključene u prethodnu kumulativnu ispravku. Pogledajte najnovije kumulativne ispravke za SQL Server:
Paket ispravki hitnih ispravki za SQL Server 2008 R2 servisni paket 1Ispravka za ovaj problem je prvi put objavljena u paketu ispravki za hitne ispravke za SQL Server 2008 R2 servisni paket 1.
Status
Microsoft je potvrdio da je ovo problem u Microsoft proizvodima koji su navedeni u odeljku "Odnosi se na".
Više informacija
Kada primenite hitnu ispravku, dodajte sledeću skriptu poslu agenta za distribuciju: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