Loading
ただいま大変多くのお問い合わせをいただいており、ご連絡までにお時間を頂戴しております続きを読む

Apex 一括処理を使用して Salesforce からレコードを物理削除する

公開日: Jun 18, 2026
説明

Salesforce で Apex 一括処理クラスを使用してレコードを一括削除する場合、標準の database.delete() DML操作ではレコードを組織から完全に削除するのではなくごみ箱に移動します。手動でごみ箱を空にする必要なく、レコードを完全に削除することを「物理削除 (Hard Delete)」と呼びます。
この記事では Apex 一括処理クラスで DataBase.emptyRecycleBin() を使用して、データローダーによる Hard Delete を再現する方法を説明します。

解決策

Apex 一括処理クラスを使用してレコードを完全に削除するには、Apex 一括処理クラスの execute メソッド内の delete scope の直後に DataBase.emptyRecycleBin(scope) メソッドを使用します。emptyRecycleBin メソッドは、通常の 15 日間の保持期間をスキップして、削除されたレコードをごみ箱から完全に削除します。

次のサンプル Apex 一括処理クラスはこのパターンを実装しています。名前が「Test Account12」の取引先レコードをクエリし、それらを削除してから、すぐに Database.emptyRecycleBin(scope) を呼び出して完全に削除します。

global class BatchDeletion implements Database.Batchable<sObject>, Schedulable 
{   
    global BatchDeletion()
    {
           //constuctor  
    }
                
    global Database.QueryLocator start(Database.BatchableContext bc)
    {
        // query to delete account records with name 'Test Account12'        
        return Database.getQueryLocator([Select id from Account where Name='Test Account12']);
    } 
    
    global void execute(SchedulableContext sc)  
    {   
        //execute the batch
        BatchDeletion deleteCS = new BatchDeletion();
        ID batchprocessid = Database.executeBatch(deleteCS);
    }
    
    global void execute(Database.BatchableContext BC, list<sObject> scope)
    {     
      System.debug('## deleting '+scope.size()+' account records');   
 
        //delete list of Account records with name Test Account12
            delete scope;   
            Database.emptyRecycleBin(scope);  
    }
        
    global void finish(Database.BatchableContext BC) 
    {                 
        //no post processing
       
     }
}



その他のリソース

その他の物理削除の選択肢の詳細は以下を参照してください。

組織の不要なデータを削除する

Apex の一括処理

ナレッジ記事番号

000385786

 
読み込み中
Salesforce Help | Article