首页 > 数据库 >【YashanDB数据库】Yashandb表闪回业务表实践

【YashanDB数据库】Yashandb表闪回业务表实践

时间:2024-08-13 10:40:11浏览次数:10  
标签:01 YashanDB NAME 04 NO 表闪回 sales BRANCH 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

标签:01,YashanDB,NAME,04,NO,表闪回,sales,BRANCH,Yashandb
From: https://www.cnblogs.com/YashanDB/p/18356396

相关文章

  • 【YashanDB数据库】yasboot查询数据库状态时显示数据库状态为off
    【问题现象】yasbootclusterstatus-cyashandb显示数据库状态为off与数据库实际的状态不符,如下图【问题分类】yasboot、yasdb使用问题【关键字】yasboot,数据库运行状态为off【问题描述】yasboot工具显示的状态【问题原因分析】发现是备库启动数据库方式不标准,即使用noh......
  • 【YashanDB数据库】YAS-02024 lock wait timeout, wait time 0 milliseconds
    【标题】错误码处理【问题分类】锁等待超时【关键字】YAS-02024【问题描述】执行语句时候,因锁等待超时执行语句失败【问题原因分析】数据库默认锁等待时间为0秒,如果执行语句存在锁等待过长会执行失败【解决/规避方法】调整锁等待的时间altersystemsetDDL_LOCK_TIMEOUT=......
  • 【YashanDB数据库】Ubuntu系统加载Yashan C驱动后无法使用PHP
    【问题分类】驱动使用【关键字】驱动使用、PHP、Ubuntu、C驱动【问题描述】客户将YashanDB的C驱动lib加载到环境变量LD_LIBRARY_PATH后,PHP报错:PHPFatalerror:UnabletostartpcremoduleinUnknownonline0【问题原因分析】经检查,我们的yashandb的C驱动库自带libpcre2-......
  • 【YashanDB数据库】Mybatis-plus分页框架识别不到Yashandb
    问题描述Mybatis-plus无法识别Yashandb数据库,应用有如下报错。问题分析从Mybatis-plus源码里面看到,getDBtype函数是没有Yashandb的方言。当Yashandb使用mybatis-plus分页时候,会抛出异常即otherdatabasenotsupported。packagecom.baomidou.mybatisplus.extension.toolkit......
  • 【YashanDB数据库】PHP无法通过ODBC连接到数据库
    【问题分类】驱动使用【关键字】ODBC、驱动使用、PHP【问题描述】应用使用php-fpm+nginx架构,通过php的ODBC拓展连接YashanDB时出现报错:[unixODBC][DriverManager]Can'topenlib'/home/yashandb_odbc/libyas_odbc.so':filenotfound但是在应用所在的主机上使用isql连接Ya......
  • 【YashanDB数据库】由于网络带宽不足导致的jdbc向yashandb插入数据慢
    问题现象某客户环境,客户的业务使用jdbc驱动向其他操作系统上的yashandb插入90万条数据,耗时大约30分钟。问题的风险及影响影响客户的业务处理效率问题影响的版本所有的yashandb版本问题发生原因jdbc执行batchinsert时,是有绑定变量的。在准备好了PreparedStatement以后,jdbc......
  • 【YashanDB数据库】数据库运行正常,日志出现大量错误metadata changed
    问题现象客户在麒麟kylinv10sp1环境上部署YashanDB,运行正常,但是在巡检中发现run.log中有大量错误日志文件metadatachanged,需要排查原因问题单:前置机大量错误日志文件metadatachanged,需要排查原因问题的风险及影响客户环境为准生产环境,担心影响业务执行。问题影响的版本......
  • 【YashanDB数据库】VMware虚拟机使用默认安装,在掉电之后数据库无法启动
    问题现象客户使用VMware虚拟机使用默认安装,部署YashanDB个人版,在掉电之后无法启动操作系统:Virtualization:VMwareOperatingSystem:CentOSLinux7(Core)CPEOSName:cpe:/o:centos:centos:7Kernel:Linux3.10.0-1160.el7.x86_64Architecture:x86-64[yashan@localho......
  • 【YashanDB数据库】大事务回滚导致其他操作无法执行,报错YAS-02016 no free undo block
    问题现象客户将一个100G的表的数据插入到另一个表中,使用insertintoselect插入数据。从第一天下午2点开始执行,到第二天上午10点,一直未执行完毕。由于需要实施下一步操作,客户kill重启了数据库,之后数据库一直回滚中,导致后续执行其他操作都报错YAS-02016nofreeundoblocks问题......
  • 【YashanDB数据库】statement级别的触发器在jdbc接口调用executeBatch时被多次触发
    问题现象某客户使用jdbc接口向yashandb的表A插入数据。表A上有一个语句级触发器,其内容为在触发时执行altersequence操作;另外还有一个insert时的行级触发器,其内容为将每行的部分列赋给新值,这些新值要么来自sequence.nextval,要么来自于current_timestamp。客户向表A插入90万条数......