Oracle HowTo:How to get Oracle SCN?
作者:eygle 发表于 2006-01-06 20:51 最后更新于 2006-12-26 13:39 | English Version
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明。
http://www.eygle.com/archives/2006/01/oracle_howto_get_scn.html
之前简单的介绍过一下如何获得当前数据库的SCN值,主要可以通过两种方式:
1.在Oracle9i及以上版本中
可以使用dbms_flashback.get_system_change_number来获得
SQL> select dbms_flashback.get_system_change_number from dual; GET_SYSTEM_CHANGE_NUMBER |
可以通过查询x$ktuxe获得最接近当前系统scn值
X$KTUXE-------------[K]ernel [T]ransaction [U]ndo Transa[x]tion [E]ntry (table)
SQL> select max(ktuxescnw*power(2,32)+ktuxescnb) from x$ktuxe; MAX(KTUXESCNW*POWER(2,32)+KTUXESCNB) |
3.通过oradebug获取
以前在l2g32003的站点上看到使用oradebug获取SCN的方法,转引在这里:
[oracle@neirong oracle]$ sqlplus "/ as sysdba" SQL*Plus: Release 9.2.0.4.0 - Production on Wed Dec 21 21:04:24 2005 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. Connected to: SQL> col a for 999999999999 A SQL> select dbms_flashback.get_system_change_number a from dual; A SQL> |
方法有多种,但是涉及的知识各有巧妙不同,深入研究一下都是很有意思的.
=======================================================
ORACLE的闪回查询
as of TIMESTAMP 和as of SCN
查询该表一分钟前的数据
select * from abc as of TIMESTAMP SYSDATE-1/1440;
查询该表一分钟前的数据
select * from abc as of SCN 16014177255;
通过这种方式,我们可以将数据回滚到以前某个状态,比如误删除并且commit后.可以通过闪回方式进行数据的恢复.
比如:
delete from abc;
commit;
insert into abc select * from abc as of TIMESTAMP SYSDATE-1/1440;
commit;