博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【疑难杂症】sqlCacheDependency 不起作用
阅读量:6694 次
发布时间:2019-06-25

本文共 1016 字,大约阅读时间需要 3 分钟。

故障环境

  • Windows 7 Ultimate
  • SQL Server 2008 R2
  • Visual Studio 2010(ASP.NET Development Server)

 

故障现象

  1. 启动 Web 应用程序,第一次打开页面时,通过 SQL Profiler 可以监视到向数据库发出的 SQL 命令。
  2. 第二次打开页面时,通过 SQL Profiler 可以监视到未向数据库发出的 SQL 命令,此时数据从缓存中读出。
  3. 修改数据库对应表中的数据。
  4. 第三次打开页面时,数据仍是第一次打开时的数据,通过 SQL Profiler 可以监视到未向数据库发出的 SQL 命令。

 

原因分析

  1. 已执行 alter database DbName set enable_broker,并且执行 select * from sys.databases 后,看到 is_broker_enabled 值为1。
  2. Web.config 中已存在 <caching><sqlCacheDependency enabled="true"/></caching>。
  3. Global.asax.cs 中已存在 SqlDependency.Start(connectionString); 和 SqlDependency.Stop(connectionString);。
  4. 页面未出现异常,加断点也未见异常,在 Windows 事件日志中大量的重复信息:
    “在目标队列中对消息进行排队时出现异常。错误: 15517,状态: 1。Cannot execute as the database principal because the principal "dbo" does not exist, this type of principal cannot be impersonated, or you do not have permission.”。
  5. 看来问题是出在数据库的“所有者”上,因为数据库是通过备份文件恢复的,而备份文件是从其他电脑上备份出来的。

 

解决方法

  1. 打开 Microsoft SQL Server Management Studio。
  2. 右击数据库节点,选择“属性”。
  3. 选择“文件”页,在所有者中设置正确的账号。

 

参考资源

 

转载于:https://www.cnblogs.com/csharpstyle/articles/2713182.html

你可能感兴趣的文章
smarty获取php中的变量
查看>>
GIL 锁
查看>>
平衡二叉树
查看>>
linux中wget 、apt-get、yum rpm区别
查看>>
关于Hogan的学习笔记
查看>>
android 布局属性详解
查看>>
coredump功能介绍
查看>>
Linux内核学习第五周 系统调用
查看>>
第三天,小作业,表达式,while循环
查看>>
HTML5编写规范
查看>>
restful+springmvc+mybatis+ webservice 分布式架构
查看>>
ios语音识别
查看>>
discuz 门户页模板中的keywords和description不能正常显示
查看>>
sqlserver视图内容语句从系统表中从获取
查看>>
SQL Server 2012附加数据库时,错误提示如下:尝试打开或创建物理时,CREATE FILE 遇到操作系统错误 5(拒绝访问。)...
查看>>
解决报错“超时时间已到。超时时间已到,但是尚未从池中获取连接”的方案...
查看>>
递归系列之一_南诺塔问题
查看>>
PyCharm 2018.3.3激活(亲测有效)
查看>>
Scrapy 爬虫框架入门
查看>>
pl/sql编程(十五)
查看>>