ITPub博客

首页 > 数据库 > 国内数据库 > YashanDB表的闪回

YashanDB表的闪回

国内数据库 作者:崖山数据库系统YashanDB 时间:2025-03-17 18:35:16 0 删除 编辑

闪回恢复

若较短时间内发现由于操作不当等原因误删了表数据,可以使用闪回功能及时将数据恢复至指定时间点(无需还原备份),更多详情可查阅 FLASHBACK。

闪回恢复需满足以下条件:

  • 执行闪回恢复操作需使用具备DBA权限或FLASHBACK相关权限的用户。
  • 在当前时间点至目标闪回时间点期间,表的结构未发生变化。
  • 可闪回恢复的时间点由撤销保持期(UNDO_RETENTION)决定,建议将该参数设置为86400秒(24小时)或更长。
  • 需闪回恢复的表对象为HEAP表。
  • 通过时间戳或SCN闪回恢复前需手动开启表的ROW MOVEMENT,且闪回恢复后的数据可能会改变rowid,请确保应用程序不依赖于rowid才能执行闪回恢复。
  • 对于被drop的表,需确保历史数据仍然存放在回收站中才能将该表(包括表结构和数据)闪回恢复。
    • drop前已开启回收站。
    • drop表时,未指定purge语句。
    • 当前时间点至目标闪回时间点期间,未对回收站执行purge。
    • drop表时,表空间未满。
  • 对于被truncate的表,需确保历史数据仍然存放在回收站中才能将该表数据(包括truncate表或truncate分区)闪回恢复。若当前时间点与truncate时间点期间表格已插入新数据,执行闪回恢复后该类新数据将会被放入回收站中。
    • truncate前已开启回收站。
    • 当前时间点至目标闪回时间点期间,未对回收站执行purge。
    • truncate表时,表空间未满。

delete操作闪回

示例(HEAP表)

-- 开启finance_info的ROW MOVEMENT开关ALTER TABLE finance_info ENABLE ROW MOVEMENT;-- finance_info表中存在的一条记录SELECT year,month,branch,revenue_total,cost_total,fee_total FROM finance_info WHERE year='2021' AND month='02';YEAR  MONTH BRANCH REVENUE_TOTAL  COST_TOTAL   FEE_TOTAL----- ----- ------ ------------- ----------- -----------2021  02    0101           37778       33000        6000   
 -- 获取当前时间戳SELECT SYSTIMESTAMP res FROM dual;RES                                           
-----------------------------------------------2023-12-17 14:10:28.736908   -- 删除此条记录并提交DELETE FROM finance_info WHERE year='2021' AND month='02';COMMIT;SELECT year,month,branch,revenue_total,cost_total,fee_total FROM finance_info WHERE year='2021' AND month='02';YEAR  MONTH BRANCH REVENUE_TOTAL  COST_TOTAL   FEE_TOTAL----- ----- ------ ------------- ----------- -----------
 -- 利用FLASHBACK闪回历史数据(通过时间戳闪回)FLASHBACK TABLE finance_info TO TIMESTAMP  TIMESTAMP('2023-12-17 14:10:28.736908');SELECT year,month,branch,revenue_total,cost_total,fee_total FROM finance_info WHERE year='2021' AND month='02';YEAR  MONTH BRANCH REVENUE_TOTAL  COST_TOTAL   FEE_TOTAL----- ----- ------ ------------- ----------- -----------2021  02    0101           37778       33000        6000   -- 获取最后一次修改时SCN(通过ROWSCN获取)SELECT rowscn FROM finance_info WHERE year='2021' AND month='02';
               ROWSCN 
--------------------- 
   408883147271815168-- 再次删除记录DELETE FROM finance_info WHERE year='2021' AND month='02';COMMIT;SELECT year,month,branch,revenue_total,cost_total,fee_total FROM finance_info WHERE year='2021' AND month='02';YEAR  MONTH BRANCH REVENUE_TOTAL  COST_TOTAL   FEE_TOTAL----- ----- ------ ------------- ----------- ------------- 利用FLASHBACK闪回历史数据(通过SCN闪回)FLASHBACK TABLE finance_info TO SCN 408883147271815168;SELECT year,month,branch,revenue_total,cost_total,fee_total FROM finance_info WHERE year='2021' AND month='02';YEAR  MONTH BRANCH REVENUE_TOTAL  COST_TOTAL   FEE_TOTAL----- ----- ------ ------------- ----------- -----------2021  02    0101           37778       33000        6000
Copied!

drop操作闪回

示例(HEAP表)

ALTER SYSTEM SET RECYCLEBIN_ENABLED=ON;DROP TABLE finance_info;DROP TABLE orders_info;DROP TABLE sales_info;DROP TABLE employees;-- 1.查询回收站是否存在finance_info表SELECT original_name,object_name FROM DBA_RECYCLEBIN 
WHERE original_name IN ('FINANCE_INFO','ORDERS_INFO','SALES_INFO','EMPLOYEES');ORIGINAL_NAME                 OBJECT_NAME----------------------------- -----------------------SALES_INFO                    BIN$2393ORDERS_INFO                   BIN$2389EMPLOYEES                     BIN$2385FINANCE_INFO                  BIN$2408-- 2.表结构及表数据闪回FLASHBACK TABLE "BIN$2393" TO BEFORE DROP;-- 或使用表的原始名称进行闪回FLASHBACK TABLE finance_info TO BEFORE DROP;-- 或通过RENAME TO命令指定表的新名称FLASHBACK TABLE employees TO BEFORE DROP RENAME TO employees_recycle;-- 3.验证相关对象是否保留系统生成的回收站名称,若名称未恢复,请使用ALTER INDEX语句手动修改SELECT INDEX_NAMEFROM USER_INDEXESWHERE TABLE_NAME = 'FINANCE_INFO';INDEX_NAME---------------------------------IDX_FINANCE_INFO_1
Copied!

truncate操作闪回

示例(HEAP表)

ALTER SYSTEM SET RECYCLEBIN_ENABLED=ON;TRUNCATE TABLE product;-- 1.查询回收站是否存在product表SELECT original_name,object_name FROM DBA_RECYCLEBIN WHERE original_name = 'PRODUCT';ORIGINAL_NAME                 OBJECT_NAME----------------------------- -----------------------PRODUCT                       PRODUCT-- 2.表数据闪回FLASHBACK TABLE product TO BEFORE TRUNCATE;-- 3.验证相关对象是否保留系统生成的回收站名称,若名称未恢复,请使用ALTER INDEX语句手动修改SELECT INDEX_NAMEFROM USER_INDEXESWHERE TABLE_NAME = 'PRODUCT';INDEX_NAME--------------------------SYS_C_133
Copied!

#闪回查询

表数据被UPDATE或DELETE更改后,可以通过闪回查询功能追溯到近期的历史数据,更多详情可查阅SELECT的 flashback_query_clause。

可闪回查询的时间点由撤销保持期(UNDO_RETENTION)决定,建议将该参数设置为86400秒(24小时)或更长。

闪回查询不适用于分布式部署。

示例(单机、共享集群部署)

--area表中存在的一条记录SELECT area_no,area_name,DHQ FROM area WHERE area_no='03';AREA_NO AREA_NAME          DHQ         
------- ------------------ ------------03      华南             Guangzhou       
 
--获取当前时间SELECT SYSTIMESTAMP res FROM dual;RES                                            
----------------------------------------------------------------2023-12-17 14:14:08.498126     
 --删除此条记录并提交DELETE FROM area WHERE area_no='03';COMMIT;SELECT area_no,area_name,DHQ FROM area WHERE area_no='03';AREA_NO AREA_NAME          DHQ         
------- ------------------ ------------
 
 --利用flashback可查询到快照历史数据SELECT area_no,area_name,DHQ FROM area AS OF TIMESTAMP TIMESTAMP('2023-12-17 14:14:08.498126')WHERE area_no='03';AREA_NO AREA_NAME          DHQ         
------- ------------------ ------------03      华南             Guangzhou


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70028812/viewspace-3077893/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
崖山数据库系统YashanDB是深圳计算科学研究院完全自主研发设计的新型数据库系统,融入原创理论,支持单机/主备、共享集群、分布式等多种部署方式,覆盖OLTP/HTAP/OLAP交易和分析混合负载场景,为客户提供一站式的企业级融合数据管理解决方案。

注册时间:2023-04-11

  • 博文量
    722
  • 访问量
    640225