参考网址:http://www.oracledatabase12g.com/
在开发的过程中,可能由于某些程序员执行了create or replace方法,覆盖了之前的同名的PL/SQL对象或者是视图等。
这里需要使用到Oracle的新版本提供的闪回的功能-FLASHBACK QUERY.
1、查询当前的SCN
1 SELECT Dbms_Flashback.Get_System_Change_Number, Current_Scn FROM V$database
2、查询系统中最小的SCN号(当前系统支持的)
1 SELECT min(SCN) FROM sys.Smon_Scn_Time
3、SCN和TIMESTAMP之间的相互转换:
1 SELECT Timestamp_To_Scn(SYSDATE - 1) SCN, 2 To_Char(Scn_To_Timestamp(790000), 'yyyy-mm-dd hh:mi:ss') TIMESTAMP 3 FROM Dual
4、存储过程的闪回操作:需要使用ALL_SOURCE表,并且在系统用户下(SYS)
建立过程:
1 CREATE OR REPLACE PROCEDURE Test_Create_Or_Replace IS 2 BEGIN 3 NULL; 4 NULL; 5 NULL; 6 NULL; 7 NULL; 8 NULL; 9 NULL; 10 NULL; 11 NULL; 12 END Test_Create_Or_Replace;
当前的SCN:
查询当前SCN对应的ALL_SOURCE中的Test_Create_Or_Replace的信息:
1 SELECT * 2 FROM All_Source AS OF Scn 927331 3 WHERE Owner = 'SCOTT' 4 AND NAME = 'TEST_CREATE_OR_REPLACE';
将过程进行修改:
1 CREATE OR REPLACE PROCEDURE Test_Create_Or_Replace IS 2 BEGIN 3 NULL; 4 END Test_Create_Or_Replace;
--查询最新的信息:
所以可用使用:
1 SELECT * 2 FROM All_Source AS OF Scn 927331 3 WHERE Owner = 'SCOTT' 4 AND NAME = 'TEST_CREATE_OR_REPLACE';
查询该SCN点的数据.
同理可得,可以对视图进行闪回操作,可以找出误删除的视图信息。需要使用ALL_VIEWS进行闪回操作
也可以使用:
SELECT * FROM All_Source AS OF Timestamp scn_to_timestamp(927331);
进行闪回操作。