Oracle会覆盖安装吗,oracle 恢复被覆盖的存储过程

本文详细介绍了在数据库中遇到存储过程被意外覆盖时的紧急恢复流程,包括登录sys用户、创建临时表筛选存储过程并逐行还原权限。通过创建临时表查找最近600秒前的'SP_DD'存储过程,然后逐一执行赋权操作,确保快速解决问题。
摘要由CSDN通过智能技术生成

--很多时候,存储过程一不小心就被覆盖掉了。很焦急的我们,无手可入,不知道如何恢复,google,百度,问同事啊,都没有办法解决。

这里介绍一下恢复的过程,2个步骤就搞定。

--登录到sys用户下,创建临时表(600表示600秒之前的,最后一个存储过程)

sql> create table ML_TEST_PROTEMP

2 as

3 select * from all_source as of timestamp (systimestamp -interval'600'second)

4 where TYPE = 'PROCEDURE' And owner = 'MOSS_V4'

5 And Name = 'SP_DD' ;

Table created

--查看被覆盖的存储过程

sql> select text from ML_TEST_PROTEMP

2 where name like upper('%sp_dd%') and owner ='MOSS_V4'

3 order by line;

TEXT

--------------------------------------------------------------------------------

PROCEDURE sp_dd(

i_username1 VARCHAR2,i_top_username VARCHAR2 DEFAULT NULL

)

AS

BEGIN

EXECUTE IMMEDIATE 'ALTER SESSION SET current_schema='||i_top_username;

FOR v_cur IN (SELECT * from all_tables WHERE owner=i_top_username )

LOOP

BEGIN

EXECUTE IMMEDIATE 'GRANT ALL ON ' || i_top_username||'.'||v_cur.table_na

EXCEPTION

WHEN OTHERS THEN

k_log.sp_error('赋权异常:'||v_cur.table_name);

RAISE;

END;

END LOOP;

k_log.sp_error('赋权成功');

TEXT

--------------------------------------------------------------------------------

EXCEPTION

WHEN OTHERS THEN

k_log.sp_error('赋权异常');

RAISE;

END sp_dd;

25 rows selected

sql>

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值