Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Scheduled Tasks with Sql Azure?

I wonder if there's a way to use scheduled tasks with SQL Azure? Every help is appreciated.

The point is, that I want to run a simple, single line statement every day and would like to prevent setting up a worker role.

like image 248
BitKFu Avatar asked May 19 '11 11:05

BitKFu


People also ask

How do I schedule a SQL job in Azure SQL?

Using SQL Server Management StudioExpand SQL Server Agent, expand Jobs, right-click the job you want to schedule, and click Properties. Select the Schedules page, and then click New. In the Name box, type a name for the new schedule.

How do I create a scheduled task in Azure?

Sign in to the Azure portal. Select the Batch account you want to schedule jobs in. In the left navigation pane, select Job schedules. Select Add to create a new job schedule.

Is SQL Server Agent available in Azure SQL Database?

SQL Agent is not available in Azure SQL Database or Azure Synapse Analytics.

How do I create a schedule in SQL?

To create a scheduleIn Object Explorer, connect to an instance of the SQL Server Database Engine, and then expand that instance. Expand SQL Server Agent, right-click Jobs, and select Manage Schedules. In the Manage Schedules dialog box, click New. In the Name box, type a name for the new schedule.


1 Answers

There's no SQL Agent equivalent for SQL Azure today. You'd have to call your single-line statement from a background task. However, if you have a Web Role already, you can easily spawn a thread to handle this in your web role without having to create a Worker Role. I blogged about the concept here. To spawn a thread, you can either do it in the OnStart() event handler (where the Role instance is not yet added to the load balancer), or in the Run() method (where the Role instance has been added to the load balancer). Usually it's a good idea to do setup in the OnStart().

One caveat that might not be obvious, whether you execute this call in its own worker role or in a background thread of an existing Web Role: If you scale your Role to, say, two instances, you need to ensure that the daily call only occurs from one of the instances (otherwise you could end up with either duplicates, or a possibly-costly operation being performed multiple times). There are a few techniques you can use to avoid this, such as a table row-lock or an Azure Storage blob lease. With the former, you can use that row to store the timestamp of the last time the operation was executed. If you acquire the lock, you can check to see if the operation occurred within a set time window (maybe an hour?) to decide whether one of the other instances already executed it. If you fail to acquire the lock, you can assume another instance has the lock and is executing the command. There are other techniques - this is just one idea.

like image 136
David Makogon Avatar answered Nov 15 '22 09:11

David Makogon