OceanBase 回收站机制详解
在 OceanBase 数据库中,回收站机制用于在执行 DROP 或 TRUNCATE 等操作后,临时保存被删除的对象,以便在需要时进行恢复。以下是对回收站机制的详细说明:
1. 不同租户对回收站的访问权限
SYS 租户
- 权限范围:除了管理自身的数据库、表和索引的回收站对象外,还可以查看和管理系统内所有租户的回收站对象。
- 主要职责:负责整个系统的回收站管理,包括清理和恢复所有租户的回收站对象。
MySQL 模式的用户租户
- 权限范围:可以查看和管理其所属租户的数据库、表和索引的回收站对象。
- 管理对象:数据库(Database)、表(Table)、索引(Index)。
Oracle 模式的用户租户
- 权限范围:只能查看和管理其所属租户的表和索引的回收站对象。
- 管理对象:表(Table)、索引(Index)。
- 注意事项:无法查看和管理数据库级别的回收站对象。
2. 回收站的启用与关闭
系统变量
在 OceanBase 中,有两个与回收站相关的系统变量,用于控制回收站的功能:
-  recyclebin- 作用:控制回收站功能的开启或关闭。
- 默认值:OFF,表示默认情况下回收站功能关闭。
- 设置方法: - 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 级别:
 
- 作用:控制 
启用与关闭示例
-- 全局启用回收站功能
SET GLOBAL recyclebin = ON;-- 会话级别启用 TRUNCATE TABLE 放入回收站
SET SESSION ob_enable_truncate_flashback = ON;
3. 对象进入回收站的条件
-  进入回收站的操作: - DROP操作:当执行- DROP TABLE、- DROP INDEX、- DROP DATABASE等操作时,根据回收站设置,相关对象可能进入回收站。
- TRUNCATE TABLE操作:- 默认行为:由于 ob_enable_truncate_flashback默认值为OFF,TRUNCATE TABLE操作不会将表放入回收站。
- 启用后:当 ob_enable_truncate_flashback设置为ON,执行TRUNCATE TABLE操作的表将进入回收站。
 
- 默认行为:由于 
 
-  对象类型: - 表(Table): - DROP 操作:删除的表会进入回收站(recyclebin为ON时)。
- TRUNCATE 操作:需要将 ob_enable_truncate_flashback设置为ON,表才会进入回收站。
 
- DROP 操作:删除的表会进入回收站(
- 索引(Index): - 直接删除:执行 DROP INDEX,索引不会进入回收站。
- 关联删除:删除表时,表上的索引会随主表一起进入回收站。
 
- 直接删除:执行 
- 数据库(Database)(仅限 MySQL 模式): - 删除的数据库会进入回收站(recyclebin为ON时)。
 
- 删除的数据库会进入回收站(
 
- 表(Table): 
4. 回收站对象的限制
- 无法进行的操作: - 查询和 DML 操作:不能对回收站中的对象执行查询、插入、更新或删除等操作。
 
- 允许的操作: - DDL 操作:仅限于 PURGE(清除)和FLASHBACK(恢复)命令。
 
- DDL 操作:仅限于 
5. 清理回收站
- 清理方式: - 指定对象清理:可以清理特定的索引、表或数据库。
- 整体清理:可以清空整个回收站。
 
- 清理命令: - 清理特定表:PURGE TABLE table_name;
- 清理特定索引:PURGE INDEX index_name;
- 清理数据库(仅 MySQL 模式):PURGE DATABASE database_name;
- 清空回收站:PURGE RECYCLEBIN;
 
- 清理特定表:
6. 不同模式下的回收站管理
| 模式 | 索引(Index) | 表(Table) | 数据库(Database) | 租户(Tenant) | 
|---|---|---|---|---|
| MySQL | 支持 | 支持 | 支持 | 支持(仅 SYS) | 
| Oracle | 支持 | 支持 | 不支持 | 不支持 | 
- 说明: - MySQL 模式:支持清理和恢复索引、表和数据库对象。
- Oracle 模式:仅支持清理和恢复索引和表对象,不支持数据库级别的操作。
 
7. 回收站对象的管理注意事项
- 索引的特殊处理: - 直接删除:使用 DROP INDEX删除的索引不会进入回收站。
- 随表删除:删除表时,表上的索引会一同进入回收站。
 
- 直接删除:使用 
- 操作限制: - 查询和 DML 禁止:无法对回收站中的对象执行查询或数据操作。
- DDL 操作限制:只能执行 PURGE和FLASHBACK命令。
 
- 管理权限: - SYS 租户:可以管理所有租户的回收站对象。
- 普通租户:只能管理自身租户的回收站对象。
 
8. 使用 FLASHBACK 命令恢复对象
- 功能:恢复回收站中的数据库和表对象。
- 权限要求:只有租户的管理员用户才能执行 FLASHBACK命令。
- 恢复规则: - 名称冲突:恢复时可以指定新名称,避免与现有对象重名。
- 恢复范围: - MySQL 模式:可以恢复数据库、表和索引(索引随表恢复)。
- Oracle 模式:只能恢复表和索引(索引随表恢复),不能恢复数据库。
 
- 索引恢复:恢复表时,其关联的索引会自动恢复,不能单独恢复索引。
 
FLASHBACK 命令的使用限制
- 恢复顺序: - 必须遵循对象的从属关系,先恢复数据库,再恢复表。
- 示例:-- 恢复数据库 FLASHBACK DATABASE database_name TO BEFORE DROP;-- 恢复表 FLASHBACK TABLE table_name TO BEFORE DROP;
 
- 索引恢复: - 无法单独恢复索引。
- 恢复表时,表上的索引会随之恢复。
 
- 表组关系: - 表组未删除:如果表进入回收站前所属的表组未被删除,恢复后表仍属于该表组。
- 表组已删除:如果表组已被删除,恢复表后将不再隶属于任何表组。
 
9. 注意事项
- 命名注意: - 恢复对象时,指定的新名称不能与现有对象重名。
 
- 权限控制: - 普通用户只能操作自己权限范围内的回收站对象。
- SYS 租户具有最高权限,可管理所有回收站对象。
 
- 空间占用: - 回收站中的对象占用存储空间,建议定期清理不需要的对象。
 
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 系统变量
 
- 控制回收站功能的开启或关闭。
- 默认值:OFF,表示回收站功能默认关闭。
- 影响范围: - 当 recyclebin设置为OFF时,执行DROP操作的对象不会进入回收站,直接被删除。
- 设置为 ON后,执行DROP操作的对象将进入回收站,可供恢复。
 
- 当 
ob_enable_truncate_flashback 系统变量
 
- 控制 TRUNCATE TABLE操作是否将表放入回收站。
- 默认值:OFF,表示默认情况下,TRUNCATE TABLE操作不会将表放入回收站,表数据直接被清空且无法恢复。
- 影响范围: - 当 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;
注意事项
-  性能影响: - 启用回收站功能可能会增加系统的存储开销,因为被删除的对象会占用存储空间。
- 频繁的 DROP和TRUNCATE操作建议定期清理回收站,以释放空间。
 
-  数据安全性: - 在关键业务场景下,建议开启回收站功能,防止误操作导致的数据丢失。
 
12. 总结
通过合理配置 recyclebin 和 ob_enable_truncate_flashback 系统变量,可以灵活控制回收站的行为,满足不同业务场景的需求。
-  启用回收站: - 防止误删除操作带来的数据丢失。
- 提供数据恢复的可能性。
 
-  关闭回收站: - 减少存储空间的占用。
- 提高系统的删除效率。
 
记住在执行 FLASHBACK 和 PURGE 等操作时,要遵循对象的从属关系和权限要求,确保数据库的稳定和安全。