【发布时间】:2019-09-23 07:05:36
【问题描述】:
我们正在尝试将我们的 Azure Web 应用程序之一的 ASP.NET 会话状态移动到数据库中,似乎 aspnet_regsql.exe 工具是要走的路。不幸的是,我陷入了以下几个问题。这是一个 Azure SQL 数据库,我正在使用服务器的管理员帐户进行连接。
- 我最初想将会话表添加到我们现有的数据库中,所以我运行了
.\aspnet_regsql.exe -U adminusername -P adminpassword -S servername.database.windows.net -d databasename -ssadd -sstype c。这会引发异常“数据库'databasename'已经存在。选择一个不同的数据库名称” - 省略数据库名称并再次运行会引发异常:“Execution Timeout Expired” 大约 30 秒后,这只是 SqlCommand.CommandTimeout 的默认值。这发生在执行“CREATE DATABASE”命令时。我尝试手动创建数据库,但由于某种原因大约需要 50 秒。此数据库为 S0 层,未承受任何负载
- 在已创建的数据库上再次运行 aspnet_regsql(因为它是幂等的,对吗?)会导致“数据库已存在”错误,就像预先创建一个空数据库以供其启动一样。
- 没有允许我增加超时的标志,并且我无法使用 -C(连接字符串)标志设置命令超时
- 添加 -sqlexportonly 标志来生成脚本并直接运行它也不起作用(是的,我知道我不应该直接运行 InstallSqlState.sql)。它会抛出一大堆错误消息,例如:
Reference to database and/or server name in 'msdb.dbo.sp_add_job' is not supported in this version of SQL Server.USE statement is not supported to switch between databases.- 这让我觉得这个脚本可能对 Azure SQL 数据库有一些问题...
有人有什么想法吗?
更新:
看起来涉及“msdb”的所有错误都与删除和重新添加名为“Job_DeleteExpiredSessions”的数据库作业有关。 Azure SQL 不支持数据库作业,所以我能看到的唯一选项是
- 改为在 VM 上运行 SQL(成本要高得多,而且我宁愿坚持使用平台服务也不愿管理 VM)
- 实施其中一种“弹性作业代理”
- 也许将相同的功能移到其他地方(例如存储过程)?
【问题讨论】:
标签: asp.net azure-sql-database session-state command-timeout sql-session-state