ALTER TABLE ... TRUNCATE SUBPARTITION 用於清空複合分區表中指定子分區內的全部資料,此操作會永久移除資料但保留子分區結構,執行前需確認資料不再需要或已備份。
文法介紹
ALTER TABLE table_name
TRUNCATE SUBPARTITION subpartition_name
[{DROP|REUSE} STORAGE]參數說明
參數名稱 | 參數要求 | 參數說明 | 參數樣本 |
| 必填 | 目標複合分區表的名稱。 |
|
| 必填 | 要清空的子分區的名稱。 |
|
| 選填 | 子句僅為相容 Oracle 文法而存在,會被解析但實際忽略,不影響儲存行為。 |
|
注意事項
執行此命令的使用者需是該表的所有者,或擁有對該表的
ALTER許可權。該操作會擷取
AccessExclusiveLock(表級獨佔鎖定),阻塞該表的所有 DML 和大部分 DDL 操作。建議在業務低峰期執行,並預留足夠的時間視窗。TRUNCATE SUBPARTITION是一項DDL操作,會隱式提交當前事務,一旦執行,被刪除的資料無法通過ROLLBACK復原。請在操作前完成資料備份。TRUNCATE SUBPARTITION是中繼資料操作+檔案刪除,即使億級資料也可秒級完成,I/O 和CPU/記憶體開銷極低。
使用樣本
本樣本示範如何在一個按註冊年份(RANGE)和使用者所在地區(LIST)進行複合分區的客戶表中,清空2022年度亞洲地區的使用者資料子分區。
常見問題
Q1:TRUNCATE SUBPARTITION 和 DROP SUBPARTITION 有什麼區別?
TRUNCATE SUBPARTITION僅清空子分區內的資料但保留其定義,而DROP SUBPARTITION 會將子分區定義和資料一併刪除。
Q2:執行 TRUNCATE SUBPARTITION 後,資料可以恢複嗎?
不可以,因為 TRUNCATE 是一項DDL操作,它會永久刪除資料且預設不記錄在交易記錄中,無法通過常規手段復原或閃回。
Q3:TRUNCATE SUBPARTITION 和 DELETE FROM ... SUBPARTITION 有什麼區別?
TRUNCATE SUBPARTITION 是高效的DDL操作,通過釋放資料區塊直接刪除資料且無法復原,而DELETE是逐行刪除的DML操作,會記錄日誌、可復原並觸發刪除觸發器。
Q4:執行此命令為什麼提示 ORA-02149:relation ... does not exist?
子分區名不存在或大小寫不匹配。名稱大小寫敏感,請先前置檢查確認名稱。
Q5:執行此命令為什麼提示 ORA-01031: insufficient privileges?
這是因為執行該命令的使用者不具備目標表的 ALTER 許可權,需要聯絡資料庫管理員授予相應許可權。
相關語句
ALTER TABLE…DROP SUBPARTITION:刪除子分區定義及其包含的資料。
ALTER TABLE…TRUNCATE PARTITION:清空一級分區及其下所有子分區的資料。
ALTER TABLE… ADD SUBPARTITION:為現有的一級分區添加新的子分區。
ALTER TABLE…SPLIT SUBPARTITION:將一個子分區劃分為兩個子分區。