【YashanDB数据库】Yashandb表闪回业务表实践
数据误删除
DELETE 操作闪回
示例(HEAP表)
基于闪回查询(建议):
select * from sales.branches1;
BRANCH_NO BRANCH_NAME AREA_NO ADDRESS EMPLOYEE_COUNT
--------- ---------------------------------------------------------------- ------- ---------------------------------------------------------------- --------------
0001 深圳 40
0101 上海 01 上海市静安区
0102 南京 01 City of Nanjing 70
0103 福州 01
0104 厦门 01 Xiamen
0401 北京 04
0402 天津 04 10
0403 大连 04 大连市 30
0404 沈阳 04
0201 成都 02
0501 武汉 30
0405 贵州 04 Guizhou
12 rows fetched.
delete sales.branches1 where BRANCH_NO = '0405' and BRANCH_NAME ='贵州';
commit;
SQL> SQL> select systimestamp from dual;
SYSTIMESTAMP
----------------------------------------------------------------
2024-05-11 14:03:11.193397
1 row fetched.
insert into sales.branches1 values('0406','江西',4,'JiangXi',50);
commit;
SQL> select systimestamp from dual;
SYSTIMESTAMP
----------------------------------------------------------------
2024-05-11 14:04:46.152775
SQL> select * from sales.branches1 as of TIMESTAMP TIMESTAMP('2024-05-11 14:03:00.00000');
BRANCH_NO BRANCH_NAME AREA_NO ADDRESS EMPLOYEE_COUNT
--------- ---------------------------------------------------------------- ------- ---------------------------------------------------------------- --------------
0001 深圳 40
0101 上海 01 上海市静安区
0102 南京 01 City of Nanjing 70
0103 福州 01
0104 厦门 01 Xiamen
0401 北京 04
0402 天津 04 10
0403 大连 04 大连市 30
0404 沈阳 04
0201 成都 02
0501 武汉 30
0405 贵州 04 Guizhou
12 rows fetched.
create table sales.branches1_1403 as select * from sales.branches1 as of TIMESTAMP TIMESTAMP('2024-05-11 14:03:00.00000');
Succeed.
SQL> select * from sales.branches1_1403;
BRANCH_NO BRANCH_NAME AREA_NO ADDRESS EMPLOYEE_COUNT
--------- ---------------------------------------------------------------- ------- ---------------------------------------------------------------- --------------
0001 深圳 40
0101 上海 01 上海市静安区
0102 南京 01 City of Nanjing 70
0103 福州 01
0104 厦门 01 Xiamen
0401 北京 04
0402 天津 04 10
0403 大连 04 大连市 30
0404 沈阳 04
0201 成都 02
0501 武汉 30
0405 贵州 04 Guizhou
12 rows fetched.
create table sales.branches1_1405 as select * from sales.branches1 as of TIMESTAMP TIMESTAMP('2024-05-11 14:05:00.00000');
SQL> select * from sales.branches1_1405 ;
BRANCH_NO BRANCH_NAME AREA_NO ADDRESS EMPLOYEE_COUNT
--------- ---------------------------------------------------------------- ------- ---------------------------------------------------------------- --------------
0001 深圳 40
0101 上海 01 上海市静安区
0102 南京 01 City of Nanjing 70
0103 福州 01
0104 厦门 01 Xiamen
0401 北京 04
0402 天津 04 10
0403 大连 04 大连市 30
0404 沈阳 04
0201 成都 02
0501 武汉 30
0406 江西 4 JiangXi 50
12 rows fetched.
--将需要的数据整合到业务表中
create table sales.branches_bak as select * from sales.branches1_1403;
insert into sales.branches_bak select * from sales.branches1_1405 where BRANCH_NO ='0406';
SQL> ALTER TABLE SALES.BRANCHES RENAME TO BRANCHES_ORG;
Succeed.
SQL> ALTER TABLE SALES.BRANCHES_BAK RENAME TO BRANCHES;
Succeed.
SQL> SELECT * FROM SALES.BRANCHES;
BRANCH_NO BRANCH_NAME AREA_NO ADDRESS EMPLOYEE_COUNT
--------- ---------------------------------------------------------------- ------- ---------------------------------------------------------------- --------------
0001 深圳 40
0101 上海 01 上海市静安区
0102 南京 01 City of Nanjing 70
0103 福州 01
0104 厦门 01 Xiamen
0401 北京 04
0402 天津 04 10
0403 大连 04 大连市 30
0404 沈阳 04
0201 成都 02
0501 武汉 30
0405 贵州 04 Guizhou
0406 江西 4 JiangXi 50
13 rows fetched.
基于闪回+闪回查询
SQL> SELECT * FROM SALES.BRANCHES;
BRANCH_NO BRANCH_NAME AREA_NO ADDRESS EMPLOYEE_COUNT
--------- ---------------------------------------------------------------- ------- ---------------------------------------------------------------- --------------
0001 深圳 40
0101 上海 01 上海市静安区
0102 南京 01 City of Nanjing 70
0103 福州 01
0104 厦门 01 Xiamen
0401 北京 04
0402 天津 04 10
0403 大连 04 大连市 30
0404 沈阳 04
0201 成都 02
0501 武汉 30
0405 贵州 04 Guizhou
12 rows fetched.
delete sales.branches where BRANCH_NO = '0405' and BRANCH_NAME ='贵州';
commit;
delete sales.branches where BRANCH_NO = '0405' and BRANCH_NAME ='贵州';
commit;
SQL>
1 row affected.
SQL>
Succeed.
SQL>
SQL> SELECT * FROM SALES.BRANCHES;
BRANCH_NO BRANCH_NAME AREA_NO ADDRESS EMPLOYEE_COUNT
--------- ---------------------------------------------------------------- ------- ---------------------------------------------------------------- --------------
0001 深圳 40
0101 上海 01 上海市静安区
0102 南京 01 City of Nanjing 70
0103 福州 01
0104 厦门 01 Xiamen
0401 北京 04
0402 天津 04 10
0403 大连 04 大连市 30
0404 沈阳 04
0201 成都 02
0501 武汉 30
11 rows fetched.
SQL> select systimestamp from dual;
SYSTIMESTAMP
----------------------------------------------------------------
2024-05-11 14:23:32.963164
1 row fetched.
insert into sales.branches values('0406','江西',4,'JiangXi',50);
select * from sales.branches ;
BRANCH_NO BRANCH_NAME AREA_NO ADDRESS EMPLOYEE_COUNT
--------- ---------------------------------------------------------------- ------- ---------------------------------------------------------------- --------------
0001 深圳 40
0101 上海 01 上海市静安区
0102 南京 01 City of Nanjing 70
0103 福州 01
0104 厦门 01 Xiamen
0401 北京 04
0402 天津 04 10
0403 大连 04 大连市 30
0404 沈阳 04
0201 成都 02
0501 武汉 30
0406 江西 4 JiangXi 50
12 rows fetched.
SQL> select * from sales.branches as of TIMESTAMP TIMESTAMP('2024-05-11 14:22:32.00000');
BRANCH_NO BRANCH_NAME AREA_NO ADDRESS EMPLOYEE_COUNT
--------- ---------------------------------------------------------------- ------- ---------------------------------------------------------------- --------------
0001 深圳 40
0101 上海 01 上海市静安区
0102 南京 01 City of Nanjing 70
0103 福州 01
0104 厦门 01 Xiamen
0401 北京 04
0402 天津 04 10
0403 大连 04 大连市 30
0404 沈阳 04
0201 成都 02
0501 武汉 30
0405 贵州 04 Guizhou
12 rows fetched.
FLASHBACK TABLE sales.branches TO TIMESTAMP TIMESTAMP('2024-05-11 14:22:32.00000');
CREATE TABLE SALES.branches_1430 as select * from sales.branches as of TIMESTAMP TIMESTAMP('2024-05-11 14:30:11.00000');
SQL> insert into sales.branches select * from SALES.branches_1430 where branch_no='0406';
1 row affected.
SQL> commit;
Succeed.
SQL> select * from sales.branches;
BRANCH_NO BRANCH_NAME AREA_NO ADDRESS EMPLOYEE_COUNT
--------- ---------------------------------------------------------------- ------- ---------------------------------------------------------------- --------------
0001 深圳 40
0101 上海 01 上海市静安区
0102 南京 01 City of Nanjing 70
0103 福州 01
0104 厦门 01 Xiamen
0401 北京 04
0402 天津 04 10
0403 大连 04 大连市 30
0404 沈阳 04
0201 成都 02
0501 武汉 30
0406 江西 4 JiangXi 50
0405 贵州 04 Guizhou
13 rows fetched.
DROP 操作闪回
基于闪回查询:
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$2393
ORDERS_INFO BIN$2389
EMPLOYEES BIN$2385
FINANCE_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_NAME
FROM USER_INDEXES
WHERE TABLE_NAME = 'FINANCE_INFO';
INDEX_NAME
---------------------------------
IDX_FINANCE_INFO_1
TRUNCATE 操作闪回
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_NAME
FROM USER_INDEXES
WHERE TABLE_NAME = 'PRODUCT';
INDEX_NAME
--------------------------
SYS_C_133
【YashanDB数据库】Yashandb表闪回业务表实践的更多相关文章
- Oracle表闪回功能
1.启用表闪回首先要在表上支持行移动(在数据字典中设置标识来标识该操作可能会改变行ID,即同一条数据闪回成功后主键都一样,但行ID其实已经发生变化了) SQL> alter table base ...
- 通过oracle闪回查看表中值的变更履历信息
http://www.oracle.com/technetwork/cn/articles/week1-10gdba-093837-zhs.html 得到电影而不是图片:闪回版本查询 不需要设置,立即 ...
- 恢复oracle中误删除drop掉的表 闪回的方法
恢复oracle中误删除drop掉的表 查看回收站中表 --需要在其所在用户下查询 回收站对象 select object_name,original_name,partition_name,ty ...
- oracle数据库flashback系列--闪回数据库在dataguard中的使用
很多人在学习flashback database这个oracle技术的时候,都会有一个疑问,就是如果我只有一个数据库作为生产库的话,是否有这样的业务需求导致我们要把数据库闪回到以前的时间点?以及这样做 ...
- mysql闪回工具--binlog2sql实践
DBA或开发人员,有时会误删或者误更新数据,如果是线上环境并且影响较大,就需要能快速回滚.传统恢复方法是利用备份重搭实例,再应用去除错误sql后的binlog来恢复数据.此法费时费力,甚至需要停机维护 ...
- 【oracle11g,13】表空间管理2:undo表空间管理(调优) ,闪回原理
一.undo空间原理: dml操作会产生undo数据. update时,sever process 会在databuffer 中找到该记录的buffer块,没有就从datafile中找并读入data ...
- oracle闪回表详解
--- 说明闪回数据库 --- 使用闪回表将表内容还原到过去的特定时间点 --- 从删除表中进行恢复 --- 使用闪回查询查看截止到任一时间点的数据库内容 --- 使用闪回版本查询查看某一行在一段时间 ...
- Oracle闪回表
Oracle闪回技术 场景:测试环境数据库的表数据被误删除. 解决思路:使用闪回表技术 原理 闪回技术是Oracle强大数据库备份恢复机制的一部分,在数据库发生逻辑错误的时候,闪回技术能提供快速且最小 ...
- 利用oracle数据库闪回功能将oracle数据库按时间点恢复
oracle更新脚本把原数据冲了,并且没有备份,急煞我也 解决办法: oracle数据库有闪回功能: select * from tab 可以查出已被删除的表 ...
- [Oracle19C 数据库管理] 管理回滚表空间(UNDO Tablespace)
当对数据进行修改时,Oracle数据库会将旧的数据存储到UNDO表空间(回滚表空间).回滚表空间让用户可以rollback到修改前的数据,提供了读一致性,并支持闪回查询过去的数据.Undo也用来在Tr ...
随机推荐
- 六.黑马程序员-eclipse的使用和快捷键
1.Eclipse的概述 A: 是一个集成开发工具,专门针对java的 B: Eclipse 免费的 开源 C: MyEclipse 收费的 具体良好的插件扩展功能,针对插件收费2.Eclipse的使 ...
- 全网最适合入门的面向对象编程教程:11 类和对象的Python实现-子类调用父类方法-模拟串口传感器和主机
全网最适合入门的面向对象编程教程:11 类和对象的 Python 实现-子类调用父类方法-模拟串口传感器和主机 摘要: 本节课,我们主要讲解了在 Python 类的继承中子类如何进行初始化.调用父类的 ...
- 让摄像头带上智慧“智驭视界·AIEye”
接上一篇<物联网浏览器(IoTBrowser)-基于计算机视觉开发的应用"智慧眼AIEye">,经过AI的包装很高级,确实很屌炸天. 智驭视界·AIEye 在科技赋能的 ...
- Vue3中如何使用this
vue3提供了getCurrentInstance ,通过这个属性,直接使用ctx是错误的,需要找到全局属性globalProperties import { getCurrentInstance } ...
- Django--StreamingHttpResponse下载文件
from django.shortcuts import render, HttpResponse from django.http import StreamingHttpResponse impo ...
- Python 结合opencv实现图片截取和拼接
实践环境 python 3.6.2 scikit-build-0.16.7 win10 opencv_python-4.5.4.60-cp36-cp36m-win_amd64.whl 下载地址: ht ...
- 是否可以在线创建ios证书
生成苹果证书,假如使用官方的教程去生成,非常麻烦,因为它需要使用苹果mac电脑去生成,而且生成的流程还要对苹果电脑的证书导入和导出比较熟. 因此,生成苹果ios证书,不建议使用官方的方法去生成,少走弯 ...
- 免费正版 IntelliJ IDEA license 详细指南
一.前言 IntelliJ IDEA 一直是我非常喜欢的 IDE 自从用上之后就回不了头了,但是 Ultimate 版本的费用十分昂贵,其实 JetBrains 自己就提供了6种免费申请授权的方式:本 ...
- 内存溢出+CPU占用过高:问题排查+解决方案+复盘(超详细分析教程)
内存溢出+CPU占用过高:问题排查+解决方案+复盘(超详细分析教程) 原文地址 https://zhanghan.blog.csdn.net/article/details/109255980 前言 ...
- .NET 结果与错误处理利器 FluentResults
前言 在项目开发中,方法返回的结果(成功或失败)对我们开发来说很重要.传统方法,如通过异常来指示错误或使用特定的返回类型(如布尔值加输出参数),虽然有效,但可能缺乏直观性和灵活性. FluentRes ...