Příznaky
Předpokládejme, že máte prostředí transakční replikace Microsoft SQL serveru 2008 R2, SQL serveru 2012 nebo SQL Server 2014. V prostředí je víc instancí systému SQL Server. V této situaci může dojít k porušení přístupu a Agentu distribuce replikace serveru SQL Server dojde k chybě. Navíc je vygenerován zkrácený soubor se stavem paměti.
Řešení
Po použití této opravy hotfix bude agent bez problémů, který bude spolu se souborem s výpisem stavu paměti, bezchybně ukončen. Můžete přidat krok další práce v úloze agenta distribuce, abyste agenta automaticky restartovali, když se agent zastavil a má stav "plánováno restartování". Další informace o tom, jak přidat další krok práce v úloze agenta distribuce, najdete v části Další informace. Tento problém byl poprvé opraven následující kumulativní aktualizací SQL serveru.
Kumulativní aktualizace 1 pro SQL Server 2014 /en-us/help/2931693
Kumulativní aktualizace 9 pro SQL Server 2012 SP1 /en-us/help/2931078
Kumulativní aktualizace 11 pro SQL Server 2012 /en-us/help/2908007
Kumulativní aktualizace 9 pro SQL Server 2008 R2 SP2 /en-us/help/2887606
Každá nová kumulativní aktualizace pro SQL Server obsahuje všechny opravy hotfix a všechny opravy zabezpečení, které byly součástí předchozí kumulativní aktualizace. Podívejte se na nejnovější kumulativní aktualizace SQL serveru:
Balíček aktualizace opravy hotfix pro SQL Server 2008 R2 Service Pack 1Oprava pro tento problém byla poprvé vydána v balíčku aktualizace oprav hotfix pro SQL Server 2008 R2 Service Pack 1.
Stav
Společnost Microsoft potvrzuje, že se jedná o problém v produktech této společnosti, které jsou uvedeny v části Informace v tomto článku jsou určeny pro produkt.
Další informace
Po použití opravy hotfix přidejte do úlohy agenta distribuce následující skript: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