首页 > 其他分享 >闪回表(Flashback table)运用

闪回表(Flashback table)运用

时间:2023-04-30 21:05:27浏览次数:28  
标签:闪回表 tab SQL test table Flashback flashback select


上一回演示了运用闪回表查询恢复delete删除的数据以及其原理,今天了解下闪回表。

原理:

 闪回表(Flashback table)与闪回查询(Flashback query)的原理大致相同,也是利用undo信息来恢复表对象到以前的某一个时间点(一个快照),因此也要确保AUM有足够的Retention值。但闪回表不等于闪回查询,其区别如下:

闪回查询只是查询以前的一个快照而已,并不改变当前表的状态。

闪回表则是将恢复当前表及附属对象一起回到以前的时间点。

特性:

1. 在线操作

2. 恢复到指定的时间点(或者SCN)的任何数据

3. 自动恢复相关属性

4. 满足分布式的一致性

5. 数据的一致性,所有相关对象将自动一致。

语法:

SQL> flashback table tab_test to timestamp to_timestamp('2010-06-30 22:43:07', 'yyyy-mm-dd hh24:mi:ss');

SQL> flashback table tab_test to scn 1154953;

SQL> flashback table tab_test to timestamp to_timestamp('2010-06-30 22:43:07', 'yyyy-mm-dd hh24:mi:ss') enable triggers;

运用闪回表前提

 1.普通用户中需要有Flashback any table的系统权限。命令如:

 SQL>grant flashback any table to scott;

 2.有该表的select、insert、delete、alter权限。

 3.必须保证该表有row movement(行移动)。

示例:

1.创建tab_test表

SQL> create table tab_test as select * from all_objects;

Table created

2.查询tab_test表中数据量

SQL> select count(*) from tab_test;

COUNT(*)

----------

   40699

3.为tab_test表创建索引和触发器(触发器为null,不做任何操作)

SQL> create index ind_test on tab_test(object_name);

Index created

SQL> create or replace trigger tr_test

2 after update on tab_test

3 for each row

4 begin

5     null;

7 end tr_test;

8 /

Trigger created

4.记录当时的时间点,试图恢复到该时间点

SQL> select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') time, to_char(dbms_flashback.get_system_change_number) scn from dual;

TIME               SCN

------------------- ----------------------------------------

2010-06-30 23:02:37 1160764

5.删除tab_test表中数据

SQL> delete from tab_test;

40699 rows deleted

SQL> commit;

Commit complete

6.查询删除数据后的tab_test,确定其表中已没有数据

SQL> select count(*) from tab_test;

COUNT(*)

----------

7.删除tab_test表中索引ind_test

SQL> drop index ind_test;

Index dropped

8.更改tr_test触发器

SQL> create or replace trigger tr_test

2 after insert on tab_test

3 for each row

4 begin

5     null;

7 end tr_test;

8 /

Trigger created

9.确保该表中的行迁移(row movement)功能

SQL> alter table tab_test enable row movement;

Table altered

10.恢复tab_test表到刚记录的时间点(或scn),由于表中存在触发器,因此使用了关键字enable triggers;

SQL> flashback table tab_test to timestamp to_timestamp('2010-06-30 23:02:37', 'yyyy-mm-dd hh24:mi:ss') enable triggers;

Done

11.查看恢复结果如下:

SQL> select count(*) from tab_test;
COUNT(*)
----------
   40699
SQL> select index_name from user_indexes where table_name = 'TAB_TEST';
INDEX_NAME
------------------------------
SQL> select object_name, status from user_objects where object_name in('TR_TEST', 'IND_TEST');
OBJECT_NAME                                                                     STATUS
------------------ -------
TR_TEST            VALID
SQL> set pages 0
SQL> set lines 1000
Cannot SET LINES
SQL> set long 2000
SQL> select text from user_source t where t.name = 'TR_TEST' order by line;
trigger tr_test
after insert on tab_test
for each row
begin
  null;
end tr_test;

总结:

1. Flashback table在真正的高可用环境中,使用意义不大,受限比较多,要必须确保行迁移功能

2. Flashback table过程中,阻止写操作

3. 表中数据能恢复,而表中索引确不能正常恢复

4. 恢复的触发器本身还是修改后的,并不随表flashback到修改以前的时间点。说明关键字enable triggers只能保证触发器的状态正常,而不是内容回滚.

5. 由于原理利用其undo信息,来恢复其对象,因此也是不能恢复truncate数据

6. 恢复数据用flashback query实现比较好

标签:闪回表,tab,SQL,test,table,Flashback,flashback,select
From: https://blog.51cto.com/u_548275/6238240

相关文章

  • 关于TableView中图片的延时加载
    经常我们会用tableView显示很多条目,有时候需要显示图片,但是一次从服务器上取来所有图片对用户来浪费流量,对服务器也是负担.最好是按需加载,即当该用户要浏览该条目时再去加载它的图片.重写如下方法-(void)tableView:(UITableView*)tableViewwillDisplayCell:(UITabl......
  • stable-diffusion-webui 环境设置过程记录
    今天在自己的电脑上设置成功stable-diffusion-webui的环境,现记录一下过程,希望对其他人有用环境:Windows11显卡:NvidiaGeforceRTX3090时间:2023/04/301.主流程基本按照这篇知乎文章来的:喂饭级stable_diffusion_webUI使用教程-知乎(zhihu.com),这其中安装git,安装python3,都比......
  • SQL: duplicate table
      MySQLcreatetablenew_tableselectc1,c2fromold_table[where1=2]loseindex,auto_incrementcreatetablenew_tablelikeold_tabletablestructureisexactlythesame,nodatainsertintonew_tableselect*fromold_tableinsertintonew_......
  • iOS开发 UItableView中的单元…
    iOSiPhone开发UItableView中的单元格背景渐变渐变如果用背景图片,会让你的app臃肿。给APP瘦身,我们可以使用代码来解决渐变的问题。这篇文章是解决表格中的单元格的简便问题,同时解决单元格外边框问题。1:设置好开始颜色与结束颜色。推荐一个小工具,在chrome浏览器上安装一个扩展......
  • iOS开发UITableView基本使用方法总…
    UITableView基本使用方法1.首先,Controller需要实现两个delegate,分别是UITableViewDelegate和UITableViewDataSource2.然后UITableView对象的delegate要设置为self。3.然后就可以实现这些delegate的一些方法拉。(1)-(NSInteger)numberOfSectionsInTableView:(UITableView*......
  • 使用Dino+SAM+Stable diffusion 自动进行图片的修改
    SAM是Mata发布的“SegmentAnythingModel”可以准确识别和提取图像中的对象。它可以分割任何的图片,但是如果需要分割特定的物体,则需要需要点、框的特定提示才能准确分割图像。所以本文将介绍一种称为GroundingDino的技术来自动生成SAM进行分割所需的框。除了分割以外,我......
  • [FireDAC][Phys]-330. Cannot generate update query. Update table undefined.
    在正式的查询SQL前,用了临时表存储查询条件,数据正常加载,结果编辑、保存时报错了代码是老早前写,现在看,其实完全可以直接用存储过程的结果,也不用中间再转一次,这个异常也就可以避过去了 ......
  • 量化交易之One Piece篇 - 基于天勤的数据备用方案(stable版)
    fromtqsdkimportTqApi,TqAuthfromtqsdk.tafuncimporttime_to_datetimeimportdatetimefromdatetimeimportdatetimeimportpandasimportreimportosimportwarningswarnings.filterwarnings('ignore')pandas.set_option('display.max_c......
  • 将C#中的DataTable转换为Word表格
    usingMicrosoft.Office.Interop.Word;usingSystem.Data;namespaceDataTableToWord{classProgram{staticvoidMain(string[]args){//创建Word应用程序对象Applicationapp=newApplication();//创建一个新......
  • CentOS7 iptables防火墙 常用的命令
    CentOS7iptables防火墙常用的命令 iptables-Lvi/etc/sysconfig/iptablesserviceiptablesstatusnetstat-an|grep自定义的端口iptables-AINPUT-ptcp--dport自定义的端口-jACCEPTserviceiptablessavesystemctlrestartiptables.servicenetsta......