#概要
AWSのRDS利用している場合、OSにログインできないです。oracle のData Pump とDBMS_FILE_TRANSFER 使えばデータの移動できますが、不要になったDMPファイル、LOGファイルを削除したいです。あるdirectoryの下のファイルを一括削除のprocedureを作成してみました。
#Procedure
例: DATA_PUMP_DIRの下のファイル一括削除
DEClARE
directory_object VARCHAR2(100);
BEGIN
directory_object:='DATA_PUMP_DIR';
FOR vRec IN (
SELECT FILENAME
FROM table(RDSADMIN.RDS_FILE_UTIL.LISTDIR(directory_object))
WHERE TYPE='file'
ORDER BY mtime
) LOOP
utl_file.fremove(directory_object,vRec.FILENAME);
END LOOP;
END;
動作確認
##削除前
SELECT FILENAME
, TYPE
, FILESIZE
, MTIME
FROM table(RDSADMIN.RDS_FILE_UTIL.LISTDIR('DATA_PUMP_DIR'))
ORDER BY mtime;
##実行
SQL> DEClARE
2 directory_object VARCHAR2(100);
3 BEGIN
4 directory_object:='DATA_PUMP_DIR';
5 FOR vRec IN (
6 SELECT FILENAME
7 FROM table(RDSADMIN.RDS_FILE_UTIL.LISTDIR(directory_object))
8 WHERE TYPE='file'
9 ORDER BY mtime
10 ) LOOP
11 utl_file.fremove(directory_object,vRec.FILENAME);
12 END LOOP;
13 END;
14 /
PL/SQLプロシージャが正常に完了しました。
##実行後
SELECT FILENAME
, TYPE
, FILESIZE
, MTIME
FROM table(RDSADMIN.RDS_FILE_UTIL.LISTDIR('DATA_PUMP_DIR'))
ORDER BY mtime;
↑対象ファイル削除されていること確認できました。
※フォルダー内全ファイル削除なので、使う場合ご注意ください。