在SQL Server中启动时添加tempdb项

时间:2011-06-01 13:35:22

标签: asp.net sql-server-2005 session-state

如何在SQL Server启动时随时向tempdb添加一些项目?

我不是这方面的专家,但我们的ASP SessionState存储在数据库中,由于某种原因,用于会话状态的tempdb项在服务器重新启动时都会被删除。我不仅需要重新创建项目,还必须重新创建tempdb的用户映射。我有一个脚本可以做到这一点,但我无法弄清楚如何在SQL启动时运行它

-- Use TempDB
use tempdb
go

-- Create Temp tables if they don't exist
IF NOT EXISTS(
    SELECT 1 FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_TYPE='BASE TABLE'
    AND TABLE_NAME = 'ASPStateTempSessions')
BEGIN
    EXECUTE [ASPState].[dbo].[CreateTempTables] 
END

-- If ASPSessionState user isn't mapped to temp db, map it
IF IS_MEMBER('ASPSessionState') IS NULL
    create user ASPSessionState from login ASPSessionState

-- Give ASPSessionState user read/write permissions to tempdb
exec sp_addrolemember db_datareader, ASPSessionState 
go
exec sp_addrolemember db_datawriter , ASPSessionState 
go

1 个答案:

答案 0 :(得分:2)

嗯,如果您使用标准设置在tempdb中启用ASP.Net会话状态,系统应该在master数据库中生成如下的存储过程(ASPState_Startup)。此存储过程配置为在SQL Server启动时自动运行:

USE master
GO

DECLARE @sstype nvarchar(128)
SET @sstype = N'sstype_temp'

IF UPPER(@sstype) = 'SSTYPE_TEMP' BEGIN
    DECLARE @cmd nchar(4000)

    SET @cmd = N'
        /* Create the startup procedure */
        CREATE PROCEDURE dbo.ASPState_Startup 
        AS
            EXECUTE ASPState.dbo.CreateTempTables

            RETURN 0'
    EXEC(@cmd)
    EXECUTE sp_procoption @ProcName='dbo.ASPState_Startup', @OptionName='startup', @OptionValue='true'
END    

因此,无论如何都应该重新创建临时表,除非安装后某些内容已被更改。

如果需要其他权限,我希望扩展CreateTempTables中现有的ASPState程序。


如果这不能正常工作,您可以尝试使用aspnet_regsql命令(位于%Windir%\Microsoft.Net\Framework\<framework version下 - 删除然后重新添加对服务器的会话状态支持。您想要使用-ssremove然后-ssadd,但我建议首先传递/?以查看所有适用的选项。