Quartz.NETQuartz.NET
Home
Features
Discussions
NuGet
GitHub
Home
Features
Discussions
NuGet
GitHub
  • Getting Started

    • Quartz 3 Quick Start
    • Tutorial
      • Using Quartz
      • Library Overview
      • Jobs And Triggers
      • More About Jobs
      • More About Triggers
      • Execution Groups
      • Node Affinity (Preferred Node)
      • Simple Triggers
      • Cron Triggers
      • RecurrenceTrigger
      • Trigger and Job Listeners
      • Scheduler Listeners
      • Job Stores
      • Tuning the Scheduler
      • Configuration, Resource Usage and SchedulerFactory
      • Advanced (Enterprise) Features
    • Configuration Reference
    • JSON Configuration
    • Frequently Asked Questions
    • Best Practices
    • Troubleshooting
    • API Documentation
    • Database Schema
    • Database Schema Changes
    • Migration Guide
    • Miscellaneous Features
  • How To's

    • One-Off Job
    • Multiple Triggers
    • Job Template
    • Using the CronTrigger
    • Rescheduling Jobs
  • Packages

    • Quartz Core Additions

      • Dashboard
      • Jobs
      • Serialization (System.Text.Json)
      • Serialization (Newtonsoft Json.NET)
      • Plugins
    • Integrations

      • ASP.NET Core Integration
      • Hosted Services Integration
      • Microsoft DI Integration
      • Multiple Schedulers with Microsoft DI
      • OpenTelemetry Integration
      • OpenTracing Integration
      • Redis Lock Handler
      • TimeZoneConverter Integration
    • 3rd Party Plugins for Quartz
  • Unreleased Releases

    • Quartz 4.x
      • Quartz 4 Quick Start
      • Tutorial
        • Using Quartz
        • Jobs And Triggers
        • More About Jobs & JobDetails
        • More About Triggers
        • Execution Groups
        • Node Affinity (Preferred Node)
        • Simple Triggers
        • Cron Triggers
        • RecurrenceTrigger
        • Trigger and Job Listeners
        • Scheduler Listeners
        • Job Stores
        • Configuration, Resource Usage and SchedulerFactory
        • Advanced (Enterprise) Features
        • Miscellaneous Features
        • CronTrigger Tutorial
      • Configuration Reference
      • JSON Configuration
      • Database Schema
      • Database Schema Changes
      • Migration Guide
      • Troubleshooting
      • API Documentation
      • How To's

        • One-Off Job
        • Multiple Triggers
        • Job Template
        • Using the CronTrigger
      • Packages

        • Quartz Core Additions

          • Dashboard
          • Jobs
          • Serialization (System.Text.Json)
          • JSON Serialization
          • Plugins
        • Integrations

          • ASP.NET Core Integration
          • HTTP API
          • Hosted Services Integration
          • Microsoft DI Integration
          • Multiple Schedulers with Microsoft DI
          • OpenTelemetry Integration
          • OpenTracing Integration
          • Redis Lock Handler
          • TimeZoneConverter Integration
        • 3rd Party Plugins for Quartz
  • Old Releases

    • Quartz 2.x
      • Quartz 2 Quick Start
      • Tutorial
        • Lesson 1: Using Quartz
        • Lesson 2: Jobs And Triggers
        • Lesson 3: More About Jobs & JobDetails
        • Lesson 4: More About Triggers
        • Lesson 5: SimpleTrigger
        • Lesson 6: CronTrigger
        • Lesson 7: TriggerListeners and JobListeners
        • Lesson 8: SchedulerListeners
        • Lesson 9: JobStores
        • Lesson 10: Configuration, Resource Usage and SchedulerFactory
        • Lesson 11: Advanced (Enterprise) Features
        • Lesson 12: Miscellaneous Features of Quartz
        • CronTrigger Tutorial
      • Configuration Reference
      • Migration Guide
      • API Documentation
    • Quartz 1.x
      • Tutorial
        • Lesson 1: Using Quartz
        • Lesson 2: Jobs And Triggers
        • Lesson 3: More About Jobs & JobDetails
        • Lesson 4: More About Triggers
        • Lesson 5: SimpleTrigger
        • Lesson 6: CronTrigger
        • Lesson 7: TriggerListeners and JobListeners
        • Lesson 8: SchedulerListeners
        • Lesson 9: JobStores
        • Lesson 10: Configuration, Resource Usage and SchedulerFactory
        • Lesson 11: Advanced (Enterprise) Features
        • Lesson 12: Miscellaneous Features of Quartz
      • API Documentation
  • License

When using ADO.NET-based job store (the usual being LocalTransactionJobStore), Quartz requires the creation of a set of tables. Creating the initial schema or migrating existing one is a manual step, as Quartz.NET does not create or migrate these automatically.

TableBrief Description
qrtz_calendarsStores non-standard calendars
qrtz_job_detailsStores IJobDetail data
qrtz_lockslocks used by quartz
qrtz_scheduler_statestores IScheduler data
qrtz_triggersStores ITrigger data
qrtz_cron_triggersStores CRON trigger cron expression
qrtz_fired_triggerstriggers that are currently running
qrtz_blob_triggerstrigger table with a binary blob data storage
qrtz_simple_triggersdata for very simple repeat triggers
qrtz_simprop_triggersReusable table for custom triggers. ICalendarIntervalTrigger, IDailyTimeIntervalTrigger, and IRecurrenceTrigger use this
qrtz_paused_trigger_grpsIScheduler.PauseTriggers data

The scripts to create these tables for various providers can be found here.

Upgrading an existing database instead? See Database Schema Changes — upgrading from 3.x to 4.x is mandatory, because 4.x no longer probes for the optional 3.x columns.

Columns 4.x requires

These four columns are optional in Quartz.NET 3.x — the scheduler probes for them at startup and disables the corresponding feature when they are missing. 4.x removed those probes and assumes all four exist.

ColumnTable(s)Added as optional in
MISFIRE_ORIG_FIRE_TIMEQRTZ_TRIGGERS3.17
EXECUTION_GROUPQRTZ_TRIGGERS, QRTZ_FIRED_TRIGGERS3.18
PREFERRED_NODEQRTZ_TRIGGERS3.19
PREFERRED_NODE_AUTOQRTZ_TRIGGERS3.19

Apply database/migrations/4.0/ to add whichever are missing. Every statement is guarded, so it is safe to run on a database that already has some of them.

Quartz Triggers Table

This table stores the configuration of the ITrigger data that is shared across all types.

Trigger StateDescription
Normaltrigger has fire times, and will do so on schedule
Pausedpaused and will not execute
Completetrigger will not fire again, it has no more "fire times"
Errorthe trigger had an error, it will not be fired again
Blockedthis trigger is associated with a job that is DisallowConcurrentExecutionAttribute and so must wait, but the trigger would like to fire
Executingthe trigger is currently executing
Nonethe trigger doesn't exist
Waitingdb only, and means the job is ready to be picked up
Help us by improving this page!
Last Updated: 8/1/26, 4:21 AM
Contributors: Marko Lahma, Claude Fable 5, Claude Opus 5 (1M context)
Prev
JSON Configuration
Next
Database Schema Changes