ITPub博客

首页 > 数据库 > Oracle > 修改SYS的权限后

修改SYS的权限后

原创 Oracle 作者:echocai 时间:2007-02-24 13:43:34 0 删除 编辑
今天用SYS登陆PL/SQL后,想查看一下trigger里面的内容,结果不断跳出非SYS用户的trigger不可获得的提示,我按enter键N次之后终于进入,但是非SYS用户的trigger什么都看不见.我一气之下用SYS用户登陆OEM给SYS自己赋了select any trigger的权限,顺便把其它的一些小权限及它们的管理性都赋给了SYS,当时感叹既然SYS能随便给自己赋权限,那当时为什么不一起附上啊,真是浊啊.好了,问题由此开始了……[@more@]

我重新用SYS登录PL/SQL,查看trigger和procedure,系统提示:
ora-00604:递归SQL层1出现错误 ;
ora-06553:pls-213:standard包不可访问
里面所有对象显示都是invalid。

当时并没有想到是因为修改了SYS的权限引起的,于是换其他用户登录,结果连登录都不能,报同样的错误。隐隐感觉不妙,因为明天同事都来上班了,这个虽然是开发库,但是也会影响到很多人工作的,最主要的是自己就臭大了!

上网搜索,看了很多个类似情况,但是yangtingkun说的最为详细,于是按照他的三步:
a1> alter package standard compile;

a2> alter package dbms_standard compile;

a3> @/opt/oracle/product/9.2.0/rdbms/admin/utlrp.sql

结果第一步就宣告失败:ERROR 位于第 1 行:
ORA-00604: 递归 SQL 层 1 出现错误
ORA-06553: PLS-213: STANDARD 包不可访问。

迫不得已只好采用通用的模式建立数据字典:
b1> @/opt/oracle/product/9.2.0/rdbms/admin/catalog.sql
b2> @/opt/oracle/product/9.2.0/rdbms/admin/catproc.sql
b3> @/opt/oracle/product/9.2.0/rdbms/admin/dbmsutil.sql

开始不用是因为这个风险高,容易出错,但是现在已经没有退路了,再加上前面几天加班赶出一个测试库,开发库实在瘫掉了,就先用测试库顶几天,顺着这把火把开发库也容灾调整了。

我开始的时候把这些文件里面的东西放到PL/SQL的SQL Window里面跑,结果提示ORA-00604和ORA-06553错误,看来PL/SQL似乎利用了oracle里面的一些通用的包来封装了一下,到底不像SQLPLUS那么万能,于是我用SQLPLUS模式登录运行b1和b2。成功了,非SYS用户可以正常登录调试,但是报了很多的错误,让我没有欲望再去执行b3,而系统里面留下的是3000多个invalid对象肯定是要消除的。

到这里其实我已经很开心了,不用重建意味着里面400G的开发数据不用重新导入了,要知道那还得从几个T的正式库拉过来,拉的不好把正式库搞死了,那就飙大了。我想到了重新回到a方案,因为已经可以编译了。

问题本来可以结束的了,然而在a1:
SQL>alter package standard compile;
还没有结束的时候,我不知情的按了ctl+c,使得该命令退出到
SQL>
然后我马不停蹄的执行了a2,好了,问题由此而来,这两个编译相互锁住了彼此的对象只得停滞不前,在PL/SQL里面无论干什么都会慢的要死,而且过几秒就会抛出:
ora-04020:deadlock detected while trying to lock object sys.cdc_alter_ctable_before

我看到死锁,就去把运行这个进程的SESSION杀掉,然而问题并没有解决,死锁依旧;无奈之下我shutdown abort&&startup重启了数据库,以为数据库重启了死锁肯定没有了,然而我再次高估自己了;我又试着重新运行a方案和b方案,现在连这两个都无法执行了,抛出ora-04020错误。

我只好去查看sys.cdc_alter_ctable_before到底是个什么东东,发现原来是个trigger,尝试让它失效:ALTER TRIGGER sys.cdc_alter_ctable_before DISABLE;
然后运行其他编译程序,竟然成功了!

再次运行a方案,这次死活都等他自己完成了,十分钟后一切回复正常,3000多个invalid对象只剩150个本身就有问题的对象了。但是害怕更改系统的trigger会引起连锁问题,再让它生效:
ALTER TRIGGER sys.cdc_alter_ctable_before ENABLE;

一切OK了!汗到天亮啊!!

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/8796021/viewspace-900260/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 低调
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2009-12-07

  • 博文量
    4
  • 访问量
    7632