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}."); } } } }