織夢網(wǎng)站+當前位置限制寬度市場調(diào)研的內(nèi)容
OceanBase 回收站機制詳解
在 OceanBase 數(shù)據(jù)庫中,回收站機制用于在執(zhí)行 DROP
或 TRUNCATE
等操作后,臨時保存被刪除的對象,以便在需要時進行恢復。以下是對回收站機制的詳細說明:
1. 不同租戶對回收站的訪問權(quán)限
SYS 租戶
- 權(quán)限范圍:除了管理自身的數(shù)據(jù)庫、表和索引的回收站對象外,還可以查看和管理系統(tǒng)內(nèi)所有租戶的回收站對象。
- 主要職責:負責整個系統(tǒng)的回收站管理,包括清理和恢復所有租戶的回收站對象。
MySQL 模式的用戶租戶
- 權(quán)限范圍:可以查看和管理其所屬租戶的數(shù)據(jù)庫、表和索引的回收站對象。
- 管理對象:數(shù)據(jù)庫(Database)、表(Table)、索引(Index)。
Oracle 模式的用戶租戶
- 權(quán)限范圍:只能查看和管理其所屬租戶的表和索引的回收站對象。
- 管理對象:表(Table)、索引(Index)。
- 注意事項:無法查看和管理數(shù)據(jù)庫級別的回收站對象。
2. 回收站的啟用與關(guān)閉
系統(tǒng)變量
在 OceanBase 中,有兩個與回收站相關(guān)的系統(tǒng)變量,用于控制回收站的功能:
-
recyclebin
- 作用:控制回收站功能的開啟或關(guān)閉。
- 默認值:
OFF
,表示默認情況下回收站功能關(guān)閉。 - 設置方法:
- Global 級別(全局):
SET GLOBAL recyclebin = ON;
- Session 級別(會話):
SET SESSION recyclebin = ON;
- Global 級別(全局):
-
ob_enable_truncate_flashback
- 作用:控制
TRUNCATE TABLE
操作是否將對象放入回收站。 - 默認值:
OFF
,表示默認情況下TRUNCATE TABLE
不會將對象放入回收站。 - 設置方法:
- Global 級別:
SET GLOBAL ob_enable_truncate_flashback = ON;
- Session 級別:
SET SESSION ob_enable_truncate_flashback = ON;
- Global 級別:
- 作用:控制
啟用與關(guān)閉示例
-- 全局啟用回收站功能
SET GLOBAL recyclebin = ON;-- 會話級別啟用 TRUNCATE TABLE 放入回收站
SET SESSION ob_enable_truncate_flashback = ON;
3. 對象進入回收站的條件
-
進入回收站的操作:
DROP
操作:當執(zhí)行DROP TABLE
、DROP INDEX
、DROP DATABASE
等操作時,根據(jù)回收站設置,相關(guān)對象可能進入回收站。TRUNCATE TABLE
操作:- 默認行為:由于
ob_enable_truncate_flashback
默認值為OFF
,TRUNCATE TABLE
操作不會將表放入回收站。 - 啟用后:當
ob_enable_truncate_flashback
設置為ON
,執(zhí)行TRUNCATE TABLE
操作的表將進入回收站。
- 默認行為:由于
-
對象類型:
- 表(Table):
- DROP 操作:刪除的表會進入回收站(
recyclebin
為ON
時)。 - TRUNCATE 操作:需要將
ob_enable_truncate_flashback
設置為ON
,表才會進入回收站。
- DROP 操作:刪除的表會進入回收站(
- 索引(Index):
- 直接刪除:執(zhí)行
DROP INDEX
,索引不會進入回收站。 - 關(guān)聯(lián)刪除:刪除表時,表上的索引會隨主表一起進入回收站。
- 直接刪除:執(zhí)行
- 數(shù)據(jù)庫(Database)(僅限 MySQL 模式):
- 刪除的數(shù)據(jù)庫會進入回收站(
recyclebin
為ON
時)。
- 刪除的數(shù)據(jù)庫會進入回收站(
- 表(Table):
4. 回收站對象的限制
- 無法進行的操作:
- 查詢和 DML 操作:不能對回收站中的對象執(zhí)行查詢、插入、更新或刪除等操作。
- 允許的操作:
- DDL 操作:僅限于
PURGE
(清除)和FLASHBACK
(恢復)命令。
- DDL 操作:僅限于
5. 清理回收站
- 清理方式:
- 指定對象清理:可以清理特定的索引、表或數(shù)據(jù)庫。
- 整體清理:可以清空整個回收站。
- 清理命令:
- 清理特定表:
PURGE TABLE table_name;
- 清理特定索引:
PURGE INDEX index_name;
- 清理數(shù)據(jù)庫(僅 MySQL 模式):
PURGE DATABASE database_name;
- 清空回收站:
PURGE RECYCLEBIN;
- 清理特定表:
6. 不同模式下的回收站管理
模式 | 索引(Index) | 表(Table) | 數(shù)據(jù)庫(Database) | 租戶(Tenant) |
---|---|---|---|---|
MySQL | 支持 | 支持 | 支持 | 支持(僅 SYS) |
Oracle | 支持 | 支持 | 不支持 | 不支持 |
- 說明:
- MySQL 模式:支持清理和恢復索引、表和數(shù)據(jù)庫對象。
- Oracle 模式:僅支持清理和恢復索引和表對象,不支持數(shù)據(jù)庫級別的操作。
7. 回收站對象的管理注意事項
- 索引的特殊處理:
- 直接刪除:使用
DROP INDEX
刪除的索引不會進入回收站。 - 隨表刪除:刪除表時,表上的索引會一同進入回收站。
- 直接刪除:使用
- 操作限制:
- 查詢和 DML 禁止:無法對回收站中的對象執(zhí)行查詢或數(shù)據(jù)操作。
- DDL 操作限制:只能執(zhí)行
PURGE
和FLASHBACK
命令。
- 管理權(quán)限:
- SYS 租戶:可以管理所有租戶的回收站對象。
- 普通租戶:只能管理自身租戶的回收站對象。
8. 使用 FLASHBACK 命令恢復對象
- 功能:恢復回收站中的數(shù)據(jù)庫和表對象。
- 權(quán)限要求:只有租戶的管理員用戶才能執(zhí)行
FLASHBACK
命令。 - 恢復規(guī)則:
- 名稱沖突:恢復時可以指定新名稱,避免與現(xiàn)有對象重名。
- 恢復范圍:
- MySQL 模式:可以恢復數(shù)據(jù)庫、表和索引(索引隨表恢復)。
- Oracle 模式:只能恢復表和索引(索引隨表恢復),不能恢復數(shù)據(jù)庫。
- 索引恢復:恢復表時,其關(guān)聯(lián)的索引會自動恢復,不能單獨恢復索引。
FLASHBACK 命令的使用限制
- 恢復順序:
- 必須遵循對象的從屬關(guān)系,先恢復數(shù)據(jù)庫,再恢復表。
- 示例:
-- 恢復數(shù)據(jù)庫 FLASHBACK DATABASE database_name TO BEFORE DROP;-- 恢復表 FLASHBACK TABLE table_name TO BEFORE DROP;
- 索引恢復:
- 無法單獨恢復索引。
- 恢復表時,表上的索引會隨之恢復。
- 表組關(guān)系:
- 表組未刪除:如果表進入回收站前所屬的表組未被刪除,恢復后表仍屬于該表組。
- 表組已刪除:如果表組已被刪除,恢復表后將不再隸屬于任何表組。
9. 注意事項
- 命名注意:
- 恢復對象時,指定的新名稱不能與現(xiàn)有對象重名。
- 權(quán)限控制:
- 普通用戶只能操作自己權(quán)限范圍內(nèi)的回收站對象。
- SYS 租戶具有最高權(quán)限,可管理所有回收站對象。
- 空間占用:
- 回收站中的對象占用存儲空間,建議定期清理不需要的對象。
10. 示例操作
恢復表
-- 恢復已刪除的表
FLASHBACK TABLE table_name TO BEFORE DROP;-- 恢復已刪除的表并重命名
FLASHBACK TABLE table_name TO BEFORE DROP RENAME TO new_table_name;
清理回收站
-- 清理特定的索引
PURGE INDEX index_name;-- 清理特定的表
PURGE TABLE table_name;-- 清理整個回收站
PURGE RECYCLEBIN;
11. 回收站功能的配置與影響
recyclebin
系統(tǒng)變量
- 控制回收站功能的開啟或關(guān)閉。
- 默認值:
OFF
,表示回收站功能默認關(guān)閉。 - 影響范圍:
- 當
recyclebin
設置為OFF
時,執(zhí)行DROP
操作的對象不會進入回收站,直接被刪除。 - 設置為
ON
后,執(zhí)行DROP
操作的對象將進入回收站,可供恢復。
- 當
ob_enable_truncate_flashback
系統(tǒng)變量
- 控制
TRUNCATE TABLE
操作是否將表放入回收站。 - 默認值:
OFF
,表示默認情況下,TRUNCATE TABLE
操作不會將表放入回收站,表數(shù)據(jù)直接被清空且無法恢復。 - 影響范圍:
- 當
ob_enable_truncate_flashback
設置為ON
時,TRUNCATE TABLE
操作的表將進入回收站,可以使用FLASHBACK
命令進行恢復。
- 當
配置示例
-- 全局啟用回收站功能和 TRUNCATE TABLE 的閃回
SET GLOBAL recyclebin = ON;
SET GLOBAL ob_enable_truncate_flashback = ON;-- 會話級別設置
SET SESSION recyclebin = ON;
SET SESSION ob_enable_truncate_flashback = ON;
注意事項
-
性能影響:
- 啟用回收站功能可能會增加系統(tǒng)的存儲開銷,因為被刪除的對象會占用存儲空間。
- 頻繁的
DROP
和TRUNCATE
操作建議定期清理回收站,以釋放空間。
-
數(shù)據(jù)安全性:
- 在關(guān)鍵業(yè)務場景下,建議開啟回收站功能,防止誤操作導致的數(shù)據(jù)丟失。
12. 總結(jié)
通過合理配置 recyclebin
和 ob_enable_truncate_flashback
系統(tǒng)變量,可以靈活控制回收站的行為,滿足不同業(yè)務場景的需求。
-
啟用回收站:
- 防止誤刪除操作帶來的數(shù)據(jù)丟失。
- 提供數(shù)據(jù)恢復的可能性。
-
關(guān)閉回收站:
- 減少存儲空間的占用。
- 提高系統(tǒng)的刪除效率。
記住在執(zhí)行 FLASHBACK
和 PURGE
等操作時,要遵循對象的從屬關(guān)系和權(quán)限要求,確保數(shù)據(jù)庫的穩(wěn)定和安全。