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
等操作时,要遵循对象的从属关系和权限要求,确保数据库的稳定和安全。