如何在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
答案 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
,但我建议首先传递/?
以查看所有适用的选项。