闪回之闪回表(flashback table)

背景知识

设置闪回数据库参数
设置数据库闪回的三个参数:
db_recovery_file_dest_size  闪回恢复区大小
db_recovery_file_dest  闪回恢复区路径,该参数可以任意指定,闪回日志记录了数据库的前影像,该日志不会进行归档,一但停用数据库的闪回功能,该目录下的日志会
自动清除
db_flashback_retention_target  保留恢复最近多长时间的数据,单位为分钟。
SQL> alter system set db_recovery_file_dest_size=5G;
System altered.
SQL> alter system set db_recovery_file_dest=‘/home/oracle/flash‘;
System altered.
SQL> alter system set db_flashback_retention_target=2440;  --分钟  2天,系统默认是1天
System altered.

回收站(recyclebin):从管理的角度为每个用户“分配”一个回收站,但这个回收站并不实际开辟空间(逻辑容器),当drop table时(非purge),原来的表所使用的段中的数据并没有真正的删除。实际上是把table的段名以回收站方式重命名。该段所在表空间不足需要扩展时,回收站中的信息会被自动清除。

一:

闪回一张无索引与约束的普通表

-- 查看是否有闪回功能  ON表示闪回已开  OFF表示闪回关闭
SQL> show parameter recyclebin

NAME                                 TYPE        VALUE
------------------------------------ ----------- ---------
recyclebin                           string      on

SQL> desc andy.andy;
 Name                                      Null?    Type
 ----------------------------------------- -------- --------------
 ID                                                 NUMBER(38)

SQL> drop table andy.andy;

Table dropped.

SQL> select * from andy.andy;
select * from andy.andy
                   *
ERROR at line 1:
ORA-00942: table or view does not exist

SQL> flashback table andy.andy to before drop;

Flashback complete.

SQL> select * from andy.andy;

ID
----------
       100

二:

闪回一张带索引与约束的表

1) 准备环境

SQL> 
create table school(sid number(4),sname varchar2(400 char), check_status number(1) default 0 check( check_status in(0,1)),accountant varchar2(20 char)unique,pwd varchar2(20 char),email varchar2(30 char),photo_path  varchar2(800 char),
constraint pk_t_school primary key(sid));

Table created.

SQL> insert into andy.school(sid,sname) values(1,‘andy‘);

1 row created.

SQL> insert into andy.school(sid,sname) values(2,‘andy‘);

1 row created.

SQL> col sname for a40
SQL> select sid,sname from andy.school;

SID SNAME
---------- ----------------------------------------
         1 andy
         2 andy

-- 用andy用户登录
sqlplus andy/[email protected]:1521/orcl

2)查一下约束和索引

SQL> SELECT index_name, column_name, descend  FROM user_ind_columns  WHERE table_name = ‘SCHOOL‘;

INDEX_NAME                     COLUMN_NAME                              DESC
------------------------------ ---------------------------------------- ----
BIN$CgrA2XbJP/jgUGQKDRkLsQ==$0 SID                                      ASC
BIN$CgrA2XbKP/jgUGQKDRkLsQ==$0 ACCOUNTANT                               ASC

SQL> select CONSTRAINT_NAME,TABLE_NAME, COLUMN_NAME from user_cons_columns where TABLE_NAME=‘SCHOOL‘;

CONSTRAINT_NAME                TABLE_NAME                     COLUMN_NAME
------------------------------ ------------------------------ ----------------------------------------
BIN$CgrA2XbGP/jgUGQKDRkLsQ==$0 SCHOOL                         CHECK_STATUS
BIN$CgrA2XbHP/jgUGQKDRkLsQ==$0 SCHOOL                         SID
BIN$CgrA2XbIP/jgUGQKDRkLsQ==$0 SCHOOL                         ACCOUNTANT

3)表被drop到回收站,查一查约束和索引

SQL> drop table school;

Table dropped.

SQL> select INDEX_NAME,TABLE_NAME from user_indexes where table_name =‘SCHOOL‘;

no rows selected

SQL> select CONSTRAINT_NAME,TABLE_NAME from user_constraints where table_name=‘SCHOOL‘;

no rows selected

4)闪回表,查一查约束与索引

SQL> flashback table school to before drop;

Flashback complete.

SQL> SELECT index_name, column_name, descend  FROM user_ind_columns  WHERE table_name = ‘SCHOOL‘;

INDEX_NAME                     COLUMN_NAME                              DESC
------------------------------ ---------------------------------------- ----
BIN$CgrA2XbJP/jgUGQKDRkLsQ==$0 SID                                      ASC
BIN$CgrA2XbKP/jgUGQKDRkLsQ==$0 ACCOUNTANT                               ASC

SQL> select CONSTRAINT_NAME,TABLE_NAME, COLUMN_NAME from user_cons_columns where TABLE_NAME=‘SCHOOL‘;

CONSTRAINT_NAME                TABLE_NAME                     COLUMN_NAME
------------------------------ ------------------------------ ----------------------------------------
BIN$CgrA2XbGP/jgUGQKDRkLsQ==$0 SCHOOL                         CHECK_STATUS
BIN$CgrA2XbHP/jgUGQKDRkLsQ==$0 SCHOOL                         SID
BIN$CgrA2XbIP/jgUGQKDRkLsQ==$0 SCHOOL                         ACCOUNTANT

5)分别重命名索引和约束

SQL> alter index "BIN$CgrA2XbJP/jgUGQKDRkLsQ==$0" rename to PK_T_SCHOOL;

Index altered.

SQL> alter index "BIN$CgrA2XbKP/jgUGQKDRkLsQ==$0" rename to SYS_C0024861;

Index altered.

SQL> alter table school rename constraint "BIN$CgrA2XbGP/jgUGQKDRkLsQ==$0" to SYS_C0024859;

Table altered.

SQL> alter table school rename constraint "BIN$CgrA2XbHP/jgUGQKDRkLsQ==$0" to PK_T_SCHOOL ;

Table altered.

SQL> alter table school rename constraint "BIN$CgrA2XbIP/jgUGQKDRkLsQ==$0" to SYS_C0024861;

Table altered.

6)查看修改后的索引名与约束名
SQL> SELECT index_name, column_name, descend  FROM user_ind_columns  WHERE table_name = ‘SCHOOL‘;

INDEX_NAME                     COLUMN_NAME                              DESC
------------------------------ ---------------------------------------- ----
PK_T_SCHOOL                    SID                                      ASC
SYS_C0024861                   ACCOUNTANT                               ASC

SQL>  select CONSTRAINT_NAME,TABLE_NAME, COLUMN_NAME from user_cons_columns where TABLE_NAME=‘SCHOOL‘;

CONSTRAINT_NAME                TABLE_NAME                     COLUMN_NAME
------------------------------ ------------------------------ ----------------------------------------
SYS_C0024859                   SCHOOL                         CHECK_STATUS
PK_T_SCHOOL                    SCHOOL                         SID
SYS_C0024861                   SCHOOL                         ACCOUNTANT

OK,转载请标明出处。

时间: 2024-10-13 03:34:33

闪回之闪回表(flashback table)的相关文章

Oracle Flashback(flashback table或drop)

在Oracle 10g中,Flash back家族分为以下成员:Flashback DatabaseFlashback DropFlashback TableFlashback Query(分Flashback Query,Flashback Version Query,Flashback Transaction Query)下面介绍一下Flashback Drop 和Flashback Table 一 Flashback设置 1.打开flashback: 关闭数据库 启动到mount方式 SQ

Oracle Flashback Technologies - 闪回被drop的表

在oracle10g中,drop一个表后,表没有真正被删除,支持被rename后放在recyclebin中. #新建一个表y2,用来测试 SQL> create table y2 as select * from all_tables; Table created. SQL> select count(*) from y2; COUNT(*) ---------- 3598 #删除表 SQL> show recyclebin SQL> drop table y2; Table dr

Oracle的闪回技术--闪回错误的DML操作

提交DML操作后,该操作使用的还原段就可以被其它对象使用了,为了保证闪回操作时这些数据仍然被保存在还原段中,可能需要重新设置undo_retention参数,表示一个事务提交后,该事务的数据必须保存在还原段中的时间:但是这也并不能完全保证指定的时间的数据一定能够被恢复,还原表空间没有足够的时间时,仍会覆盖要求保留的磁盘空间. 查看undo_retention的当前值: SQL> show parameter undo_retention NAME TYPE VALUE -------------

oracle 闪回技术--闪回删除

1.查看是否启动闪回删除 SQL> show parameter recyclebin; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ recyclebin string on 启动闪回 2.测试闪回删除的表: 创建两个一样的表,然后都删除,进行恢复. SQL> create table edu.test_flash(id number(12),na

[转]开启闪回以及闪回的四种原理

1.首先确认db_recovery_file_dest和db_recovery_file_dest_size 有值. [email protected]> show parameter recovery NAME                                 TYPE        VALUE ------------------------------------ ----------- ------------------------------ db_recovery_f

Palindromic Tree 回文自动机-回文树 例题+讲解

---恢复内容开始--- 回文树,也叫回文自动机,是2014年被西伯利亚民族发明的,其功能如下: 1.求前缀字符串中的本质不同的回文串种类 2.求每个本质不同回文串的个数 3.以下标i为结尾的回文串个数/种类 4.每个本质不同回文串包含的本质不同回文串种类 (本文参考自Palindromic Tree——回文树[处理一类回文串问题的强力工具],Palindromic Tree 回文自动机-回文树 解决回文串的神器) 下面介绍一些数组的意义 next[][]类似于字典树,指向当前字符串在两段同时加

48.输入任意正整数,编程判断该数是否为回文数(回文数是指从左到右读与从右到左读一样,如12321)

//1.输入一个数,将其每一位分离,并保存如一个数组 //2.判断数组最后录入的一位是第几位 //3.循环判断是否满足回问数的要求 #include<iostream> using namespace std; int main() { int n,temp; int k=0; int a[20]; cout<<"please input an number: "<<endl; cin>>n; for(int i=0;i<20;i+

Openvswitch原理与代码分析(5): 内核中的流表flow table操作

? 当一个数据包到达网卡的时候,首先要经过内核Openvswitch.ko,流表Flow Table在内核中有一份,通过key查找内核中的flow table,即可以得到action,然后执行action之后,直接发送这个包,只有在内核无法查找到流表项的时候,才会到用户态查找用户态的流表.仅仅查找内核中flow table的情况被称为fast path. ? ? 第一步:从数据包中提取出key ? 实现函数为int ovs_flow_key_extract(const struct ip_tun

Drupal 7 模块开发 创建自定义表(table) (hook_schema)

建立模块请参考 <Drupal 7 模块开发 建立> 如果你要支持中文,文件格式必须保存为 UTF-8,NO BOM ------------------------------ 要为自己模块建立一个单独的表(table),需要用到 hook_schema 表名称:myform function my_first_module_schema() { $schema['myform'] = array( 'description' => '第一个表单', 'fields' => ar