【问题标题】:Quartz.net in Azure: "tables without a clustered index are not supported" when deleting a jobAzure 中的 Quartz.net:删除作业时“不支持没有聚集索引的表”
【发布时间】:2014-01-29 15:50:47
【问题描述】:

我花了一天的大部分时间试图让 Quartz.net 以 Azure 工作者角色运行。它使用 SQL Azure 实例作为其持久存储。

我的配置如下:

quartz.jobStore.type=Quartz.Impl.AdoJobStore.JobStoreTX, Quartz
quartz.jobStore.driverDelegateType=Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz
quartz.jobStore.tablePrefix=QRTZ_
quartz.jobStore.dataSource=myDS
quartz.dataSource.myDS.connectionString=Server=xxx,1433;Database=xxx;User ID=xxx@xxx;Password=xxx;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;
quartz.dataSource.myDS.provider=SqlServer-20

为了创建架构,我使用了 Quartz.net zip 文件中的脚本。实际上,我尝试了其中两个:

  1. tables_sqlServer.sql,
  2. tables_sqlServerCe.sql

它们在我下载的 Quartz.NET-2.2.1.zip 中。我必须在第一个脚本的ALTER TABLE 语句中删除ON [PRIMARY] 才能使其工作;否则它会抱怨此版本的 SQL Server 不支持“文件组引用和分区方案”。

第二个无需修改即可工作。

无论我使用哪个脚本来创建架构,Quartz.net 在我尝试删除作业时都会抛出错误:

“无法删除触发器:此版本的 SQL Server 不支持没有聚集索引的表。请创建聚集索引并重试。”

我可以添加作业(我可以看到正在添加到数据库的行),但是每当我尝试删除一个作业时,Quartz.net 就会出现问题。

我能做些什么来解决这个问题?

谢谢!

【问题讨论】:

  • 发布脚本。就个人而言,我会使用 sql profiler 在本地(不是 azure)运行它,以查看当我在 Quartz 上调用 delete 函数时会发生什么,以查看正在使用的实际 sql。正如它所说,Azure 不允许创建没有聚集索引的表,因此您需要找出到底发生了什么。
  • 看看 Gaurav 去年在 Azure 上运行 Quartz 的工作(表存储而不是 sql)gauravmantri.com/2013/01/23/…
  • 我将脚本添加到原始问题中。

标签: sql-server azure azure-sql-database quartz.net


【解决方案1】:

我已更新并运行冒烟测试,以测试应该使其在 SQL Azure 上运行的脚本更改,最新的脚本可在此处获得:

https://raw.github.com/quartznet/quartznet/master/database/tables/tables_sqlServer.sql

【讨论】:

  • 是的,我刚刚发现自己的问题是QRTZ_BLOB_TRIGGERS 表上缺少聚集的主键。不过感谢您的努力!
  • 感谢@JanVandenbosch,我遇到了同样的问题。
  • SQL Azure 现在支持 V12 服务器上的堆,所以这个问题应该不再是问题。 msdn.microsoft.com/library/…
猜你喜欢
  • 2013-02-27
  • 2015-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-05
  • 1970-01-01
  • 2011-10-03
相关资源
最近更新 更多