• SQL Server缓存依赖设置


    1.为数据库VIAOSDB 启用缓存依赖,自动生成以下数据表和存储过程
    --表
    AspNet_SqlCacheTablesForChangeNotification

     

    --存储过程
    AspNet_SqlCachePollingStoredProcedure
    AspNet_SqlCacheQueryRegisteredTablesStoredProcedure
    AspNet_SqlCacheRegisterTableStoredProcedure
    AspNet_SqlCacheUnRegisterTableStoredProcedure
    AspNet_SqlCacheUpdateChangeIdStoredProcedure

    以下为启用语句
    .aspnet_regsql.exe -S 10.14.7.215 -U sa -P Admin1234 -d VIAOSDB -ed ----SQLSERVER 验证
    或 .aspnet_regsql.exe -S server -E -d VIAOSDB -ed ----WINDOWS验证

    2.为缓存依赖启用某表,自动为表生成触发器
    --触发器
    AgentInfo_AspNet_SqlCacheNotification_Trigger

    以下为启用语句
    .aspnet_regsql.exe -S 10.14.7.215 -E -d VIAOSDB -t AgentInfo -et ----为缓存依赖启用该表 (AgentInfo)

    .aspnet_regsql.exe -S . -E -d VIAOSDB -t InspectionItem -et
    .aspnet_regsql.exe -S . -E -d VIAOSDB -t InspectionService -et
    .aspnet_regsql.exe -S . -E -d VIAOSDB -t Permission -et
    .aspnet_regsql.exe -S . -E -d VIAOSDB -t RoleToPermission -et
    .aspnet_regsql.exe -S . -E -d VIAOSDB -t UserInfo -et
    .aspnet_regsql.exe -S . -E -d VIAOSDB -t UserRole -et
    .aspnet_regsql.exe -S . -E -d VIAOSDB -t VIStationInfo -et

    3.基本原理:缓存依赖为需要的表设置了一个变化情况表AspNet_SqlCacheTablesForChangeNotification以及触发器,当启用缓存依赖的表发生变化时,

    各表的触发器会将变化情况记录到表AspNet_SqlCacheTablesForChangeNotification,服务器端程序会根据词表变化情况,更新缓存。

    -----------------------------------------------------------附表脚本、存储过程脚本、触发器脚本---------------------------------------

    表脚本

    USE [VIAOSDB]
    GO
    
    /****** Object:  Table [dbo].[AspNet_SqlCacheTablesForChangeNotification]    Script Date: 2020/7/3 9:38:09 ******/
    SET ANSI_NULLS ON
    GO
    
    SET QUOTED_IDENTIFIER ON
    GO
    
    CREATE TABLE [dbo].[AspNet_SqlCacheTablesForChangeNotification](
    	[tableName] [NVARCHAR](450) NOT NULL,
    	[notificationCreated] [DATETIME] NOT NULL DEFAULT (GETDATE()),
    	[changeId] [INT] NOT NULL DEFAULT ((0)),
    PRIMARY KEY CLUSTERED 
    (
    	[tableName] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    
    GO
    

      

    存储过程脚本

    USE [VIAOSDB]
    GO
    
    /****** Object:  StoredProcedure [dbo].[AspNet_SqlCachePollingStoredProcedure]    Script Date: 2020/7/3 9:38:37 ******/
    SET ANSI_NULLS ON
    GO
    
    SET QUOTED_IDENTIFIER ON
    GO
    
    CREATE PROCEDURE [dbo].[AspNet_SqlCachePollingStoredProcedure] AS
             SELECT tableName, changeId FROM dbo.AspNet_SqlCacheTablesForChangeNotification
             RETURN 0
    GO
    
    /****** Object:  StoredProcedure [dbo].[AspNet_SqlCacheQueryRegisteredTablesStoredProcedure]    Script Date: 2020/7/3 9:38:37 ******/
    SET ANSI_NULLS ON
    GO
    
    SET QUOTED_IDENTIFIER ON
    GO
    
    CREATE PROCEDURE [dbo].[AspNet_SqlCacheQueryRegisteredTablesStoredProcedure] 
             AS
             SELECT tableName FROM dbo.AspNet_SqlCacheTablesForChangeNotification   
    GO
    
    /****** Object:  StoredProcedure [dbo].[AspNet_SqlCacheRegisterTableStoredProcedure]    Script Date: 2020/7/3 9:38:37 ******/
    SET ANSI_NULLS ON
    GO
    
    SET QUOTED_IDENTIFIER ON
    GO
    
    CREATE PROCEDURE [dbo].[AspNet_SqlCacheRegisterTableStoredProcedure] 
                 @tableName NVARCHAR(450) 
             AS
             BEGIN
    
             DECLARE @triggerName AS NVARCHAR(3000) 
             DECLARE @fullTriggerName AS NVARCHAR(3000)
             DECLARE @canonTableName NVARCHAR(3000) 
             DECLARE @quotedTableName NVARCHAR(3000) 
    
             /* Create the trigger name */ 
             SET @triggerName = REPLACE(@tableName, '[', '__o__') 
             SET @triggerName = REPLACE(@triggerName, ']', '__c__') 
             SET @triggerName = @triggerName + '_AspNet_SqlCacheNotification_Trigger' 
             SET @fullTriggerName = 'dbo.[' + @triggerName + ']' 
    
             /* Create the cannonicalized table name for trigger creation */ 
             /* Do not touch it if the name contains other delimiters */ 
             IF (CHARINDEX('.', @tableName) <> 0 OR 
                 CHARINDEX('[', @tableName) <> 0 OR 
                 CHARINDEX(']', @tableName) <> 0) 
                 SET @canonTableName = @tableName 
             ELSE 
                 SET @canonTableName = '[' + @tableName + ']' 
    
             /* First make sure the table exists */ 
             IF (SELECT OBJECT_ID(@tableName, 'U')) IS NULL 
             BEGIN 
                 RAISERROR ('00000001', 16, 1) 
                 RETURN 
             END 
    
             BEGIN TRAN
             /* Insert the value into the notification table */ 
             IF NOT EXISTS (SELECT tableName FROM dbo.AspNet_SqlCacheTablesForChangeNotification WITH (NOLOCK) WHERE tableName = @tableName) 
                 IF NOT EXISTS (SELECT tableName FROM dbo.AspNet_SqlCacheTablesForChangeNotification WITH (TABLOCKX) WHERE tableName = @tableName) 
                     INSERT  dbo.AspNet_SqlCacheTablesForChangeNotification 
                     VALUES (@tableName, GETDATE(), 0)
    
             /* Create the trigger */ 
             SET @quotedTableName = QUOTENAME(@tableName, '''') 
             IF NOT EXISTS (SELECT name FROM sysobjects WITH (NOLOCK) WHERE name = @triggerName AND type = 'TR') 
                 IF NOT EXISTS (SELECT name FROM sysobjects WITH (TABLOCKX) WHERE name = @triggerName AND type = 'TR') 
                     EXEC('CREATE TRIGGER ' + @fullTriggerName + ' ON ' + @canonTableName +'
                           FOR INSERT, UPDATE, DELETE AS BEGIN
                           SET NOCOUNT ON
                           EXEC dbo.AspNet_SqlCacheUpdateChangeIdStoredProcedure N' + @quotedTableName + '
                           END
                           ')
             COMMIT TRAN
             END
       
    GO
    
    /****** Object:  StoredProcedure [dbo].[AspNet_SqlCacheUnRegisterTableStoredProcedure]    Script Date: 2020/7/3 9:38:37 ******/
    SET ANSI_NULLS ON
    GO
    
    SET QUOTED_IDENTIFIER ON
    GO
    
    CREATE PROCEDURE [dbo].[AspNet_SqlCacheUnRegisterTableStoredProcedure] 
                 @tableName NVARCHAR(450) 
             AS
             BEGIN
    
             BEGIN TRAN
             DECLARE @triggerName AS NVARCHAR(3000) 
             DECLARE @fullTriggerName AS NVARCHAR(3000)
             SET @triggerName = REPLACE(@tableName, '[', '__o__') 
             SET @triggerName = REPLACE(@triggerName, ']', '__c__') 
             SET @triggerName = @triggerName + '_AspNet_SqlCacheNotification_Trigger' 
             SET @fullTriggerName = 'dbo.[' + @triggerName + ']' 
    
             /* Remove the table-row from the notification table */ 
             IF EXISTS (SELECT name FROM sysobjects WITH (NOLOCK) WHERE name = 'AspNet_SqlCacheTablesForChangeNotification' AND type = 'U') 
                 IF EXISTS (SELECT name FROM sysobjects WITH (TABLOCKX) WHERE name = 'AspNet_SqlCacheTablesForChangeNotification' AND type = 'U') 
                 DELETE FROM dbo.AspNet_SqlCacheTablesForChangeNotification WHERE tableName = @tableName 
    
             /* Remove the trigger */ 
             IF EXISTS (SELECT name FROM sysobjects WITH (NOLOCK) WHERE name = @triggerName AND type = 'TR') 
                 IF EXISTS (SELECT name FROM sysobjects WITH (TABLOCKX) WHERE name = @triggerName AND type = 'TR') 
                 EXEC('DROP TRIGGER ' + @fullTriggerName) 
    
             COMMIT TRAN
             END
       
    GO
    
    /****** Object:  StoredProcedure [dbo].[AspNet_SqlCacheUpdateChangeIdStoredProcedure]    Script Date: 2020/7/3 9:38:37 ******/
    SET ANSI_NULLS ON
    GO
    
    SET QUOTED_IDENTIFIER ON
    GO
    
    CREATE PROCEDURE [dbo].[AspNet_SqlCacheUpdateChangeIdStoredProcedure] 
                 @tableName NVARCHAR(450) 
             AS
    
             BEGIN 
                 UPDATE dbo.AspNet_SqlCacheTablesForChangeNotification WITH (ROWLOCK) SET changeId = changeId + 1 
                 WHERE tableName = @tableName
             END
       
    GO
    

      

    触发器脚本

    USE [VIAOSDB]
    GO
    /****** Object:  Trigger [dbo].[AgentInfo_AspNet_SqlCacheNotification_Trigger]    Script Date: 2020/7/3 9:37:26 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER TRIGGER [dbo].[AgentInfo_AspNet_SqlCacheNotification_Trigger] ON [dbo].[AgentInfo]
                           FOR INSERT, UPDATE, DELETE AS BEGIN
                           SET NOCOUNT ON
                           EXEC dbo.AspNet_SqlCacheUpdateChangeIdStoredProcedure N'AgentInfo'
                           END
                           
    

     

    此文参考:https://www.jb51.net/article/84431.htm

     

  • 相关阅读:
    【Prince2科普】衡量绩效的六大要素
    项目组合管理、项目集管理、项目管理和组织级项目管理之间的关系
    javascript中关系运算符的整理
    javascript中数组的基础----length和元素的求和
    回调函数和递归函数的应用
    谷歌浏览器打开时显示的是搜狗
    二级导航栏的立体显示
    利用css写的中英文切换的导航栏菜单
    javascript中的对象浅谈
    javascript中逻辑运算符总结
  • 原文地址:https://www.cnblogs.com/password1/p/13228560.html
Copyright © 2020-2023  润新知