Freigeben über


Datenpflege mit SqlTrackingService

Windows Workflow Foundation verfügt über ein Datenpflegefeature für SqlTrackingService. Dieses Feature ermöglicht es Ihnen, Überwachungsdaten bei Abschluss von Workflowinstanzen zu partitionieren. Die Partitionierung umfasst das Verschieben von Überwachungsdaten, die von vollständig ausgeführten Workflowinstanzen in getrennte Datenbanktabellen (so genannte Partitionen) eingefügt werden. Windows Workflow Foundation bietet zwei verschiedene Partitionierungsschemas, sodass Sie das besser für Ihre Workflowlösung geeignete Schema wählen können:

  • Partitionieren bei Abschluss

  • Partitionieren bei Bedarf

Partitionieren bei Abschluss

Partitionieren bei Abschluss ist für Anwendungen konzipiert, die keine Ausfallzeiten aufweisen und bei denen Ausfallzeiten vermieden werden sollen. Die Partitionierung wird beim Abschluss jeder Workflowinstanz durchgeführt. Die von einer Workflowinstanz generierten Datensätze werden den regulären Überwachungstabellen hinzugefügt, bis die Workflowinstanz fertig gestellt wird. An dieser Stelle werden die Datensätze in Partitionstabellen verschoben. Bei aktivierter Partitionierung wird regelmäßig eine Reihe von Tabellen für Überwachungsdaten erstellt. Die verfolgten Daten abgeschlossener Workflowinstanzen werden in diese neuen Partitionen verschoben, ohne dass derzeit ausgeführte Anwendungen unterbrochen werden.

Konfigurieren der Partitionierung bei Abschluss

Standardmäßig ist die Partitionierung für SqlTrackingService nicht aktiviert. Soll die von SqlTrackingService verwaltete Partitionierung aktiviert werden, legen Sie die PartitionOnCompletion-Eigenschaft entsprechend dem folgenden Codebeispiel auf true fest.

[C#]

string connectionString = "Initial Catalog=Tracking;Data Source=localhost;Integrated Security=SSPI;";
SqlTrackingService sqlTrackingService = new SqlTrackingService(connectionString);
sqlTrackingService.PartitionOnCompletion = true;

Bei Verwendung der PartitionOnCompletion-Eigenschaft können Partitionstabellen konfiguriert werden, damit neue Partitionstabellen in zeitbasierten Intervallen erstellt werden. Ändern Sie dazu die TrackingPartitionInterval.Interval-Spalte im SqlTrackingService-Schema. Eine gespeicherte Prozedur mit der Bezeichnung SetPartitionInterval ermöglicht das programmgesteuerte Durchführen dieser Aufgabe, um das Intervall während der Anwendungsausführung anzupassen. Das Standardpartitionsintervall ist monatlich, "m". Die verfügbaren Werte umfassen auch täglich ("d") und jährlich ("y"). Nach der entsprechenden Aktivierung wird von Windows Workflow Foundation ein neuer Partitionssatz (neuer Tabellensatz) im angegebenen Zeitintervall erstellt. Die Tabelle vw_TrackingPartitionSetName beinhaltet die Informationen zum Partitionssatznamen, einschließlich Name yyyy_m, CreatedDateTime, EndDateTime und PartitionInterval. Bei Fertigstellung von Workflowinstanzen werden die entsprechenden verfolgten Daten in den neu erstellten Tabellensatz verschoben. Im folgenden Code wird gezeigt, wie das Partitionsintervall mithilfe des PartitionOnCompletion-Schemas festgelegt wird.

[C#]

internal static void SetPartitionInterval()
{
    // Valid values are 'd' (daily), 'm' (monthly), and 'y' (yearly).  
    // The default is 'm'.
    SqlCommand command = new SqlCommand("dbo.SetPartitionInterval");
    command.CommandType = CommandType.StoredProcedure;
    command.Connection = new SqlConnection(connectionString);
            
    SqlParameter intervalParameter = new SqlParameter("@Interval", SqlDbType.Char);
    intervalParameter.SqlValue = 'd';
    command.Parameters.Add(intervalParameter);
    try
    {
        command.Connection.Open();
        command.ExecuteNonQuery();
    }
    finally
    {
        if ((command != null) && (command.Connection != null) && 
            (ConnectionState.Closed != command.Connection.State))
        {
            command.Connection.Close();
        }
        command.Dispose();
    }
}

Partitionieren bei Bedarf

Partitionieren bei Bedarf ist für Anwendungen konzipiert, bei denen regelmäßig oder konsistent Ausfallzeiten auftreten und bei denen Sie während der Ausfallzeit eine Partitionierung vornehmen möchten. Erstellen Sie zum Aktivieren dieses Schemas eine Aufgabe, mit der die gespeicherte PartitionCompletedWorkflowInstances-Prozedur, die beim Ausführen des SqlTracking_Logic.sql-Skripts erstellt wird, ausgeführt wird. Bei Ausführung dieser gespeicherten Prozedur werden die Überwachungsdaten, die von abgeschlossenen Workflowinstanzen aus den Live-Tabellen eingefügt wurden, in die Partitionstabellen verschoben.

Anzeigen von Überwachungspartitionsinformationen und Tabellen

Im folgenden Code wird gezeigt, wie Partitionsinformationen extrahiert werden, einschließlich der erstellten Tabellen aus der SqlTrackingService-Datenbank.

[C#]

internal static void ShowTrackingPartitionInformation()
{
    // Show the contents of the TrackingPartitionName table.

    SqlCommand command = new SqlCommand("SELECT * FROM vw_TrackingPartitionSetName");
    SqlDataReader reader = null;
    command.CommandType = CommandType.Text;
    command.Connection = new SqlConnection(connectionString);

    try
    {
        command.Connection.Open();
        reader = command.ExecuteReader();
        if (reader.Read())
        {
            Console.WriteLine();
            Console.WriteLine("***************************");
            Console.WriteLine("Partition information: ");
            Console.WriteLine("PartitionId: {0}", reader[0]);
            Console.WriteLine("Name: {0}", reader[1]);
            Console.WriteLine("Created: {0}", reader[2]);
            Console.WriteLine("End: {0}", reader[3] is System.DBNull ? "NULL" : reader[3]);
            Console.WriteLine("Partition Interval: {0}", reader[4]);
            Console.WriteLine("***************************");
        }
        else
        {
            Console.WriteLine();
            Console.WriteLine("No partition information present.");
        }

    }
    finally
    {
        if ((reader != null) && (!reader.IsClosed))
            reader.Close();
        if ((command != null) && (command.Connection != null) && (ConnectionState.Closed != command.Connection.State))
        {
            command.Connection.Close();
        }
        command.Dispose();
    }
}

Im folgenden Code wird gezeigt, wie die Namen der Partitionstabellen in der SqlTrackingService-Datenbank angezeigt werden.

internal static void ShowPartitionTableInformation()
{
    SqlCommand command = new SqlCommand(
        "declare @trackingName varchar(255) select @trackingName = Name from vw_TrackingPartitionSetName " +
        "select name from sysobjects where name like '%' + @trackingName");
    
    Console.WriteLine();
    Console.WriteLine("***************************");
    Console.WriteLine("Partition tables: ");
    SqlDataReader reader = null;
    command.CommandType = CommandType.Text;
    command.Connection = new SqlConnection(connectionString);

    try
    {
        command.Connection.Open();
        reader = command.ExecuteReader();
        while (reader.Read())
        {
            Console.WriteLine(reader[0]);
        }
    }
    finally
    {
        if ((reader != null) && (!reader.IsClosed))
            reader.Close();
        if ((command != null) && (command.Connection != null) && (ConnectionState.Closed != command.Connection.State))
        {
            command.Connection.Close();
        }
        command.Dispose();
    }
    Console.WriteLine("***************************");
}

Siehe auch

Referenz

SqlTrackingService
PartitionOnCompletion

Konzepte

Verwenden von SqlTrackingService
Abfragen von SqlTrackingService-Daten mit SqlTrackingQuery
Windows Workflow-Überwachungsdienste

Weitere Ressourcen

SQL Data Maintenance Sample
Query Using SQLTrackingService Sample

Footer image

Copyright © 2007 by Microsoft Corporation. Alle Rechte vorbehalten.