闪回版本查询,用到了附加日志

闪回事务查询

http://blog.csdn.net/laoshangxyc/article/details/12405459  这个博客的备份与恢复可以参考

###################################

http://blog.itpub.net/18922393/viewspace-697625/

附加日志(supplemental log)可以指示数据库在日志中添加额外信息到日志流中,
以支持基于日志的工具,如逻辑standby、streams、GoldenGate、LogMiner。
可以在数据库和表上设置。

#################################

1.数据库级设置,分两类:
1.1最小附加日志(minimal supplemental logging):
DATA选项启用最小附加日志。启用最小日志可以确保LogMiner
(或其他任何基于LogMiner的产品)可以支持行链接、簇表、索引组织表等。
语法如下:
alter database {add|drop} supplemental log data;

1.2标识键日志(identification key logging):
DATA(all,primary key,unique,foreign key) columns选项启用最小日志及列数据日志。
在源库日志为变化来源同步其他数据库的情况下,比如逻辑备用数据库,
受影响的数据行必须以列数据标识(而不是rowid),必须启用此种附加日志。
语法如下:
alter database {add|drop} supplemental log {data(all,primary key,unique,foreign key) columns};

1.3缺省情况下,Oracle不启用以上任何附加日志。当使用ALL,PRIMARY,UNIQUE或FOREIGN附加日志时最小补全日志默认开启(即检查结果为IMPLICIT)。
在删除所有导致IMPLICIT最小化附加日志的附加日志后,最小化附加日志变为NO。

###############################

2,表级附加日志设置,分两类
2.1,可以通过以下语句设置命名日志组:

语法:
alter table table_name
add supplemental log group group_a(column_a [no log],column_b,...) [always];

NO LOG选项用于指定在日志中排除哪些列。在命名日志组中,至少存在一个无”NO LOG“的定长列。
比如,对LONG列使用 no log选项,可以在更改LONG列时,记录其他列的内容(LONG列本身不能存在日志里)。

ALWAYS选项, 在更新时,日志组中的所有列都会记录在日志中。这就是所谓的”无条件“日志组,有时也叫”always log group“。
如果不指定该选项,只有在日志组中的任何列被修改时,所有列才会出现在日志中。
这就是所谓的”有条件“日志组。

说明:同一列可以在多个日志组中存在,但日志中只记录一次;
同一列在“无条件”与“有条件”日志组中存在时,该列将“无条件”记录。

2.2,可以通过以下语句设置所有列或主键/外键/唯一键组合日志组:

语法:
alter table table_name
add supplemental log data(all,primary key,unique,foreign key) columns;

Oracle将生成无条件或有条件日志组。对于无条件日志组,日志中将记录该日志组中的所有列;
对于有条件日志组,只有日志组中的列有变化时,才会记录日志组中的所有列。

如果指定“ALL”列,日志中将包含所有最大大小固定长度的列。这种日志是系统创建的无条件日志组。
如果指定“PRIMARY KEY”列,只要有更新,组成主键的所有列都会记录在日志中。这种日志是系统创建的无条件日志组。Oracle使用如下顺序确定附加记录哪些列:
*组成主键的列(主键有效,或rely且非DISABLED or INITIALLY DEFERRED状态)
*最小的、至少有一个非空列的唯一索引
*记录所有标量列
如果指定“UNIQUE”列,如果任何组成唯一键或位图索引的列被修改,组成该唯一键或位图索引的其他列都会记录在日志中。这种日志是系统创建的有条件日志组。
如果指定“FOREIGN KEY”列,如果任何组成外键的列被修改,组成该外键的其他列都会记录在日志中。这种日志是系统创建的有条件日志组。

2.3表级测试
drop table test;
create table test(x int,y int);

--增加附加日志
alter table test
add supplemental log data(all,primary key,unique,foreign key) columns;

select * from dba_log_groups;
OWNER LOG_GROUP_NAME TABLE_NAME LOG_GROUP_TYPE ALWAYS GENERATED
SYS SYS_C0037555 TEST ALL COLUMN LOGGING ALWAYS GENERATED NAME
SYS SYS_C0037556 TEST PRIMARY KEY LOGGING ALWAYS GENERATED NAME
SYS SYS_C0037557 TEST UNIQUE KEY LOGGING CONDITIONAL GENERATED NAME
SYS SYS_C0037558 TEST FOREIGN KEY LOGGING CONDITIONAL GENERATED NAME

select * from dba_log_group_columns;
no row selected

--删除附加日志
alter table test
drop supplemental log data(all,primary key,unique,foreign key) columns;

select * from dba_log_groups;
no row selected

select * from dba_log_group_columns;
no row selected

--增加命名附加日志
alter table test
add supplemental log group group_a(x,y);

select * from dba_log_groups;
OWNER LOG_GROUP_NAME TABLE_NAME LOG_GROUP_TYPE ALWAYS GENERATED
SYS GROUP_A TEST USER LOG GROUP CONDITIONAL USER NAME

select * from dba_log_group_columns;
OWNER LOG_GROUP_NAME TABLE_NAME COLUMN_NAME POSITION LOGGING_PROPERTY
SYS GROUP_A TEST X 1 LOG
SYS GROUP_A TEST Y 2 LOG

--删除命名附加日志
alter table test
drop supplemental log group group_a;

###############################

语句汇总

alter database add supplemental log data;
alter database add supplemental log data (all) columns;
alter database add supplemental log data (primary key) columns;
alter database add supplemental log data (foreign key) columns;
alter database add supplemental log data (unique) columns;
alter database add supplemental log data for procedural replication;

丢弃时有先后顺序的,最后才能丢弃log data,其它没有次序。
alter database drop supplemental log data (all) columns;
alter database drop supplemental log data (primary key) columns;
alter database drop supplemental log data (foreign key) columns;
alter database drop supplemental log data (unique) columns;
alter database drop supplemental log data for procedural replication;
alter database drop supplemental log data;

查询开关是否打开
select Supplemental_Log_Data_Min min1,Supplemental_Log_Data_All all1,
Supplemental_Log_Data_Pk pk,Supplemental_Log_Data_Fk fk,
Supplemental_Log_Data_Ui ui,Supplemental_Log_Data_Pl pl
from v$database;

###################################

日志输出

tail -f /u01/app/oracle/diag/rdbms/kyc/kyc/trace/alert_kk.log

Fri Apr 28 18:05:54 2017
alter database add supplemental log data
SUPLOG: Previous supplemental logging attributes at scn = 996039
SUPLOG:  minimal = OFF, primary key = OFF
SUPLOG:  unique = OFF, foreign key = OFF, all column = OFF
SUPLOG:  procedural replication = OFF
SUPLOG: New supplemental logging attributes at scn = 996039
SUPLOG:  minimal = ON, primary key = OFF
SUPLOG:  unique = OFF, foreign key = OFF, all column = OFF
SUPLOG:  procedural replication = OFF
Completed: alter database add supplemental log data
alter database add supplemental log data (primary key) columns
SUPLOG: Previous supplemental logging attributes at scn = 996049
SUPLOG:  minimal = ON, primary key = OFF
SUPLOG:  unique = OFF, foreign key = OFF, all column = OFF
SUPLOG:  procedural replication = OFF
SUPLOG: New supplemental logging attributes at scn = 996049
SUPLOG:  minimal = ON, primary key = ON
SUPLOG:  unique = OFF, foreign key = OFF, all column = OFF
SUPLOG:  procedural replication = OFF
Completed: alter database add supplemental log data (primary key) columns

######################################

Fri Apr 28 15:13:50 2017
ALTER DATABASE   MOUNT
Successful mount of redo thread 1, with mount id 119196142
Database mounted in Exclusive Mode
Lost write protection disabled
Completed: ALTER DATABASE   MOUNT
Fri Apr 28 15:14:09 2017
alter database archivelog
Completed: alter database archivelog
Fri Apr 28 15:16:59 2017
alter database flashback on
Starting background process RVWR
Fri Apr 28 15:16:59 2017
RVWR started with pid=22, OS id=3403
Allocated 8388608 bytes in shared pool for flashback generation buffer
Flashback Database Enabled at SCN 991029
Completed: alter database flashback on

#################################

http://blog.csdn.net/laoshangxyc/article/details/12405459

Flashback Version Query 闪回版本查询
使用Flashback Version Query 返回在指定时间间隔或SCN间隔内的所有版本,一次commit命令就会创建一个版本。
语法如下:
SELECT .....FROM tablename VERSIONS {BETWEEN {SCN | TIMESTAMP} start AND end}
--start,end可以是时间也可以是scn

--可以看出,一次commit是一个版本,当前版本的versions_endscn和versions_endtime值为空,旧版本则有值。
Flashback Transaction Query闪回事务查询
Flashback Transaction Query实际上是查询的数据字典flashback_transaction_query。可以根据flashback_transaction_query 的undo_sql列值返回数据以前版本。

--使用闪回事务查询前,必须启用重做日志流的其他日志记录,重做日志流与Log Miner使用的数据相同,只是接口不同。

select Supplemental_Log_Data_Min min1,Supplemental_Log_Data_All all1,
Supplemental_Log_Data_Pk pk,Supplemental_Log_Data_Fk fk,
Supplemental_Log_Data_Ui ui,Supplemental_Log_Data_Pl pl
from v$database;

--开启日志
alter database add supplemental log data;
alter database add supplemental log data (primary key) columns;

--更改值
select * from e1;
update e1 set name='uuu' where name='ni';
commit;
update e1 set name='ooo' where name='uuu';
commit;

--查询事务id,下面全是版本查询伪列

Flashback Version Query伪列说明
versions_start{scn|time}  版本开始的scn或时间戳
versions_end{scn|time}  版本结束scn或时间戳,如果有值表明此行后面被更改过是旧版本,如果为null,则说明行版本是当前版本或行被删除(即versions_operation值为D)。
versions_xid 创建行版本的事务ID
versions_operation  在行上执行的操作(I=插入,D=删除,U=更新)

select versions_startscn,versions_starttime,
versions_endscn,versions_endtime,
versions_xid,versions_operation
from e1 versions between timestamp
to_timestamp('2017-04-28 18:09:58','YYYY-MM-DD HH24:MI:SS')
and
to_timestamp('2017-04-28 18:14:58','YYYY-MM-DD HH24:MI:SS');

--模糊查询
select * from flashback_transaction_query
where logon_user!='SYS' and table_name not like '%$';
--查询undo sql
select start_scn,commit_scn,logon_user,operation,table_name,undo_sql
from flashback_transaction_query
where xid=hextoraw('09000F0098030000');
--返回上一个版本

################################

案例

先查询状态,并配置一些功能

select Supplemental_Log_Data_Min min1,Supplemental_Log_Data_All all1,
Supplemental_Log_Data_Pk pk,Supplemental_Log_Data_Fk fk,
Supplemental_Log_Data_Ui ui,Supplemental_Log_Data_Pl pl
from v$database;

alter database add supplemental log data;
alter database add supplemental log data (primary key) columns;

select name,value/60/60 minutes_retained
from v$parameter
where name='undo_retention';
alter system set undo_retention=86400;

再做更新

select * from e1;
update e1 set name='iii';

select versions_startscn,versions_starttime,
versions_endscn,versions_endtime,
versions_xid,versions_operation
from e1 versions between timestamp
to_timestamp('2017-04-28 18:59:58','YYYY-MM-DD HH24:MI:SS')
and
to_timestamp('2017-04-28 19:23:58','YYYY-MM-DD HH24:MI:SS');

04000700C4020000

select start_scn,commit_scn,logon_user,operation,table_name,undo_sql
from flashback_transaction_query
where xid=hextoraw('04000700C4020000');

update "TEST"."E1" set "NAME" = 'aaa' where ROWID = 'AAARPdAAFAAAAJLAAM';
update "TEST"."E1" set "NAME" = 'ccc' where ROWID = 'AAARPdAAFAAAAJLAAL';
update "TEST"."E1" set "NAME" = 'ccc' where ROWID = 'AAARPdAAFAAAAJLAAK';
update "TEST"."E1" set "NAME" = 'ooo' where ROWID = 'AAARPdAAFAAAAJLAAJ';
update "TEST"."E1" set "NAME" = 'ooo' where ROWID = 'AAARPdAAFAAAAJLAAI';
update "TEST"."E1" set "NAME" = 'ooo' where ROWID = 'AAARPdAAFAAAAJLAAH';
update "TEST"."E1" set "NAME" = 'qqq' where ROWID = 'AAARPdAAFAAAAJLAAG';

#################################

oracle-闪回技术2的更多相关文章

  1. Oracle闪回技术详解

     概述: 闪回技术是Oracle强大数据库备份恢复机制的一部分,在数据库发生逻辑错误的时候,闪回技术能提供快速且最小损失的恢复(多数闪回功能都能在数据库联机状态下完成).需要注意的是,闪回技术旨在快速 ...

  2. Oracle闪回技术(Flashback)

    闪回技术有闪回表.闪回删除.闪回查询.闪回事务查询.闪回事务.闪回数据库.闪回数据归档.其中,闪回查询.闪回事务查询用来“观察”过去:闪回数据归档并不是一个独立的功能,其功能是扩展闪回查询的时间窗口: ...

  3. Oracle闪回技术

    (一)闪回技术概要 闪回技术是数据库备份与恢复的重要补充手段,主要包括以下7种特性: 特性 原理 数据库支持 闪回查询(Flashback Query) 利用undo表空间中的回退信息,查询过去某个时 ...

  4. oracle 闪回技术

    oracle默认不启动闪回数据库 如果需要启动闪回数据库,数据库需要设置为归档模式,并启用恢复区. 1.查看是否启动闪回删除 SQL> show parameter recyclebin; NA ...

  5. oracle闪回技术总结之闪回数据库

    [实施步骤] 步骤一.设置如下的初始化参数: Sql>小时:以分钟为单位 SQL> 点00分左右发现表被删除 切了几个归档 22:00:38SQL>:06:05 SQL> :0 ...

  6. Oracle闪回技术之一Oracle 11g 利用FlashTable (闪回表)恢复(用delete)误删的数据

    闪回表,实际上就是将表中的数据快速恢复到过去的一个时间点或者系统改变号SCN上.实现表的闪回,需要用到撤销表空间相关的UNDO信息,通过SHOW PARAMETER UNDO命令就可以了解这些信息.用 ...

  7. Oracle闪回表

    Oracle闪回技术 场景:测试环境数据库的表数据被误删除. 解决思路:使用闪回表技术 原理 闪回技术是Oracle强大数据库备份恢复机制的一部分,在数据库发生逻辑错误的时候,闪回技术能提供快速且最小 ...

  8. Oracle 六闪回技术,flashback

    Flashback 技术基于Undo segment基于内容的, 因此,限制UNDO_RETENTON参数. 要使用flashback 特征,您必须启用自己主动撤销管理表空间. 在Oracle 11g ...

  9. Oracle 的闪回技术 --flashback

    SQL Fundamentals: 表的创建和管理 如何开启数据库闪回? SQL> shutdown immediate; ORA-01109: database not open Databa ...

  10. oracle 单实例DG(闪回技术四)

    一,flashback Oracle Flashback技术是一组数据库特性,它可以让你查看数据库对象的过去状态,或者将数据库对象返回到以前的状态,而无需使用基于时间点的介质恢复.根据数据库的变化,闪 ...

随机推荐

  1. C++基础知识:构造与析构

    1.构造函数的定义: C++中的类可以定义与类名相同的特殊成员函数这种与类名相同的成员函数叫做构造函数构造函数在定义时可以有参数,但是没有任何返回类型的声明 2.构造函数的调用: 一般情况下C++编译 ...

  2. Oracle特殊字符转义:&和'

    Oracle特殊字符转义:&和'    我们在SQL*PLUS下执行 SQL show all命令时,可以发现一个参数:define & (hex 26),如下所示 concat . ...

  3. Appium Desktop 介绍及使用

    一.AppiumDesktop介绍 1.Appium-server的图形界面.可以设置选项.启动/停止服务器.查看日志等功能:且无须提前安装Node / NPM,因为Node运行时直接与Appium ...

  4. day 51

    一 window对象 window 对象表示一个浏览器窗口. 在客户端 JavaScript 中,Window 对象是全局对象,所有的表达式都在当前的环境中计算.也就是说,要引用当前窗口根本不需要特殊 ...

  5. 2016 多校联赛7 Balls and Boxes(概率期望)

    Mr. Chopsticks is interested in random phenomena, and he conducts an experiment to study randomness. ...

  6. GCC栈溢出保护

    逆向过elf程序都知道,GCC的canary,x86_64下从fs:0x28偏移处获取,32位下从gs:0x14偏移处获取.但知道canary如何产生,为什么在这里取的人比较少. 下面以x86_64平 ...

  7. arm svc

    隐藏exit,ptrace etc. C示例 #include <sys/ptrace.h> #include <stdio.h> int main() { int r; as ...

  8. MATLAB的一些小经验,记下来,facilitate future work

    [转载请注明出处]http://www.cnblogs.com/mashiqi 2016/03/28 0.杂.这个帖子(https://www.zhihu.com/question/24499729) ...

  9. mbpoll Test FreeModbus TCP Demo

    /********************************************************************************* * mbpoll Test Fre ...

  10. shell脚本-预定义常量

    $0 这个程式的执行名字$n 这个程式的第n个参数值,n=1..9$* 这个程式的所有参数,此选项参数可超过9个.$# 这个程式的参数个数$$ 这个程式的PID(脚本运行的当前进程ID号)$! 执行上 ...