我设置了两台 Windows Server 2008 服务器,均运行 SQL Server 2008 R2。一个用作主数据库,另一个用作镜像故障转移(两个网站数据库 + 用于会话的 ASPState)。一切正常,直到其中一个数据库在其运行的服务器重新启动后成为主数据库。我收到此错误:
Invalid object name 'tempdb.dbo.ASPStateTempSessions'.
我可以通过运行存储过程ASPState_Startup
(执行ASPState.dbo.CreateTempTables
)来解决这个问题,但前提是数据库处于“主要”状态。当服务器重新启动时,它将始终以“镜像/还原”状态重新启动数据库,这意味着我无法在启动时运行该 SP。
关于如何解决这个问题有什么建议吗?
答案1
尝试设置一个 SQL Agent 作业,该作业每分钟在每个实例上运行一次,并执行脚本以查找处于非恢复状态的数据库,检查表,然后如果不存在则执行该过程。我从您的问题中获取了对象名称,因此如果它们不在您的环境中,则可能需要更改。
if exists ( select 1 from sys.databases where state_desc <> 'RESTORING' and
[name] = 'ASPState' )
begin
if ( object_id('tempdb.dbo.ASPStateTempSessions') is null )
begin
exec sp_executesql @stmt = N'exec ASPState.dbo.CreateTempTables'
end
end