LoginSignup
0
0

Autonomous Database:指定したディレクトリ内の全ファイルを一撃で削除する方法

Last updated at Posted at 2023-12-22

はじめに

Data Pump等を使用した際に、ディレクトリ内に複数のファイルが作成され、ファイルを一つ一つ削除するのは面倒な場合があります。

そんな時に使えそうな、特定のディレクトリ内の全ファイルを一撃で消す方法をご紹介します。

ディレクトリ内のファイルの一覧を表示

まずは現在のディレクトリDATA_PUMP_DIR内のファイルの一覧を表示してみます。
DBMS_CLOUD.LIST_FILESファンクションを使用します。

SQL> SELECT * FROM DBMS_CLOUD.LIST_FILES('DATA_PUMP_DIR');

OBJECT_NAME          BYTES CHECKSUM    CREATED                                LAST_MODIFIED                          
_______________ __________ ___________ ______________________________________ ______________________________________ 
exp02.dmp           274432             22-DEC-23 09.09.54.381150000 AM GMT    22-DEC-23 09.09.55.506786000 AM GMT    
expdp02.dmp          28672             22-DEC-23 09.12.06.853427000 AM GMT    22-DEC-23 09.12.21.623613000 AM GMT    
expdp101.dmp         32768             22-DEC-23 09.14.52.073214000 AM GMT    22-DEC-23 09.15.45.559141000 AM GMT    
expdp104.dmp         32768             22-DEC-23 09.15.05.567620000 AM GMT    22-DEC-23 09.15.45.555805000 AM GMT    
export.log            2039             22-DEC-23 09.09.27.321014000 AM GMT    22-DEC-23 09.15.47.640452000 AM GMT    
exp01.dmp            12288             22-DEC-23 09.09.27.591345000 AM GMT    22-DEC-23 09.09.57.816385000 AM GMT    
exp03.dmp            28672             22-DEC-23 09.09.54.488724000 AM GMT    22-DEC-23 09.09.57.824931000 AM GMT    
exp04.dmp            12288             22-DEC-23 09.09.55.595007000 AM GMT    22-DEC-23 09.09.57.821460000 AM GMT    
expdp01.dmp         274432             22-DEC-23 09.11.48.593315000 AM GMT    22-DEC-23 09.12.08.179151000 AM GMT    
expdp03.dmp          12288             22-DEC-23 09.12.08.010860000 AM GMT    22-DEC-23 09.12.09.211921000 AM GMT    
expdp102.dmp         24576             22-DEC-23 09.15.04.228428000 AM GMT    22-DEC-23 09.15.45.559179000 AM GMT    
expdp103.dmp       1925120             22-DEC-23 09.15.04.606600000 AM GMT    22-DEC-23 09.15.45.561670000 AM GMT    

12 rows selected. 

SQL> 

ディレクトリDATA_PUMP_DIR内には12個のファイルがあることが確認できました。

ディレクトリ内のファイルを一括削除するPL/SQL

こちらのPL/SQLブロックを実行することで、ディレクトリ内の全てのファイルを一括で削除することができます。

BEGIN
    FOR rec in (SELECT object_name FROM DBMS_CLOUD.LIST_FILES('ディレクトリ名'))
    LOOP
       DBMS_CLOUD.DELETE_FILE(directory_name => 'ディレクトリ名', file_name => rec.object_name);
    END LOOP;
END;

ディレクトリ名にDATA_PUMP_DIRを指定して、早速実行してみます。

SQL> BEGIN
  2      FOR rec in (SELECT object_name FROM DBMS_CLOUD.LIST_FILES('DATA_PUMP_DIR'))
  3      LOOP
  4         DBMS_CLOUD.DELETE_FILE(directory_name => 'DATA_PUMP_DIR', file_name => rec.object_name);
  5      END LOOP;
  6  END;
  7* /

PL/SQL procedure successfully completed.

SQL> 

実行結果の確認

再度、DBMS_CLOUD.LIST_FILESファンクションを使用して、ディレクトリDATA_PUMP_DIRの内容を確認してみます。

SQL> SELECT * FROM DBMS_CLOUD.LIST_FILES('DATA_PUMP_DIR');

no rows selected
SQL>

ディレクトリDATA_PUMP_DIR内の全てのファイルが削除されていることがわかりました。

なお、FOR文の中のSELECT文に WHERE object_name LIKE 'exp%' 等の検索条件を付加することで、特定のファイル名を持つファイルのみを削除することも可能です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0