Bootstrap

OceanBase 回收站机制详解

OceanBase 回收站机制详解

在 OceanBase 数据库中,回收站机制用于在执行 DROPTRUNCATE 等操作后,临时保存被删除的对象,以便在需要时进行恢复。以下是对回收站机制的详细说明:

1. 不同租户对回收站的访问权限

SYS 租户

  • 权限范围:除了管理自身的数据库、表和索引的回收站对象外,还可以查看和管理系统内所有租户的回收站对象。
  • 主要职责:负责整个系统的回收站管理,包括清理和恢复所有租户的回收站对象。

MySQL 模式的用户租户

  • 权限范围:可以查看和管理其所属租户的数据库、表和索引的回收站对象。
  • 管理对象:数据库(Database)、表(Table)、索引(Index)。

Oracle 模式的用户租户

  • 权限范围:只能查看和管理其所属租户的表和索引的回收站对象。
  • 管理对象:表(Table)、索引(Index)。
  • 注意事项:无法查看和管理数据库级别的回收站对象。

2. 回收站的启用与关闭

系统变量

在 OceanBase 中,有两个与回收站相关的系统变量,用于控制回收站的功能:

  1. recyclebin

    • 作用:控制回收站功能的开启或关闭。
    • 默认值OFF,表示默认情况下回收站功能关闭。
    • 设置方法
      • Global 级别(全局)
        SET GLOBAL recyclebin = ON;
        
      • Session 级别(会话)
        SET SESSION recyclebin = ON;
        
  2. 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;
        

启用与关闭示例

-- 全局启用回收站功能
SET GLOBAL recyclebin = ON;

-- 会话级别启用 TRUNCATE TABLE 放入回收站
SET SESSION ob_enable_truncate_flashback = ON;

3. 对象进入回收站的条件

  • 进入回收站的操作

    • DROP 操作:当执行 DROP TABLEDROP INDEXDROP DATABASE 等操作时,根据回收站设置,相关对象可能进入回收站。
    • TRUNCATE TABLE 操作
      • 默认行为:由于 ob_enable_truncate_flashback 默认值为 OFFTRUNCATE TABLE 操作不会将表放入回收站。
      • 启用后:当 ob_enable_truncate_flashback 设置为 ON,执行 TRUNCATE TABLE 操作的表将进入回收站。
  • 对象类型

    • 表(Table)
      • DROP 操作:删除的表会进入回收站(recyclebinON 时)。
      • TRUNCATE 操作:需要将 ob_enable_truncate_flashback 设置为 ON,表才会进入回收站。
    • 索引(Index)
      • 直接删除:执行 DROP INDEX,索引不会进入回收站。
      • 关联删除:删除表时,表上的索引会随主表一起进入回收站。
    • 数据库(Database)(仅限 MySQL 模式):
      • 删除的数据库会进入回收站(recyclebinON 时)。

4. 回收站对象的限制

  • 无法进行的操作
    • 查询和 DML 操作:不能对回收站中的对象执行查询、插入、更新或删除等操作。
  • 允许的操作
    • DDL 操作:仅限于 PURGE(清除)和 FLASHBACK(恢复)命令。

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 操作限制:只能执行 PURGEFLASHBACK 命令。
  • 管理权限
    • 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;

注意事项

  • 性能影响

    • 启用回收站功能可能会增加系统的存储开销,因为被删除的对象会占用存储空间。
    • 频繁的 DROPTRUNCATE 操作建议定期清理回收站,以释放空间。
  • 数据安全性

    • 在关键业务场景下,建议开启回收站功能,防止误操作导致的数据丢失。

12. 总结

通过合理配置 recyclebinob_enable_truncate_flashback 系统变量,可以灵活控制回收站的行为,满足不同业务场景的需求。

  • 启用回收站

    • 防止误删除操作带来的数据丢失。
    • 提供数据恢复的可能性。
  • 关闭回收站

    • 减少存储空间的占用。
    • 提高系统的删除效率。

记住在执行 FLASHBACKPURGE 等操作时,要遵循对象的从属关系和权限要求,确保数据库的稳定和安全。

;