Simptomi
Pieņemsim, ka jums ir Microsoft SQL Server 2008 R2, SQL Server 2012 vai SQL Server 2014 transakciju replicēšanas vide. Vidē ir vairāki SQL Server izplatīšanas piemēri. Šādā gadījumā var rasties piekļuves pārkāpums, un SQL Server Replication sadalījuma aģents avarē. Turklāt tiek ģenerēts mini izmetes fails.
Risinājums
Pēc tam, kad būsit lietojis labojumfailu, aģents tiek beidzēts vienmērīgi, nevis avarē kopā ar izmetes failu. Jūs varat pievienot papildu darbu adresātu aģenta darbā, lai automātiski restartētu aģentu, kad aģents ir apturējis un ir ieplānots restartēšanas statuss. Papildinformāciju par to, kā pievienot papildu darbu adresātu aģenta darbā, skatiet sadaļā Papildinformācija. Šī problēma pirmo reizi tika izlabota tālāk sniegtajā SQL Server kumulatīvajā atjauninājumā.
Kumulatīvais atjauninājums 1 SQL Server 2014 /en-us/help/2931693
Kumulatīvais atjauninājums 9 SQL Server 2012 SP1 /en-us/help/2931078
Kumulatīvais atjauninājums 11 SQL Server 2012 /en-us/help/2908007
Kumulatīvais atjauninājums 9 SQL Server 2008 R2 SP2 /en-us/help/2887606
Katrā jaunajā kumulatīvajā SQL Server atjauninājumā ir iekļauti visi labojumfaili un visi drošības labojumi, kas bija iekļauti iepriekšējā kumulatīvajā atjauninājumā. Skatiet jaunākos kumulatīvos atjauninājumus SQL Server:
Labojumfailu atjaunināšanas pakotne SQL Server 2008 R2 1. servisa pakotneiŠīs problēmas labojums pirmo reizi tika izlaists SQL Server 2008 R2 1. servisa pakotnes labojumfaila atjauninājuma pakotnē.
Statusa
Microsoft ir apstiprinājusi, ka šī problēma pastāv Microsoft produktos, kas ir norādīti sadaļā "attiecas uz".
Papildinformācija
Pēc tam, kad būsit pievienojis labojumfailu, pievienojiet tālāk norādīto skriptu adresātu aģenta darba veikšanai: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