我们正在尝试将我们的 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'已经存在。选择不同的数据库名称” - 省略数据库名称并再次运行它会在大约 30 秒后引发异常:“Execution Timeout Expired”,这只是 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)
- 实施其中一种“弹性工作代理”
- 也许将相同的功能移到其他地方(例如存储过程)?