2011-06-01 67 views
2

如何在SQL Server启动时将某些项添加到tempdb?在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 

回答

2

庵运行它,如果你已经使用了标准设置,以使在tempdb ASP.Net会话状态时,系统应该在主数据库中生成一个存储过程(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,但我建议首先通过/?看到所有适用的选项

+0

谢谢,SP实际上存在,我没有意识到它,我不是谁设置了这一点,我从来没有设置ASPSessionState之前我只是想解决一个存在的问题。 – Rachel 2011-06-01 13:47:50