2011-06-01 37 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