消息详细信息
| 产品名称 | SQL Server |
| 事件编号 | 18752 |
| 事件源 | MSSQLSERVER |
| 组件 | SQL Server 数据库引擎 |
| 符号名称 | |
| 消息正文 | 一次只能有一个日志读取器代理或日志相关过程(sp_repldone、sp_replcmds 和 sp_replshowcmds)连接到某个数据库。 如果执行了一个日志相关过程,那么在启动日志读取器代理或者执行另一个日志相关过程之前,请删除执行第一个过程时所用的连接,或者在该连接上执行 sp_replflush。 |
说明
多个当前连接正在尝试执行以下任一操作:sp_repldone、sp_replcmds或sp_replshowcmds。 存储过程 sp_repldone(Transact-SQL) 和 sp_replcmds(Transact-SQL) 是日志读取器代理用来查找和更新已发布数据库中复制事务的信息的存储过程。 存储过程 sp_replshowcmds(Transact-SQL) 用于排查事务复制的某些类型问题。
在以下情况下引发此错误:
如果已发布数据库的日志读取器代理正在运行,并且第二个日志读取器代理尝试针对同一数据库运行,则会为第二个代理引发错误,并显示在代理历史记录中。
在出现多个代理的情况下,其中一个代理可能是孤立过程的结果。
如果启动已发布数据库的日志读取器代理,并且用户针对同一数据库执行 sp_repldone、 sp_replcmds或 sp_replshowcmds ,则会在执行存储过程的应用程序(如 sqlcmd)中引发错误。
如果已发布的数据库没有运行日志读取器代理,并且用户执行 sp_repldone、 sp_replcmds或 sp_replshowcmds ,然后不关闭执行该过程的连接,则日志读取器代理尝试连接到数据库时将引发此错误。
用户操作
以下步骤可帮助你排查该问题。 如果任何步骤允许日志读取器代理启动而不出错,则无需完成剩余的步骤。
检查日志读取器代理的历史记录,了解可能导致此错误的任何其他错误。 有关在复制监视器中查看代理状态和错误详细信息的信息,请参阅 使用复制监视器查看信息和执行任务。
检查 sp_who(Transact-SQL) 的输出,以找到连接到已发布数据库的特定进程标识号(SPID)。 关闭可能已运行 sp_repldone、 sp_replcmds或 sp_replshowcmds的任何连接。
重启日志读取器代理。 有关详细信息,请参阅启动和停止复制代理 (SQL Server Management Studio).
在分发服务器上重启 SQL Server 代理服务(使其脱机或联机)。 如果计划作业可能已从任何其他 SQL Server 实例执行 sp_repldone、 sp_replcmds或 sp_replshowcmds ,请重新启动这些实例的 SQL Server 代理。 有关详细信息,请参阅 “启动”、“停止”或“暂停 SQL Server 代理服务”。
在发布服务器上对发布数据库执行 sp_replflush(Transact-SQL), 然后重启日志读取器代理。
如果错误仍然存在,请增大代理的日志记录并为日志指定输出文件。 根据错误的上下文,这可以提供导致错误的步骤和/或其他错误消息。