Добавление элементов tempdb при запуске в SQL Server - PullRequest
2 голосов
/ 01 июня 2011

Как я могу добавить некоторые элементы в базу данных tempdb при каждом запуске SQL Server?

Я не эксперт в этом, но наш 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 Ответ

2 голосов
/ 01 июня 2011

Гм, если вы использовали стандартные настройки для включения состояния сеанса ASP.Net в базе данных tempdb, система должна была сгенерировать сохраненный процесс (ASPState_Startup), как показано ниже в базе данных master. Этот сохраненный процесс настроен для автоматического запуска при запуске 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, но я бы предложил сначала пропустить /?, чтобы увидеть все применимые параметры.

...