Löschen von Datensätzen in einem Massenvorgang

Das Feature zum Massenlöschen in Microsoft Dataverse hilft Ihnen, die Datenqualität aufrechtzuerhalten und den Verbrauch des Systemspeichers zu verwalten, indem Sie daten löschen, die Sie nicht mehr benötigen. So können Sie beispielsweise die folgenden Daten in einem Massenvorgang löschen:

  • Veraltete Daten
  • Daten, die für das Unternehmen nicht mehr relevant sind
  • Nicht benötigte Test- oder Beispieldaten
  • Daten, die falsch aus anderen Systemen importiert wurden

Sie können die folgenden Vorgänge durchführen:

  • Daten über mehrere Tabellen hinweg löschen
  • Löschen von Datensätzen in einer bestimmten Tabelle.
  • E-Mail-Benachrichtigungen erhalten, wenn eine Massenlöschung abgeschlossen wurde
  • Daten periodisch löschen
  • Die Startzeit einer wiederkehrenden Massenlöschung planen
  • Abrufen von Informationen zu Fehlern, die während eines Massenlöschvorgangs aufgetreten sind.

Wenn Sie mehrere Zeilen in elastischen Tabellen löschen möchten, können Sie auch die DeleteMultiple Nachricht verwenden. DeleteMultiple löscht Datensätze in einem einzelnen Elastic sofort, anstatt einen Massenlöschauftrag zu verwenden.

Massenlöschvorgang ausführen

Um Daten in Massen zu löschen, verwenden Sie die BulkDelete Nachricht, um einen Massenlöschauftrag zu senden. Verwenden Sie mithilfe des SDK die BulkDeleteRequest-Klasse. Verwenden Sie mithilfe der Web-API die BulkDelete-Aktion. Geben Sie die Abfrageausdrücke an, die die zu löschenden Datensätze in der QuerySet Eigenschaft Ihrer Anforderung beschreiben.

Ein Massenlöschauftrag wird durch einen Datensatz in der Bulk Delete Operation (BulkDeleteOperation) Tabelle dargestellt. Ein Datensatz für einen Massenlöschvorgang enthält die folgenden Informationen:

  • Die Anzahl der Datensätze, die der Auftrag gelöscht hat
  • Die Anzahl der Datensätze, die der Auftrag nicht löschen konnte
  • Ob der Auftrag wiederkehrend ist.
  • Die Startzeit des Auftrags

Der Massenlöschauftrag wird asynchron ausgeführt, ohne andere Aktivitäten zu blockieren. Es löscht nur Datensätze, die erstellt wurden, bevor der Auftrag gestartet wird. Der Auftrag löscht die angegebenen Datensätze gemäß den Kaskadierungsregeln, die auf dem Kaskadierungsverhalten von Tabellenbeziehungen basieren.

Wenn ein Massenlöschauftrag fehlschlägt oder vorzeitig beendet wird, führt der Vorgang kein Rollback für gelöschte Datensätze durch. Die Aufzeichnungsdaten bleiben gelöscht. Ein Datensatz von Fehlern wird in der Bulk Delete Failure (BulkDeleteFailure) Tabelle gespeichert. Sie können Informationen aus der Tabelle zu dem Fehler abrufen, der den Fehler verursacht hat.

Um einen Massenlöschauftrag auszuführen, müssen Sie über BulkDelete und Delete Berechtigungen für die Tabellentypen, die Sie löschen, verfügen. Außerdem müssen Sie über Leseberechtigungen für die Tabellendatensätze verfügen, die Sie in der QuerySet Eigenschaft angeben. Ein Systemadministrator verfügt standardmäßig über die erforderlichen Berechtigungen. Gewähren Sie diese anderen Benutzern.

Sie können einen Massenlöschvorgang für alle Tabellen ausführen, die die Delete Nachricht unterstützen.

Wenn die Löschaktion für einen bestimmten Tabellentyp ein Plug-In oder einen Workflow (Prozess) auslöst, löst der Massenlöschauftrag das Plug-In oder den Workflow jedes Mal aus, wenn er einen Tabellendatensatz dieses Typs löscht.

Steuerung der Massenlöschverarbeitung

Der Options Parameter für die BulkDeleteAktion steuert, wie der Massenlöschauftrag Tabellenzeilen (Datensätze) verarbeitet. Verwenden Sie den Parameter für:

  • Deaktivieren Sie die Aufbewahrung gelöschter Datensätze für massenlöschte Datensätze. Das Deaktivieren der Aufbewahrung gelöschter Datensätze verbessert die Leistung, da der Aufwand für das Speichern gelöschter Datensätze zur Wiederherstellung entfällt.
  • Aktivieren Sie den Modus für schnelles Löschen im Sandkasten, um die Standard-SDK-Pipeline (Plug-Ins, Workflows, Aufbewahrung gelöschter Datensätze) zu umgehen. Schnelles Löschen erreicht einen höheren Löschdurchsatz. Diese Eigenschaft wird nur in Sandkastenumgebungen unterstützt. Wenn Löschvorgänge in anderen Umgebungstypen, einschließlich Produktionsumgebungen, verwendet werden, folgen sie dem Standardprozess und beachten Plug-Ins, Workflows und Richtlinien zur Aufbewahrung gelöschter Datensätze.

Note

Die Unterstützung für die Verwendung des neuen Options-Parameters mit dem SDK für .NET zum Steuern der Massenlöschverarbeitung ist für eine zukünftige Version geplant.

Verwenden des Optionsparameters

Der Options Parameter akzeptiert ein BulkDeleteOptions Objekt mit den folgenden Eigenschaften.

Eigentum Typ Vorgabe Description
CanRecoverDeletedRecords Boolean null (Protokollierung gelöschter Datensätze aktiviert) Bei Festlegung auf "false" werden vom Massenlöschauftrag gelöschte Datensätze endgültig entfernt und können nicht wiederhergestellt werden. Wenn die Aufbewahrung gelöschter Datensätze für die Umgebung bereits deaktiviert ist, werden durch das Festlegen von CanRecoverDeletedRecords auf „true“ gelöschte Datensätze für diesen Auftrag nicht für eine spätere Wiederherstellung beibehalten.
RunJobForSandbox Boolean null (Standardpipeline) Wenn die Option auf „true“ festgelegt ist, verwendet der Massenlöschauftrag den Sandbox-Löschmodus mit hoher Leistung, wobei Plug-Ins, Workflows und die Aufbewahrung gelöschter Datensätze umgangen werden. Diese Eigenschaft ist besonders nützlich, um große Datenmengen nach dem Erstellen einer Produktionskopie aus Sandbox-Umgebungen zu entfernen. Wird nur in Sandkastenumgebungen unterstützt. Bei Verwendung in anderen Umgebungstypen, einschließlich Produktion, folgen Löschvorgänge dem Standardprozess und beachten Plug-Ins, Workflows und Richtlinien zur Aufbewahrung gelöschter Datensätze.

Warning

Führen Sie die in diesem Artikel gezeigten Beispiele nicht wie geschrieben aus. Ändern Sie den Beispielcode entsprechend ihrer Entwicklungsumgebung. Bei einigen dieser Beispiele werden alle Konten gelöscht, was Sie nicht tun möchten.

Beispiel: Options-Parameter

Die folgenden Beispiele veranschaulichen die Verwendung des Options Parameters mit der BulkDelete Aktion.

Verwenden Sie die Options Eigenschaft im Anforderungstext der BulkDelete-Aktion. Der Options Parameter ist ein komplexer BulkDeleteOptions-Typ.

Anforderung:

POST [Organization Uri]/api/data/v9.2/BulkDelete HTTP/1.1
OData-MaxVersion: 4.0
OData-Version: 4.0
Accept: application/json
Content-Type: application/json

{
    "QuerySet": [
        {
            "@odata.type": "Microsoft.Dynamics.CRM.QueryExpression",
            "EntityName": "account",
            "ColumnSet": {
                "AllColumns": true
            },
            "Distinct": false
        }
    ],
    "JobName": "Delete all accounts",
    "SendEmailNotification": false,
    "ToRecipients": [],
    "CCRecipients": [],
    "RecurrencePattern": "",
    "StartDateTime": "2026-03-13T06:30:00Z",
    "Options": {
        "CanRecoverDeletedRecords": true,
        "RunJobForSandbox": false
    }
}

Antwort:

HTTP/1.1 200 OK
OData-Version: 4.0

{
    "@odata.context": "[Organization Uri]/api/data/v9.2/$metadata#Microsoft.Dynamics.CRM.BulkDeleteResponse",
    "JobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}
Optionsparameterwerte
Szenario KannGelöschteDatensätzeWiederherstellen RunJobForSandbox Auswirkung
Standardeinstellung (Standardlöschung) true oder weggelassen falsch oder weggelassen Datensätze verwenden weiterhin die Standard-Lösch-Pipeline. Wenn die Aufbewahrung gelöschter Datensätze für die Umgebung bereits deaktiviert ist, werden durch das Festlegen von CanRecoverDeletedRecords auf „true“ gelöschte Datensätze für diesen Auftrag nicht für eine spätere Wiederherstellung beibehalten.
Protokollierung gelöschter Datensätze überspringen FALSCH falsch oder weggelassen Datensätze verwenden weiterhin die standardmäßige Löschpipeline, umgehen jedoch die Aufbewahrung gelöschter Datensätze für den Auftrag. Wenn die Protokollierung gelöschter Datensätze für die Umgebung bereits aktiviert ist, wird sie durch Festlegen von CanRecoverDeletedRecords auf „false“ für diesen spezifischen Auftrag übersprungen.
Schnelllöschung von Sandbox FALSCH STIMMT Umgeht die Protokollierung gelöschter Datensätze und die SDK-Pipeline. Maximaler Durchsatz.

Verhalten bei der Aufbewahrung gelöschter Datensätze steuern

Wenn Sie die Aufbewahrung gelöschter Datensätze für Ihre Umgebung aktivieren, speichert das System standardmäßig alle Datensätze, die ein Massenlöschauftrag löscht, bevor er sie löscht. Durch die Aufbewahrung gelöschter Datensätze können Administratoren versehentlich gelöschte Datensätze wiederherstellen, aber für jeden gelöschten Datensatz wird ein erheblicher E/A-Aufwand hinzugefügt. Um die Protokollierung gelöschter Datensätze für einen Massenlöschauftrag zu umgehen, legen Sie CanRecoverDeletedRecords im Parameter false auf Options fest. Diese Einstellung kann den Löschdurchsatz etwa verdoppeln, indem der Aufwand für Folgendes beseitigt wird:

  • Erstellen von DeletedItemReferenceDatensätzen
  • Kopieren von Datensatzdaten in Bin-Speichertabellen zur späteren Wiederherstellung
  • Aktualisierung der Wiederherstellungs-Blobs für jeden gelöschten Datensatz

Warning

Wenn Sie auf "false" festlegen CanRecoverDeletedRecords , entfernt der Massenlöschauftrag endgültig gelöschte Datensätze und kann sie nicht wiederherstellen. Diese Aktion kann nicht rückgängig gemacht werden. Stellen Sie sicher, dass Sie die Abfragekriterien überprüft haben und über geeignete Sicherungen verfügen, bevor Sie einen Massenlöschauftrag mit dieser Option ausführen. Diese Einstellung wirkt sich nur auf den aktuellen Massenlöschauftrag aus. Es ändert nicht die Konfiguration gelöschter Datensätze auf Umgebungsebene.

Beispiel: Deaktivieren der Aufbewahrung gelöschter Datensätze für schnellere Löschungen

Löschen Sie Datensätze dauerhaft, ohne sie zur späteren Wiederherstellung zu speichern.

POST [Organization Uri]/api/data/v9.2/BulkDelete HTTP/1.1
OData-MaxVersion: 4.0
OData-Version: 4.0
Accept: application/json
Content-Type: application/json

{
    "QuerySet": [
        {
            "@odata.type": "Microsoft.Dynamics.CRM.QueryExpression",
            "EntityName": "account",
            "ColumnSet": {
                "AllColumns": true
            },
            "Distinct": false
        }
    ],
    "JobName": "Delete accounts - skip recycle bin",
    "SendEmailNotification": false,
    "ToRecipients": [],
    "CCRecipients": [],
    "RecurrencePattern": "",
    "StartDateTime": "2026-03-13T06:30:00Z",
    "Options": {
        "CanRecoverDeletedRecords": false
    }
}

Schnelllöschung von Sandbox

Für Szenarien, die einen maximalen Löschdurchsatz erfordern, setzen Sie RunJobForSandbox auf true, um den Sandbox-Schnelllöschmodus zu aktivieren. In diesem Modus umgeht der Massenlöschvorgang die Standard-SDK-Pipeline vollständig und verwendet stattdessen die direkte Löschung über die Kaskadierungs-Engine, wodurch ein höherer Durchsatz erzielt wird.

Important

Diese Eigenschaft ist besonders nützlich, um große Datenmengen nach dem Erstellen einer Produktionskopie aus Sandbox-Umgebungen zu entfernen. Es wird nur in Sandkastenumgebungen unterstützt. Bei der Verwendung in anderen Umgebungstypen, einschließlich Produktionsumgebungen, folgen Löschvorgänge dem Standardprozess und berücksichtigen Plug-Ins, Workflows und Richtlinien zur Aufbewahrung gelöschter Datensätze.

Wenn sandkastenschnelles Löschen aktiviert ist, werden die folgenden Vorgänge übersprungen:

  • Ausführung von Plug-Ins vor und nach der Operation
  • Synchrone und asynchrone Workflowtrigger
  • Aufbewahrung gelöschter Datensätze (Datensätze werden dauerhaft gelöscht)
  • Benutzerdefinierte Geschäftslogik, die in der Löschnachricht registriert ist

Der Prozess behält die folgenden Elemente bei, wenn er schnelles Löschen ausführt:

  • Cascade-Löschregeln basierend auf der Tabellenbeziehungskonfiguration
  • Referenzielle Integrität (Fremdschlüsselbeziehungen)
  • Sicherheitsberechtigungsprüfungen
  • Synchronisierung der Änderungsnachverfolgung für nachgeschaltete Replikation

Important

Der Sandkasten-Schnelllöschmodus umgeht die gesamte Event Framework-Plug-In-Pipeline. Alle benutzerdefinierten Plug-Ins, Workflows oder Geschäftslogik, die in der Löschnachricht registriert sind, werden für datensätze, die in diesem Modus gelöscht wurden, nicht ausgeführt. Diese Einschränkung umfasst Überwachungs-Plug-Ins, Integrations-Plug-Ins und benutzerdefinierte Überprüfungslogik. Darüber hinaus können Sie datensätze, die im Sandkastenmodus gelöscht wurden, nicht wiederherstellen. Verwenden Sie diese Option nur, wenn Sie sicher sind, dass keine kritische Geschäftslogik von der Ausführung des Löschzeit-Plug-Ins abhängt, und dass eine dauerhafte, nicht wiederherstellbare Löschung akzeptabel ist.

Beispiel: Schnelles Löschen des Sandkastens

Erfahren Sie, wie Sie den High-Performance-Sandbox-Löschmodus für den maximalen Durchsatz verwenden.

POST [Organization Uri]/api/data/v9.2/BulkDelete HTTP/1.1
OData-MaxVersion: 4.0
OData-Version: 4.0
Accept: application/json
Content-Type: application/json

{
    "QuerySet": [
        {
            "@odata.type": "Microsoft.Dynamics.CRM.QueryExpression",
            "EntityName": "account",
            "ColumnSet": {
                "AllColumns": true
            },
            "Distinct": false
        }
    ],
    "JobName": "Delete accounts - sandbox fast delete",
    "SendEmailNotification": false,
    "ToRecipients": [],
    "CCRecipients": [],
    "RecurrencePattern": "",
    "StartDateTime": "2026-03-13T06:30:00Z",
    "Options": {
        "CanRecoverDeletedRecords": false,
        "RunJobForSandbox": true
    }
}

Langfristig aufbewahrte Daten

Massenlöschung steht auch für langfristig aufbewahrte Daten zur Verfügung. Führen Sie wie gewohnt einen Massenlöschvorgang aus, legen Sie jedoch das Feld der Abfrage DataSource so fest, dass sie beibehalten wird.

Legen Sie die QueryExpressionDataSource-Eigenschaft auf retained in einer Web-API-BulkDelete-Aktion fest, um anzugeben, dass die Abfrage nur für aufbewahrte Zeilen vorgesehen ist.

Anforderung:

POST [Organization Uri]/api/data/v9.2/BulkDelete HTTP/1.1
OData-MaxVersion: 4.0
OData-Version: 4.0
Accept: application/json
Content-Type: application/json

{
    "QuerySet": 
    [
        {
            "EntityName": "contact",
            "DataSource": "retained",
            "Criteria":
            {
                "FilterOperator": "And",
                "Conditions": 
                [
                    {
                        "AttributeName": "firstname",
                        "Operator": "Equal",
                        "Values" : [{"Value":"Bob","Type":"System.String"}]
                    }
                ]
            }
        }
    ],
    "JobName": "Bulk Delete Retained Contacts",
    "SendEmailNotification": false,
    "RecurrencePattern": "",
    "StartDateTime": "2023-03-07T05:00:00Z",
    "ToRecipients": [],
    "CCRecipients": []
}

Antwort:

HTTP/1.1 200 OK
{
    "@odata.context": "[Organization Uri]/api/data/v9.1/$metadata#Microsoft.Dynamics.CRM.BulkDeleteResponse",
    "JobId": "3093d67f-21f0-ed11-8b48-6045bdd92a32"
}

Beispiele

Weitere Informationen zum Feature zum Massenlöschen finden Sie im folgenden SDK für .NET Beispiele:

Siehe auch