The core infrastructure backend (API, database, Docker, etc).
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

41 lines
1.5 KiB

using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
namespace Bit.Function
{
public static class DatabaseMaintenance
{
[FunctionName("DatabaseMaintenance")]
public static void Run([TimerTrigger("0 0 4 * * *")]TimerInfo myTimer, TraceWriter log)
{
var connectionString = ConfigurationManager.ConnectionStrings["Vault"].ConnectionString;
using(var connection = new SqlConnection(connectionString))
{
connection.Open();
// ref: http://bit.ly/2zFNcZo
var cmd = new SqlCommand("[dbo].[AzureSQLMaintenance]", connection)
{
CommandType = CommandType.StoredProcedure
};
// Options: "all", "index", "statistics"
cmd.Parameters.Add("@operation", SqlDbType.NVarChar).Value = "all";
// Options: "smart", "dummy"
cmd.Parameters.Add("@mode", SqlDbType.NVarChar).Value = "smart";
// Options: 0, 1
cmd.Parameters.Add("@LogToTable", SqlDbType.Bit).Value = 1;
// Asynchronous BeginExecuteNonQuery for this long running sproc to avoid timeouts
var result = cmd.BeginExecuteNonQuery();
cmd.EndExecuteNonQuery(result);
log.Info($"Started [dbo].[AzureSQLMaintenance] at {DateTime.UtcNow}.");
}
}
}
}