为什么SQL2005在新建复制找不到存储过程提示错误:2812 的解决方法

为什么SQL2005在新建复制找不到存储过程提示错误:2812 的解决方法

当在SQL Server 2005中新建复制时,会使用储存过程,但有时会发生找不到存储过程并提示 2812 错误的情况。这可能是因为在复制的发布服务器和订阅服务器之间出现了问题。

如何解决问题:

  1. 检查数据库引擎服务的运行状态

在SQL Server管理工具中检查数据库引擎服务的运行状态。如果服务没有运行,可以右键服务,选择“启动”来启动服务。

  1. 检查发布服务器和订阅服务器的连接

确保发布服务器和订阅服务器之间存在网络连接,并且可以进行互相访问。在这种情况下,可能需要修改服务器之间的防火墙规则。

  1. 重新创建储存过程

如果以上两个步骤都没有解决问题,可以尝试重新创建储存过程。

下面是两个示例:

第一个示例

假设您在Master数据库中新建了复制,但在NewDB数据库中找不到储存过程。您可以按照下列步骤操作:

USE [master]
GO
EXEC dbo.sp_addpublication 
    @publication = N'PublicationName', 
    @description = N'', 
    @sync_method = N'native', 
    @retention = 0, 
    @allow_push = N'true', 
    @allow_pull = N'true', 
    @allow_anonymous = N'false', 
    @enabled_for_internet = N'false', 
    @snapshot_in_defaultfolder = N'true', 
    @compress_snapshot = N'false', 
    @ftp_port = 21, 
    @ftp_login = N'anonymous', 
    @allow_subscription_copy = N'false', 
    @add_to_active_directory = N'false', 
    @repl_freq = N'continuous', 
    @status = N'active', 
    @independent_agent = N'true', 
    @immediate_sync = N'true', 
    @allow_sync_tran = N'false', 
    @autogen_sync_procs = N'false', 
    @validate = N'false', 
    @allow_queued_tran = N'false', 
    @allow_dts = N'false', 
    @replicate_ddl = 1, 
    @allow_initialize_from_backup = N'false', 
    @enabled_for_p2p = N'false', 
    @enabled_for_het_sub = N'false'
GO

在这个例子中,我们使用“dbo.sp_addpublication”储存过程创建了一个发布。我们可以用类似的方法重新创建其他可能出现问题的储存过程。

第二个示例

看下面的语句:

exec master.sys.sp_MSacquirePublisherLocalForSub

可以使用以下语句重新创建此储存过程:

USE [master]
GO
IF EXISTS ( SELECT  * FROM    sys.objects
            WHERE   [object_id] = OBJECT_ID(N'[sys].[sp_MSacquirePublisherLocalForSub]')
                    AND [type] IN (N'P', N'PC') ) 
    DROP PROCEDURE [sys].[sp_MSacquirePublisherLocalForSub]
GO
USE [distribution]
GO
IF EXISTS ( SELECT  * FROM    sys.objects
            WHERE   [object_id] = OBJECT_ID(N'[dbo].[MSacquirePublisherLocalForSub]')
                    AND [type] IN (N'P', N'PC') ) 
            DROP PROCEDURE [dbo].[MSacquirePublisherLocalForSub]
GO
USE [master]
GO

CREATE PROCEDURE [sys].[sp_MSacquirePublisherLocalForSub](@publisher
sysname, @publisher_db sysname, @publication sysname)

AS

SET NOCOUNT ON

DECLARE @retcode INT
DECLARE @distproc sysname

-- parameter check
IF (@publisher IS NULL) OR (@publisher_db IS NULL)
     OR (@publication IS NULL)
BEGIN
    RAISERROR (20054, 16, -1)
    RETURN (1)
END

-- Make sure there is no overlap between the publication database and the
-- distribution database
IF UPPER(@publisher_db) = UPPER(DB_NAME())
BEGIN
    RAISERROR (21262, 16, -1, '@publisher_db')
    RETURN (1)
END
IF UPPER(@publisher_db) = UPPER(masteR.sys.sp_get_qdistrib_info())
BEGIN
    RAISERROR (21262, 16, -1, '@publisher_db')
    RETURN (1)
END

-- EXEC @retcode = sp_get_mysubscription @publisher, @publisher_db, @publication
-- IF (@@error != 0) OR (@retcode != 0)
--     RETURN (@retcode)

EXEC @retcode = master..sp_MSget_version @@servername, @distproc OUT, 1
IF @@error != 0
    RETURN (1)

在这个示例中,我们使用相同的名称和相似的语法重新创建“sys.sp_MSacquirePublisherLocalForSub”储存过程。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:为什么SQL2005在新建复制找不到存储过程提示错误:2812 的解决方法 - Python技术站

(0)
上一篇 2023年5月21日
下一篇 2023年5月21日

相关文章

  • 如何保证缓存(redis)与数据库(MySQL)的一致性

    Redis是什么 首先要明白redis是一个数据库,redis是一个内存数据库(后端调用的,缓解sql数据库压力的,像双十一直接大量查询进入数据库,数据库会直接崩溃,所以在数据库前面先拦一下,先在缓存里查询,缓解压力), 所有数据基本上都存在于内存当中, 会定时以追加或者快照的方式刷新到硬盘中. 由于redis是一个内存数据库, 所以读取写入的速度是非常快的…

    Redis 2023年4月12日
    00
  • Oracle数据库TNS常见错误的解决方法汇总

    Oracle数据库TNS常见错误的解决方法汇总 简介 Oracle是一种非常流行的关系型数据库管理系统。在使用Oracle进行开发和维护的过程中,用户经常会遇到TNS(Transparent Network Substrate)的常见错误。这些错误可能会导致用户无法连接Oracle数据库或执行SQL语句。 本文将详细介绍TNS常见错误的解决方法,帮助用户更好…

    database 2023年5月21日
    00
  • 详解MySQL WHERE:条件查询数据

    MySQL WHERE模块用来筛选满足特定条件的数据。该模块常用于查询数据表中的数据,其中条件是用来限制要返回的数据的范围。 语法: SELECT column_name(s) FROM table_name WHERE condition; 其中,column_name(s) 是要查询的列名,可以使用 * 代替。table_name 是要查询的数据表名。c…

    MySQL 2023年3月10日
    00
  • MySql删除和更新操作对性能有影响吗

    当进行删除和更新操作时,MySQL会涉及到数据的物理删除和更新,这可能会对性能产生一定的影响。下面我将详细讲解MySQL的删除和更新操作对性能的影响以及如何优化。 MySQL删除操作对性能的影响 MySQL的删除操作会先查询要删除的数据,然后再将其从磁盘上删除。如果该表上有索引,则删除操作可能会导致索引的重建,进一步降低性能。此外,删除操作还会影响表的统计信…

    database 2023年5月19日
    00
  • MySQL创建唯一索引时报错Duplicate entry * for key问题

    MySQL创建唯一索引时报错”Duplicate entry *** for key”问题通常是因为在唯一索引列中存在同名的两条记录,导致插入数据时出现了重复键值。有以下几种方法可以解决此问题: 方法一:删除重复数据 第一步:找出重复数据 可以通过以下语句找出重复数据: SELECT col1,col2,COUNT(*) FROM table_name GR…

    database 2023年5月22日
    00
  • redis的分布式锁工具LockUtil

    /** * 基于redis的分布式锁工具 * * @author yuyufeng * */ public class LockUtil { // 获取redis static JedisPool jedisPool; static { JedisPoolConfig config = new JedisPoolConfig(); config.setMax…

    Redis 2023年4月16日
    00
  • python监控linux内存并写入mongodb(推荐)

    下面是 Python 监控 Linux 内存并写入 MongoDB 的完整攻略: 步骤一:安装 pymongo pymongo 是 Python 与 MongoDB 交互的一个库,安装方式如下: pip install pymongo 步骤二:获取系统内存信息 在 Python 中获取系统内存信息需要使用 psutil 这个库,以获取总内存和空闲内存为例,代…

    database 2023年5月22日
    00
  • MySQL 的CASE WHEN 语句使用说明

    在这里我将详细讲解“MySQL的CASE WHEN语句使用说明”: CASE WHEN语句概述 CASE WHEN语句是用来进行条件判断的函数,在MySQL中被广泛应用,在需要对查询结果进行处理或者对查询条件进行复杂的定制时,尤其使用频繁。 CASE WHEN语句格式 CASE WHEN语句格式如下: CASE expression WHEN conditi…

    database 2023年5月21日
    00
合作推广
合作推广
分享本页
返回顶部