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

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

一台服务器重装系统后,用附加表再配置同步复制的时候出错:

sql server 无法创建发布 找不到存储过程 错误 2812

在SQL SERVER 2005中,有数据库DB1,在A服务器上。由于要更换服务器,要把数据库DB1迁移到B服务器上。而DB1是用于同步复制的。粗心的你没有把同步复制(发布和订阅)删掉,就直接把DB1.mdf和DB1_log.ldf两个文件到B服务器上附加。附加成功了,原来的程序都能连接上,你以为大功告成。但是,几天过后,当你想把服务器重新同步复制,以作实时备份时,你发现自己的倒霉时刻到了。SQL SERVER 2005 像病了一样,只提示:“找不到存储过程’’…错误:2812”。

如果你的经历与以下的不完全一致,那么这篇文章可能也值得你参考。

但如果你的经历恰好一样,而且你在Google或Baidu上苦寻答案而不觅,那么,这篇文章或者能帮你一把。

如果数据库迁移后,数据并没有更新过。那么你的想法是把这个该死的数据库分离,然后再重新把去掉同步复制的干净的数据库迁移过来。但是,如果你的新数据库已经投入生产,那么,请参考我的方法:

打开B服务器上的DB1数据库的系统表,你会发现有12个表在里面。这12个表就是因同步复制而产生的,包括:

表/视图

有记录

复制必需

Mspeer_lsns

Mspeer_request

Mspeer_response

Mspub_identity_range

Sysarticlecolumns

Sysarticles

Sysarticlesupdates

syspublications

Sysreplservers

Sysschemaarticles

Syssubscriptions

systranschemas

sysextendedarticlesview

问题就出现在这里了。这12 个系统表和1个视图是因同步复制而生的,如果没有发生同步复制,他们是不会出现的。我们把mdf和ldf文件直接迁移过来,数据库里面的这些系统表和视图也随之而来了。

不能简单的把这12个系统表和1个视图删掉,这样同样不行。在经过了长时间的摸索后,我发现了问题的真正所在。

我们看一下系统表 sysreplservers的内容,有两列:

Srvname

Srvid

旧服务器名称

0

终于找到了问题所在了。我们把该表的记录删除。

然后随便发布一次。

再把该发布删除。

至此,该数据库中的陈旧同步复制信息已经去除,数据库重新变得洁净可爱

中病毒sa密码被篡改然后删除修改密码的存储过程,你查询下sp_password是不是不存在了,你可以先备份数据库(为了避免数据丢失),然后新建改存储过程(见下面代码)。修改为SA密码后,查杀下病毒,实在不行重装系统,重新附加数据库或者用备份还原

-- SQL代码开始 

sp_configure 'allow updates', 1

RECONFIGURE WITH OVERRIDE

go

use master

go

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sp_password]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)

drop procedure [dbo].[sp_password]

go

create procedure sp_password

    @old sysname = NULL,        -- the old (current) password

    @new sysname,               -- the new password

    @loginame sysname = NULL    -- user to change password on

as

    -- SETUP RUNTIME OPTIONS / DECLARE VARIABLES --

 set nocount on

    declare @self int

    select @self = CASE WHEN @loginame is null THEN 1 ELSE 2 END

    -- RESOLVE LOGIN NAME

    if @loginame is null

        select @loginame = suser_sname()

    -- CHECK PERMISSIONS (SecurityAdmin per Richard Waymire) --

 IF (not is_srvrolemember('securityadmin') = 1)

        AND not @self = 1

 begin

    dbcc auditevent (107, @self, 0, @loginame, NULL, NULL, NULL)

    raiserror(15210,-1,-1)

    return (1)

 end

 ELSE

 begin

    dbcc auditevent (107, @self, 1, @loginame, NULL, NULL, NULL)

 end

    -- DISALLOW USER TRANSACTION --

 set implicit_transactions off

 IF (@@trancount > 0)

 begin

  raiserror(15002,-1,-1,'sp_password')

  return (1)

 end

    -- RESOLVE LOGIN NAME (disallows nt names)

    if not exists (select * from master.dbo.syslogins where

                    loginname = @loginame and isntname = 0)

 begin

  raiserror(15007,-1,-1,@loginame)

  return (1)

 end

 -- IF non-SYSADMIN ATTEMPTING CHANGE TO SYSADMIN, REQUIRE PASSWORD (218078) --

 if (@self <> 1 AND is_srvrolemember('sysadmin') = 0 AND exists

   (SELECT * FROM master.dbo.syslogins WHERE loginname = @loginame and isntname = 0

    AND sysadmin = 1) )

  SELECT @self = 1

    -- CHECK OLD PASSWORD IF NEEDED --

    if (@self = 1 or @old is not null)

        if not exists (select * from master.dbo.sysxlogins

                        where srvid IS NULL and

            name = @loginame and

                     ( (@old is null and password is null) or

                              (pwdcompare(@old, password, (CASE WHEN xstatus&2048 = 2048 THEN 1 ELSE 0 END)) = 1) )   )

        begin

      raiserror(15211,-1,-1)

      return (1)

     end

    -- CHANGE THE PASSWORD --

    update master.dbo.sysxlogins

 set password = convert(varbinary(256), pwdencrypt(@new)), xdate2 = getdate(), xstatus = xstatus & (~2048)

 where name = @loginame and srvid IS NULL

 -- UPDATE PROTECTION TIMESTAMP FOR MASTER DB, TO INDICATE SYSLOGINS CHANGE --

 exec('use master grant all to null')

    -- FINALIZATION: RETURN SUCCESS/FAILURE --

 if @@error <> 0

        return (1)

    raiserror(15478,-1,-1)

 return  (0) -- sp_password

GO

sp_configure 'allow updates', 0

RECONFIGURE WITH OVERRIDE

-- SQL代码结束

第一步:

正确安装CCS和F2812的烧写插件。

第二步:

运行CCS,则进入CCS 开发环境。

第三步:

将GPIO目录COPY到CCS开发环境中的myproject 目录下;

在CCS中用projectOpen命令,加载SPI 目录下的GPIO.pjt编译,生成.out 文件。

第四步:

点击CCS 中的Tools —>F28XX On-Chip Flash Programer。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12020214.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存