首页 > 数据库 > Oracle > [20210104]禁用或者删除触发器2.txt
[20210104]禁用或者删除触发器2.txt
--//链接http://www.itpub.net/thread-2140367-1-1.html的问题。
用sys用户 as sysdba登录后, 禁用或者删除触发器的时候卡死。 卡死的同时其他用户还不能登录,断开sys进程后登录正常。
请问下这个logon类型的触发器,怎么能删掉它或者让它失效。
--//我记忆里以前也有用户遇到类似问题,登录执行脚本时间太长,如何禁用呢?ZALBB给出一个方法:
1 alter system set "_system_trig_enabled"=false scope=spfile;
2 shutdown immediate;
3 startup;
4 drop trigger xxx.
5 alter system reset "_system_trig_enabled";
--//介绍的方法要重启数据库,我看了一些修改_system_trig_enabled不需要重启,测试看看。
1.环境:
SYS@book> @ver1
PORT_STRING VERSION BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
SYS@book> @ hide _system_trig_enabled
NAME DESCRIPTION DEFAULT_VALUE SESSION_VALUE SYSTEM_VALUE ISSES ISSYS_MOD
-------------------- --------------------------- ------------- ------------- ------------ ----- ---------
_system_trig_enabled are system triggers enabled TRUE TRUE TRUE FALSE IMMEDIATE
CREATE OR REPLACE TRIGGER this_is_a_test
AFTER LOGON ON DATABASE
BEGIN
sys.DBMS_LOCK.sleep (10);
end;
/
--//这样要等10秒才能登录数据库。
$ time sqlplus -s -l scott/book <<< quit
real 0m10.071s
user 0m0.023s
sys 0m0.011s
2.继续测试:
--//只要有会话登录具有dba权限的可以修改spfile文件。
SCOTT@book> alter trigger sys.this_is_a_test disable;
alter trigger sys.this_is_a_test disable
*
ERROR at line 1:
ORA-01031: insufficient privileges
SCOTT@book> alter system set "_system_trig_enabled"=false scope=memory;
System altered.
$ time sqlplus -s -l scott/book <<< quit
real 0m0.069s
user 0m0.017s
sys 0m0.017s
--//OK,这样已经不需要等待10秒。再以sys用户登录,关闭或者disable该触发器。
SCOTT@book> alter system set "_system_trig_enabled"=true scope=memory;
System altered.
3.问题是如果没有任何用户登录的情况下呢?
或者登录的用户权限限制无法修改spfile文件呢?如何操作呢?
--//通过bbed修改是否可行呢?因为这样可能要刷新共享池或者数据缓存,估计也不行。
--//另外写一篇测试看看。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/267265/viewspace-2747411/,如需转载,请注明出处,否则将追究法律责任。