Sql Server 2005/2008 SqlCacheDependency查询通知的使用总结

Sql Server 2005/2008 SqlCacheDependency查询通知的使用总结

Sql server 7.0/2000下 SqlCacheDependency使用轮询的方式进行缓存失效检查, 虽然ms说对服务器压力不大, 但还是有一些的, 而且对于不常改动的混存内容无休止的轮询感觉有点浪费, 不很经济.

 

Sql server 2005/2008下增加使用查询通知方式进行缓存失效检查, 它通过Sql Server内部的消息队列进行异步通知, 这样就大大减轻了服务器的压力, 实现的很经济, 下面就是具体的步骤:

 

1.检测是否已经启用Service Broker

  Select DATABASEpRoPERTYEX('数据库名称','IsBrokerEnabled')  -- 1 表示已经启用 0 表示没有启用

 

2.启用Service Broker                   

  ALTER DATABASE 数据库名称 SET ENABLE_BROKER;                 

  注意:如果执行此语句处于假死状态,请重启(restart)数据库,然后什么都别做, 先执行上面启用Service Broker这个语句就行了!

 

3.给您的数据库访问帐号授予权限

  GRANT SUBSCRIBE QUERY NOTIFICATIONS TO test

  注意:这一步非常重要, 如果没有权限, 数据库改变的通知将无法接收, cache永远都不会被刷新,我开始是用的sa帐号,死活都不刷新,花了我两天时间调试这个问题, 还是无法给sa授此权限(ms禁止), 所以,换个数据库访问帐号即可.

 

4.检查是否有以前的缓存错误

 

隐藏行号 复制代码 这是一段程序代码。
  1. USE [master]
        
  2. GO
        
  3. ALTER DATABASE Northwind SET  SINGLE_USER WITH ROLLBACK IMMEDIATE
        
  4. GO
        
  5. ALTER DATABASE Northwind SET  SINGLE_USER 
        
  6. GO
        
  7. ALTER DATABASE Northwind SET ENABLE_BROKER 
        
  8. GO
        
  9. ALTER DATABASE Northwind SET  MULTI_USER 
        
  10. GO 
        

 

 

6、主体程序

 

webfrom1: 单表缓存

webfrom2: LINQ TO SQL 缓存

webfrom3: LINQ TO SQL 多表缓存

 

无法启用数据库中的 Service Broker,因为已存在启用的具有相同 ID 的 Service Broker。


Admin
2010年6月19日名人名言:就是好思想,如果不去实行,就和好梦一样。——爱默生



无法启用数据库中的 Service Broker,因为已存在启用的具有相同 ID 的 Service Broker。





场景:


sql2005数据库,假如名为db1,启用了Service Broker,把db1备份,然后再恢复成db2(即相当于db2就是db1的一次完整镜像备份),然后用


use master
ALTER DATABASE db2 set ENABLE_BROKER


想启用Broker时,出现以下错误:


无法启用数据库 "db2" 中的 Service Broker,因为已存在启用的具有相同 ID 的 Service Broker。



解决办法:


use master
alter database db2 set NEW_BROKER


然后再运行


use master
ALTER DATABASE db2 set ENABLE_BROKER


--验证是否能启用
go
 Select DATABASEpRoPERTYEX('数据库名称','IsBrokerEnabled')  -- 1 表示已经启用 0 表示没有启用

发布了162 篇原创文章 · 获赞 44 · 访问量 64万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览