【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 ...
随机推荐
- Notepad++ 搭建简单Java编译运行环境
简介 有时候使用Eclips进行Java相关方法的测试和验证太繁琐,经过查询实践,使用了Notepad++和JDK搭建了一个简单的编译运行环境. 搭建过程 在电脑上安装Java环境(网上教程很多,此过 ...
- 解码技术债:AI代码助手与智能体的革新之道
技术债 技术债可能来源于多种原因,比如时间压力.资源限制.技术选型不当等.它可以表现为代码中的临时性修补.未能彻底解决的设计问题.缺乏文档或测试覆盖等.虽然技术债可以帮助快速推进项目进度,但长期来看, ...
- Linux开发人员常用命令
常用查询命令 # 查看ip地址 ip addr show # 查看当前目录路径 pwd # 当前目录下模糊查找文件 find / -name "*.pdf" 查看运行中进程 ps ...
- 设置Docker容器里的时间
启动容器时,添加环境变量 docer run -e TZ=Asia/Shanghai --rm myalpine date -e TZ=Asia/Shanghai
- 全网最适合入门的面向对象编程教程:14 类和对象的 Python 实现-类的静态方法和类方法,你分得清吗?
全网最适合入门的面向对象编程教程:14 类和对象的 Python 实现-类的静态方法和类方法,你分得清吗? 摘要: 本文主要介绍了Python中类和对象中的类方法和静态方法,以及类方法和静态方法的定义 ...
- 介绍几款强大实用的 IDEA 插件,助力大家开发【工欲善其事必先利其器】
俗话说:"工欲善其事必先利其器",本问介绍几款强大实用的 IDEA 插件,助力大家开发. 希望大家做一个聪明又努力的人,而不只是一个努力的人. Alibaba Java Codin ...
- 推荐王牌远程桌面软件Getscreen,所有的远程桌面软件中使用最简单的一个
今天要推荐的远程桌面软件就是这款叫Getscreen的,推荐理由挺简单: 简单易用:只需要两步就能轻松连上远程桌面 第一步:在需要被远程连接的机器上下载它的Agent程序并启动,点击Send获得一个链 ...
- TypeScript 学习笔记 — 接口的使用(六)
目录 一.函数接口参数 二.函数类型接口 三.函数混合类型 四.对象接口(最常用) 确定属性 可选属性 任意属性 只读属性 可索引接口 索引访问符 类接口 接口继承 构造函数类型 type 和 int ...
- Display、Visibility 和 Opacity 的区别
<style> .d1{ display: none; } .d2{ visibility: visible; } .d3{ opacity: 0; } </style> &l ...
- [oeasy]python0104_指示灯_显示_LED_辉光管_霓虹灯
编码进化 回忆上次内容 x86.arm.riscv等基础架构 都是二进制的 包括各种数据.指令 但是我们接触到的东西 都是屏幕显示出来的字符 计算机 显示出来的 一个个具体的字型 ...