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

闪回事务查询

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';

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

转载于:https://www.cnblogs.com/createyuan/p/6782768.html

oracle-闪回技术2相关推荐

  1. Oracle闪回技术

    Oracle闪回技术   我们都清楚的知道,当我们数据库中的数据删除或者更新之后,数据很难再还原回来,在没有了解闪回技术之前,就觉得是没办法还原了,这样子会付出很大的代价. 现在我来总结一下闪回技术的 ...

  2. Oracle 闪回技术详解

    概述 闪回技术是Oracle强大数据库备份恢复机制的一部分,在10g的时候就被推出一直延续到现在.在数据库发生逻辑错误的时候,闪回技术能提供快速且最小损失的恢复(多数闪回功能都能在数据库联机状态下完成 ...

  3. 【转载】oracle闪回技术详解之闪回drop(神奇的flashback)

    写在前面:删库跑路,相信这是绝大多数程序员会经常听到的一个词.俗话说:常在河边走,哪有不湿鞋,作为经常和数据打交道的程序员也好,运维实施也好,有时难免会出现数据误删除,误操作等情况.如果你是一个ora ...

  4. Oracle闪回技术(Flashback)

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

  5. Oracle闪回技术详解

    Oracle的闪回技术提供了一组功能,可以访问过去某一时间的数据并从人为错误中恢复.闪回技术是Oracle 数据库独有的,支持任何级别的恢复,包括行.事务.表和数据库范围.使用闪回特性,您可以查询以前 ...

  6. oracle flash_back oracle闪回技术详解,oracle flashback 闪回技术实例

    oracle flashback 闪回技术实例 相关操作 1.DBA必须设定undo保持力足够大以能够重构需要闪回的数据 ALTER SYSTEM SET UNDO_RETENTION=; secon ...

  7. oracle闪回技术详解之闪回drop(神奇的flashback)

    写在前面:删库跑路,相信这是绝大多数程序员会经常听到的一个词.俗话说:常在河边走,哪有不湿鞋,作为经常和数据打交道的程序员也好,运维实施也好,有时难免会出现数据误删除,误操作等情况.如果你是一个ora ...

  8. oracle闪回15分钟前,Oracle闪回技术(Flashback)

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

  9. Oracle 闪回技术详解(flashback)

    文章目录 1 概述 2 实例说明 2.1 闪回查询 2.2 闪回版本查询 2.3 闪回事务查询 2.4 闪回表 2.5 闪回删除 3 扩展 1 概述 为了使 Oracle 数据库从误操作中迅速地恢复, ...

  10. oracle 回退到某个时间,oracle 闪回技术

    基本闪回查询 SYS@VDEDU> select * from scott.dept as of timestamp to_timestamp ('2018-07-26 13:20:00','y ...

最新文章

  1. 机器学习算法面试—口述(4):决策树
  2. 图片(img标签)的onerror事件
  3. 定义查询构建器IFeatureLayerDefinition
  4. Redis-Cluster实战--4.官方安装(含视频)
  5. Markdown-数学公式语法
  6. Wordpress如何打开调试模式
  7. myjdbc链接数据库.增删改查
  8. React开发(226):默认方法返回一个新的参数两个括号
  9. flex item的width VS flex-basis
  10. Spcok简约图片分享网站Typecho主题
  11. Js Date对象 简单操作
  12. java单链表删除重复元素_用加头节点实现链表的删除重复元素、分割、翻转(Java实现)...
  13. ORACLE 树形遍历查询根节点、父节点、子节点
  14. 中间件是什么意思?中间件技术简介
  15. pythonppt_Python简介ppt
  16. vscode格式化代码设置
  17. 将CAD图纸转换为黑白的PDF文件要怎么操作
  18. 上帝视角看区块链项目
  19. 多传感器时频信号处理:多通道非平稳数据的分析工具(Matlab代码实现)
  20. 直播美颜SDK代码浅析:直播平台接入美颜SDK是怎样实现美颜的?

热门文章

  1. AI正从“感知智能”走向“认知智能”
  2. 吴恩达深度学习笔记(83)-LeNet-5、AlexNet和VGGNet网络知多少
  3. python检查URL是否能正常访问
  4. SAP MM 为FO类型的采购订单做MIRO时候PO Amount不自动带出来问题之对策
  5. (完全解决)Windows如何使用批处理命令进行SSH连接并自动输入密码
  6. Pytorch之深入理解torch.nn.Parameter()
  7. 量子计算的符号表示(Dirac notation)
  8. 脑智前沿科普|虚拟现实如何欺骗你的大脑
  9. 探索“植物人”语言能力和意识水平
  10. 68页PPT,读懂中、美、德三国智能制造战略!