【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 ...
随机推荐
- VS2015 、VS2017 MFC输出日志到控制台窗口
原来使用VS2010建立的项目,安装VS2017后,发现MFC无法通过调试窗口输出printf打印的内容,在CSDN上找到了一个解决方案,使用后恢复打印调试信息功能,推荐如下: https://blo ...
- 【workerman】uniapp+thinkPHP5使用GatewayWorker实现实时通讯
前言 之前公司需要一个内部的通讯软件,就叫我做一个.通讯软件嘛,就离不开通讯了,然后我就想到了长连接.这里本人用的是GatewayWorker框架. 什么是GatewayWorker框架? Gatew ...
- 在SelfHost项目中获取客户端IP地址
在SelfHost项目中,获取客户端的IP地址比OwinSelfHost项目要复杂一些,可以通过以下方法获得: base.Request.Properties["System.Service ...
- 在OwinSelfHost项目中获取客户端IP地址
在OwinSelfHost项目中,获取客户端的IP地址可以通过以下方法获得: base.Request.GetOwinContext().Request.RemoteIpAddress 创建一个Owi ...
- FFmpeg开发笔记(三十五)Windows环境给FFmpeg集成libsrt
<FFmpeg开发实战:从零基础到短视频上线>一书的"10.2 FFmpeg推流和拉流"提到直播行业存在RTSP和RTMP两种常见的流媒体协议.除此以外,还有比较两 ...
- Odoo17.0 基于企业微信的备用金和费用报销
前面讲过了企业微信的基础应用,现在我们来看一下如何借助企业微信的审批端能力结合odoo来实现企业中的两大常规业务流程备用金和费用报销. 企业微信端设置 我们这里使用的是企业微信的原生审批流程,因此我们 ...
- 1. C++ 开发环境
C++ 开发环境 Visual C++ / GCC(G++) / Clang(Clang++) 集成开发环境:Visual Studio / CodeLite / Code::blocks / CLi ...
- Web1.0、Web2.0 和 Web3.0 的区别
Web1.0.Web2.0 和 Web3.0 的区别主要体现在以下几个关键方面: 内容创作与交互: Web1.0:内容主要由网站所有者或少数专业人员创建,用户大多只是被动接收信息.例如,早期的雅虎.新 ...
- Flink 架构学习总结
Flink是一个分布式系统,要求有效地分配和管理计算资源以执行流式应用程序.它集成了所有常见的集群资源管理器,如Hadoop YARN和Kubernetes,但也可以设置为作为standalone甚至 ...
- VSCode的安装
VSCode(visual studio code),是一款功能强大且易用的编辑器.支持JavaScript.Node.js,也提供其他语言如(C ++,C#,Python,PHP,Go)的扩展插件. ...