すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:OSSバケット削除時の「Bucket is not empty」エラー

最終更新日:Aug 28, 2026

問題の説明

Alibaba Cloud Object Storage Service (OSS) を使用する際、不要になったバケットを削除できない場合があります。この問題は、OSS コンソール、または OSS ソフトウェア開発キット (SDK) や ossutil などのツールを使用した場合に発生する可能性があります。次のようなエラーメッセージが返されることがあります。

  • OSS SDK または ossutil を使用してバケットを削除する際、「The bucket you tried to delete is not empty」というエラーメッセージが返されます。

  • OSS コンソールでバケットを削除する際、「The bucket is not empty. Check whether the bucket contains undeleted objects or incomplete multipart upload parts」というエラーメッセージが返されます。

原因

削除しようとしているバケットに、未削除のオブジェクト、パート、LiveChannel、または未完了のマルチパートアップロードタスクが含まれています。誤削除を防ぐため、OSS では空でないバケットの削除は許可されていません。

ソリューション

バケットを削除すると、データは復元できません。バケットを削除する前に、データがバックアップされていることを確認してください。その後、バケット内のすべてのオブジェクト、パート、LiveChannel を削除します。バケットを削除するには、次の手順を実行します。

未削除のファイルとパートの確認

バケットからファイルとパートを削除するには、次の手順を実行します。

  1. OSS コンソールにログインします。

  2. 左側のナビゲーションペインで、バケット をクリックし、目的のバケット名をクリックします。

  3. オブジェクト タブで、ファイルが存在するかどうかを確認します。

    • ファイルが存在する場合、1 つ以上のファイルを選択し、完全に削除 をクリックして削除します。また、ossutil を使用してファイルを削除することもできます。詳細については、「ossutil を使用してバケット、ファイル、およびパートを削除する」をご参照ください。

    • ファイルが存在しない場合は、次の手順に進んでください。

  4. フラグメントの管理 タブをクリックします。フラグメント(Multipart) ページで、パーツファイルを削除します。

    • バケット内のすべてのパートファイルを削除するには、すべて削除 をクリックします。

    • 特定のパートファイルを削除するには、パートファイルを選択または検索し、削除 をクリックします。

  5. ossutil を使用して次のコマンドを実行し、バケットを削除します。「Bucket is not empty」エラーが引き続き発生する場合は、次の手順に進んでください。

    ./ossutil rm oss://[$Bucket_Name] -bar
    説明

    [$Bucket_Name] はバケットの名前です。

オブジェクトの以前のバージョンの確認

バージョニングは、バケットレベルのデータ保護機能です。バージョニングを有効にすると、オブジェクトの上書きや削除が以前のバージョンとして保存されます。誤ってオブジェクトを上書きまたは削除した場合でも、以前のバージョンに復元できます。ただし、コンソールまたはツールでオブジェクトを表示する際、バージョン番号を指定しない場合は、最新バージョンのみが表示されます。以前のバージョンは表示されません。オブジェクトの以前のバージョンを削除するには、次のいずれかの方法を使用します。

OSSコンソールの使用

  1. OSS コンソールにログインします。

  2. バケット をクリックし、目的のバケットの名前をクリックします。

  3. 左側のナビゲーションペインで、コンテンツセキュリティ > バージョン管理 を選択し、バージョニング機能が有効になっているかどうかを確認します。 バージョニング機能が有効になっている場合は、次の操作を実行して、以前のバージョンのオブジェクトを削除します。

    1. 左側のナビゲーションペインで、オブジェクト管理 > オブジェクト を選択します。

    2. 不要になったオブジェクトの以前のバージョンを見つけ、右側の完全に削除をクリックします。

    3. [OK] をクリックします。

  4. これらの手順を完了した後、バケットの削除を再度試みます。エラーが引き続き発生する場合は、次の手順に進んでください。

ossutilの使用

  1. 次のコマンドを実行して、バージョニングが有効になっているかどうかを確認します。詳細については、「bucket-versioning」をご参照ください。

    ./ossutil bucket-versioning --method get oss://[$Bucket_Name]

    次のようなコマンド出力が表示されます。

    bucket versioning status:Enabled
    • バージョニングが有効になっている場合、結果は Enabled です。次のコマンドを実行して、バケット内のオブジェクトの以前のバージョンを削除します。

      ./ossutil rm oss://[$Bucket_Name]/ --all-versions -r

      次のようなコマンド出力が表示されます。

    • バージョニングが無効になっている場合、結果は Disabled です。

  2. これらの手順を完了した後、バケットの削除を再度試みます。エラーが引き続き発生する場合は、次の手順に進んでください。

バケット内にLiveChannelが存在するかどうかの確認

コンソールまたはツールから、バケット内の LiveChannel を表示または削除することはできません。これらの操作を実行するには、API または SDK を使用する必要があります。詳細については、「DeleteLiveChannel」をご参照ください。以下のサンプルコードをご参照ください。

import java.util.List;
import com.alibaba.fastjson.JSON;
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.CreateLiveChannelRequest;
import com.aliyun.oss.model.CreateLiveChannelResult;
import com.aliyun.oss.model.ListLiveChannelsRequest;
import com.aliyun.oss.model.LiveChannelGenericRequest;
import com.aliyun.oss.model.LiveChannelListing;
import com.aliyun.oss.model.LiveChannelStatus;
import com.aliyun.oss.model.LiveChannelTarget;
import com.aliyun.oss.model.LiveChannel;
import com.aliyun.oss.common.auth.*;

public class DeleteLiveChannel {
    private static String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";

    /**
     * 環境変数からアクセス認証情報を取得します。
     */
    private static final EnvironmentVariableCredentialsProvider CREDENTIALS_PROVIDER = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();

    private static String bucketName = "bucketname";
    
    public static void createLiveChannel() {

        // OSSClientインスタンスを作成します。
        // OSSClientインスタンスが不要になったら、shutdownメソッドを呼び出してリソースを解放します。
        String liveChannelName = "liveChannelName1";
        OSS oss = new OSSClientBuilder().build(endpoint, CREDENTIALS_PROVIDER);
        CreateLiveChannelRequest request = new CreateLiveChannelRequest(bucketName,
                liveChannelName, "desc", LiveChannelStatus.Enabled, new LiveChannelTarget());
        CreateLiveChannelResult result = oss.createLiveChannel(request);

        // 取り込みURLを取得します。
        List<String> publishUrls = result.getPublishUrls();
        for (String item : publishUrls) {
            System.out.println(item);
        }

        // 再生URLを取得します。
        List<String> playUrls = result.getPlayUrls();
        for (String item : playUrls) {
            System.out.println(item);
        }

        oss.shutdown();
    }
    public static void listLiveChannels() {
       

        // OSSClientインスタンスを作成します。
        OSS oss = new OSSClientBuilder().build(endpoint, CREDENTIALS_PROVIDER);

        ListLiveChannelsRequest request = new ListLiveChannelsRequest(bucketName);
        LiveChannelListing liveChannelListing = oss.listLiveChannels(request);
        List<LiveChannel> list = liveChannelListing.getLiveChannels();
        for(LiveChannel i:list){
            deleteLiveChannel(i.getName());
        }
        oss.shutdown();
    }
    public static void deleteLiveChannel(String liveChannelName) {

        // OSSClientインスタンスを作成します。
        OSS oss = new OSSClientBuilder().build(endpoint, CREDENTIALS_PROVIDER);
        LiveChannelGenericRequest request = new LiveChannelGenericRequest(bucketName, liveChannelName);
        System.out.println("Delete liveChannel "+liveChannelName+" Done");
        try {
            oss.deleteLiveChannel(request);
        } catch (OSSException ex) {
            ex.printStackTrace();
        } catch (ClientException ex) {
            ex.printStackTrace();
        } finally {
            oss.shutdown();
        }
    }
    public static void main(String[] args) {
        // TODO: 自動生成されたメソッドスタブ
        DeleteLiveChannel.listLiveChannels();
    }

}