您的位置:首页 > 数据库

找回被create or replace覆盖的PL/SQL对象

2012-05-27 14:30 344 查看
参考网址:http://www.oracledatabase12g.com/

在开发的过程中,可能由于某些程序员执行了create or replace方法,覆盖了之前的同名的PL/SQL对象或者是视图等。

这里需要使用到Oracle的新版本提供的闪回的功能-FLASHBACK QUERY.

1、查询当前的SCN

SELECT Dbms_Flashback.Get_System_Change_Number, Current_Scn FROM V$database




2、查询系统中最小的SCN号(当前系统支持的)

SELECT min(SCN) FROM sys.Smon_Scn_Time




3、SCN和TIMESTAMP之间的相互转换:

SELECT Timestamp_To_Scn(SYSDATE - 1) SCN,
To_Char(Scn_To_Timestamp(790000), 'yyyy-mm-dd hh:mi:ss') TIMESTAMP
FROM Dual




4、存储过程的闪回操作:需要使用ALL_SOURCE表,并且在系统用户下(SYS)

建立过程:

CREATE OR REPLACE PROCEDURE Test_Create_Or_Replace IS
BEGIN
NULL;
NULL;
NULL;
NULL;
NULL;
NULL;
NULL;
NULL;
NULL;
END Test_Create_Or_Replace;


当前的SCN:



查询当前SCN对应的ALL_SOURCE中的Test_Create_Or_Replace的信息:

SELECT *
FROM All_Source AS OF Scn 927331
WHERE Owner = 'SCOTT'
AND NAME = 'TEST_CREATE_OR_REPLACE';




将过程进行修改:

CREATE OR REPLACE PROCEDURE Test_Create_Or_Replace IS
BEGIN
NULL;
END Test_Create_Or_Replace;




--查询最新的信息:



所以可用使用:

SELECT *
FROM All_Source AS OF Scn 927331
WHERE Owner = 'SCOTT'
AND NAME = 'TEST_CREATE_OR_REPLACE';


查询该SCN点的数据.

同理可得,可以对视图进行闪回操作,可以找出误删除的视图信息。需要使用ALL_VIEWS进行闪回操作

也可以使用:

SELECT *
FROM All_Source AS OF Timestamp   scn_to_timestamp(927331);


进行闪回操作。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: