zoukankan      html  css  js  c++  java
  • sql server订阅发布-无发找到存储过程-日志无法收缩

    第一.出错问题:无法执行sp_cmdshell存储过程

        先修改外围配置,让其允许执行。ok,设置完毕。

        问题是, 无权限,那么sql所用的用户是那个?本地系统,ok,那就是sysltem这个用户了,看看cmd的权限,还真是,全部拒绝,设定全部可以,ok,这一步完成。成功。

    第二.出错问题,无发找到存储过程,因为这个发布数据库是从另外的数据库迁移过来的,迁移前也进行了复制,

    此文章主要向大家讲述的是SQL Server 2005数据库“找不到存储过程’ … 错误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

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

    然后随便发布一次。

    再把该发布删除。

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

    以上的相关内容就是对SQL Server 2005数据库“找不到存储过程’’ … 错误:2812”的解决方法的介绍,望你能有所收获。
    ————————————————
    版权声明:本文为CSDN博主「阿拉盗」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/ck0074451665/article/details/5966620

    第三.数据库日志无法收缩

    遇到日志文件无法收缩的问题,第一步肯定是先运行下面的命令:

    SELECT name,log_reuse_wait_desc FROM sys.databases where name='dbname'

    对应的log_reuse_wait_desc 说明如下图:

    图中标红的几个是最常见的几种类型

    对应LOG_BACKUP    ,先对数据库做个日志备份,或者 把数据库变成简单模式。然后再试着压缩数据库。

    1.备份事务日志  

    对ACTIVE_TRANSACTION,使用 DBCC OPENTRAN (dbname) 检查数据库中是不是有开启未提交的事务,如果有就kill掉

    对应REPLICATION ,很可能是因为数据库搭建了复制或者是曾经搭建了复制,没有清除干净。

    ---https://msdn.microsoft.com/zh-cn/library/ms173775.aspx

    当 xactid 为 null 时, xact_seqno 为 null,而 reset 为 1,则日志中的所有复制的事务都被标记为已分发。 当事务日志中存在不再有效的复制事务并且想截断该日志时,此过程很有用,例如:

    SQL
    EXEC sp_repldone @xactid = NULL, @xact_seqno = NULL, @numtrans = 0, @time = 0, @reset = 1

    另外,补充下,显示REPLICATION还有一种隐藏的原因,可能的因为数据库开启了CDC。因为他们都是使用的LOG READER。

  • 相关阅读:
    为没有源码的DLL文件添加强名称
    部署.Net Core APi+Vue 到 linux centos 服务器(一)
    安装nginx
    Linux常用命令大全
    Linq 根据list属性去重复
    jQuery Validate验证框架详解
    mysql+C#
    微信支付配置参数
    自定义截取数,截取字符串,返回字符串数组。
    Git GUI基本操作
  • 原文地址:https://www.cnblogs.com/wangwenlong8/p/13021820.html
Copyright © 2011-2022 走看看