注意:
- 此教學課程需要存取 Oracle Cloud。若要註冊免費帳戶,請參閱 Oracle Cloud Infrastructure Free Tier 入門。
- 它會使用 Oracle Cloud Infrastructure 證明資料、租用戶以及區間的範例值。完成實驗室之後,請將這些值取代為您雲端環境特有的值。
從物件儲存刪除大量 / 批次中的物件
簡介
從物件儲存刪除物件的方式有多種不同。您可以透過主控台、CLI 或 API/SDK 執行單一物件刪除作業。不過,當刪除大量物件時,問題會變得不可分割。本教學課程說明下列可用於大量 / 批次刪除物件的方法:
- 透過 Oracle Cloud Infrastructure (OCI) CLI 刪除批次 / 大量
- 透過物件生命週期管理 (OLM) 刪除批次 / 大量
指向備註
請注意下列幾點,使用 OCI CLI 大量刪除物件:
-
bulk-delete 命令的實行方式為何?它是同步或非同步作業嗎?
bulk-delete 命令是以同步方式實行,也就是透過在從屬端發出單一物件刪除要求,將物件逐一刪除。它不是非同步伺服器端作業。例如,考慮執行指令的位置,完成指令需要很長的時間。如果您在指令執行完畢前將其停止,則只刪除該指令所要刪除的某些物件。還有其他尚未處理 / 刪除的物件。
-
如何監督大量刪除命令的進度?
您可以在執行大量刪除命令之後,立即查看該命令的進度。在您的終端機中,會有
#
個字元的長條,然後旁邊有百分比 (請參閱以下範例) - 這是 bulk-delete 命令的進度。
請注意下列幾點,使用 OLM 大量刪除物件:
-
OLM 如何實施?它是同步或非同步作業嗎?
OLM 是非同步作業,表示生命週期規則工作會在背景中執行,其實作後提供各種細微差異。例如,就只會刪除物件描述資料,這表示您可能看不到剛才刪除的物件。但在實際狀況下,物件實際的資料仍然存在於我們的儲存伺服器上,而且稍後將由我們的內部資源回收服務刪除 / 清除。從客戶角度來看,如果他們已刪除某個物件,但是在內部刪除該物件,則我們儲存伺服器中仍有這些資料等待清除,亦即這些資料不會被收取儲存空間的使用費 (透過 CLI 或主控台)。因為 OLM 是非同步的,但是當規則在背景中執行時,您可以執行物件儲存的其他作業。
-
如何監督 OLM 生命週期規則的進度?
目前無法監督 OLM 生命週期規則進度 - OLM 工作未在「工作要求」中顯示。亦即,能夠監控 OLM 規則進度的功能已納入我們的產品藍圖中,並可於未來取得。
-
我剛建立了一個生命週期規則。規則實際何時開始?
請記住,生命週期規則不會立即開始。例如,如果您為要刪除超過 3 天的物件建立生命週期規則,而且有超過 3 天的現有物件,則建立規則時不會立即刪除這些物件。建立規則到實際生效之前,有一段延遲時間。我們會在 24 小時內預期規則生效 (或至少開始生效)。
我應該使用哪種方法?
大量 / 批次物件刪除方法之間的主要差異在於實行中。為了重申,OCI CLI bulk-delete 命令會在從屬端以同步方式實行,OLM 在伺服器端會以非同步方式實行。一般而言,使用下列準則來決定要使用的方法。
使用 CLI bulk-delete (如果): | 使用 OLM 大量刪除,如果: |
---|---|
可同步刪除 (因為 CLI 同步) | 刪除必須以非同步方式進行 (因為 OLM 為非同步) |
一次性刪除 | 應發生的週期性刪除 |
物件數目很小 | 物件數目很多 |
需要立即刪除物件 | 物件刪除可以等候 (短暫延遲) |
目標
- 瞭解下列從物件儲存刪除大量物件的方法:
- 透過 Oracle Cloud Infrastructure (OCI) CLI 刪除批次 / 大量
- 透過物件生命週期管理 (OLM) 刪除批次 / 大量
必要條件
- 若要瞭解物件儲存,請參閱物件儲存簡介。
- 請參閱使用物件生命週期管理,瞭解物件儲存 OLM 功能的基本資訊。
- 請參閱命令行介面 (CLI) ,瞭解 OCI CLI 的運作方式。
方法 1:透過 OCI CLI 刪除大量 / 批次中的物件
您可以使用下列任何一種方法,從 OCI CLI 大量刪除物件。
刪除儲存桶內大量的物件
您可以使用 OCI CLI 透過下列命令,大量刪除儲存桶內的物件:
oci os object bulk-delete -bn <bucket_name>
注意:如果您不想要執行刪除作業,但只想查看將刪除物件的計畫,可以使用 --dry-run
選項。
oci os object bulk-delete -bn <bucket_name> --dry-run
{
"delete-failures": {},
"deleted-objects": [
"1000_sales.csv",
"rick_and_morty.json"
]
}
依前置碼大量刪除物件
您可以新增 --prefix
選項,指定只符合特定前置碼的物件刪除。下列指令會刪除所有符合字首 <some_prefix>
的物件。
oci os object bulk-delete -bn <bucket_name> --prefix <some_prefix>
例如,如果您要刪除字首為 "rick" 的物件,請使用下列命令:
oci os object bulk-delete -bn test-bucket-1 --prefix rick
WARNING: This command will delete at least 1 objects. Are you sure you wish to continue? [y/N]: y
Deleted object rick_and_morty.json [####################################] 100%
{
"delete-failures": {},
"deleted-objects": [
"rick_and_morty.json"
]
}
依樣式大量刪除物件 (包含)
您可以新增 --include
選項,指定只符合特定樣式的物件刪除。下列命令會刪除符合 <some_pattern>
樣式的所有物件。
oci os object bulk-delete -bn <bucket_name> --include <some_pattern>
例如,如果您只要刪除 JSON 檔案類型的物件,請使用下列命令:
oci os object bulk-delete -bn test-bucket-1 --include "*.json"
WARNING: This command will delete at least 1 objects. Are you sure you wish to continue? [y/N]: y
Deleted object rick_and_morty.json [####################################] 100%
{
"delete-failures": {},
"deleted-objects": [
"rick_and_morty.json"
]
}
依反向模式大量刪除物件 (排除)
您可以新增 --exclude
選項,來指定只不符合特定樣式的物件刪除。下列命令會刪除符合 <some_pattern>
樣式的所有物件,但這些物件除外。
oci os object bulk-delete -bn <bucket_name> --exclude <some_pattern>
例如,如果您要刪除 JSON 檔案類型以外的所有物件,請使用下列命令:
oci os object bulk-delete -bn test-bucket-1 --exclude "*.json"
WARNING: This command will delete at least 1 objects. Are you sure you wish to continue? [y/N]: y
Deleted object 1000_sales.csv [####################################] 100%
{
"delete-failures": {},
"deleted-objects": [
"1000_sales.csv"
]
}
方法 2:透過 OLM 刪除大量 / 批次中的物件
除了 OCI CLI 之外,您也可以使用 OLM - 物件生命週期管理 - 功能大量刪除物件。OLM 功能可讓您建立生命週期規則,指定符合特定條件時要採取的動作。例如,我們可以指定要刪除 30 天以內的物件。
在 OCI 主控台 /CLI 上建立大量刪除生命週期規則
可以透過 OCI 主控台建立生命週期規則。按一下儲存桶,然後在側面的「生命週期原則規則」頁籤中執行此操作。然後,對話方塊應該會彈出,讓使用者可以設定其規則。
生命週期規則也可以透過 OCI CLI 建立。下列命令是使用 OCI CLI 建立週期規則的範例。此規則會刪除超過 10 天的所有物件。
oci os object-lifecycle-policy put --bucket-name test-bucket-1 --items '[
{
"action": "DELETE",
"isEnabled": true,
"name": "lifecycle-rule-delete-all",
"target": "objects",
"timeAmount": 10,
"timeUnit": "DAYS"
}
]'
依前置碼建立大量刪除生命週期規則
在 OCI 主控台中,您可以根據特定條件為要刪除的物件指定「物件名稱」篩選。它可以處理物件名稱前置碼比對。下列螢幕擷取畫面顯示的生命週期規則將會刪除前置碼為 test/
的所有物件。
與主控台類似,OCI CLI 也可以指定透過前置碼比對刪除的物件。
oci os object-lifecycle-policy put --bucket-name <test_bucket> --items '[
{
...
"objectNameFilter": {
"exclusionPatterns": [],
"inclusionPatterns": [],
"inclusionPrefixes": [
<some_prefix>
]
},
...
}
]'
例如,下列 OCI CLI 命令會建立 / 更新生命週期規則,以刪除前置碼為 test/
的所有物件。請記住,–-items
選項的引數必須是有效的 JSON 清單。
oci os object-lifecycle-policy put --bucket-name test-bucket-1 --items '[
{
"action": "DELETE",
"isEnabled": true,
"name": "lifecycle-rule-delete-all",
"objectNameFilter": {
"exclusionPatterns": [],
"inclusionPatterns": [],
"inclusionPrefixes": [
"test/"
]
},
"target": "objects",
"timeAmount": 10,
"timeUnit": "DAYS"
}
]'
依樣式比對建立大量刪除生命週期規則 (包含項目)
在 OCI 主控台中,您可以指定物件名稱篩選,依照樣式比對 (包含) 來刪除物件。下面的螢幕擷取畫面顯示將刪除所有 .doc
檔案類型的生命週期規則。
您也可以只刪除符合 OCI CLI 特定模式的檔案。
oci os object-lifecycle-policy put --bucket-name <bucket_name> --items '[
{
...
"objectNameFilter": {
"exclusionPatterns": [],
"inclusionPatterns": [
<some_pattern>
],
"inclusionPrefixes": []
},
...
}
]'
例如,下列 OCI CLI 命令會建立 / 更新將刪除所有 .doc
檔案類型的生命週期規則。
oci os object-lifecycle-policy put --bucket-name test-bucket-1 --items '[
{
"action": "DELETE",
"isEnabled": true,
"name": "lifecycle-rule-delete-all",
"objectNameFilter": {
"exclusionPatterns": [],
"inclusionPatterns": [
"*.doc"
],
"inclusionPrefixes": []
},
"target": "objects",
"timeAmount": 10,
"timeUnit": "DAYS"
}
]'
依反向模式比對 (排除) 建立大量刪除生命週期規則
在 OCI 主控台中,您可以透過反向樣式比對 (排除) 指定要刪除物件的「物件名稱篩選」,亦即除了符合樣式的物件之外,還可以刪除所有物件。下列螢幕擷取畫面顯示的生命週期規則會刪除 .txt
檔案類型以外的所有項目。
除了符合 OCI CLI 特定樣式的檔案之外,您也可以刪除所有檔案。
oci os object-lifecycle-policy put --bucket-name <bucket_name> --items '[
{
...
"objectNameFilter": {
"exclusionPatterns": [
<some_pattern>
],
"inclusionPatterns": [],
"inclusionPrefixes": []
},
...
}
]'
例如,下列 OCI CLI 命令會建立 / 更新生命週期規則,此規則將刪除 .txt 檔案類型以外的所有物件。
oci os object-lifecycle-policy put --bucket-name test-bucket-1 --items '[
{
"action": "DELETE",
"isEnabled": true,
"name": "lifecycle-rule-delete-all",
"objectNameFilter": {
"exclusionPatterns": [
"*.txt"
],
"inclusionPatterns": [],
"inclusionPrefixes": []
},
"target": "objects",
"timeAmount": 10,
"timeUnit": "DAYS"
}
]'
相關連結
致謝
- 作者 - Raymond Lin (軟體工程師)
其他學習資源
探索 docs.oracle.com/learn 上的其他實驗室,或存取 Oracle Learning YouTube 通道上的更多免費學習內容。此外,請造訪 education.oracle.com/learning-explorer 以成為 Oracle Learning Explorer。
如需產品文件,請瀏覽 Oracle Help Center 。
Delete objects in bulk/batch from Object Storage
F74479-01
November 2022
Copyright © 2022, Oracle and/or its affiliates.