【问题处理】以SYSOPER权限登录数据库触发ORA-01075错误

遭遇因Oracle Bug导致以sysoper权限无法登陆数据库的故障。将问题现象和处理方法记录在此,供参考。

1.问题现象
1)sysdba权限可以正常登录
ora10g@asdlabdb01 /home/oracle$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.3.0 - Production on Sun Dec 19 21:05:25 2010

Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP and Data Mining Scoring Engine options

sys@ora10g>

2)sysoper权限无法登录
(1)使用sqlplus尝试登陆报错
ora10g@asdlabdb01 /home/oracle$ sqlplus / as sysoper

SQL*Plus: Release 10.2.0.3.0 - Production on Sun Dec 19 21:05:35 2010

Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.

ERROR:
ORA-01075: you are currently logged on


Enter user-name:

(2)使用connect尝试连接报错
sys@ora10g> conn / as sysoper
ERROR:
ORA-01075: you are currently logged on


Warning: You are no longer connected to ORACLE.
sys@ora10g>

这里莫名其妙的抛出了“ORA-01075”错误,明明是第一次以sysoper权限登录,为什么报出这个错误。

2.问题原因
这是由于系统中存在logon类型的触发器,并且该触发器没有对sysoper进行特殊处理导致的。问题本身是Oracle的一个Bug,该Bug在MOS中有记录,请参考“Bug 3826570: GETTING ORA-01075: YOU ARE CURRENTLY LOGGED ON WHILE CONNECTING AS SYSOPER”。

获取数据库中logon触发类型的trigger(注意查询条件中的“空格”)。
sys@ora10g> select * from dba_triggers where TRIGGERING_EVENT='LOGON ';

OWNER                          TRIGGER_NAME                   TRIGGER_TYPE
------------------------------ ------------------------------ ----------------
TRIGGERING_EVENT
-----------------------------------------------------------------------------------------------------------------------------------
TABLE_OWNER                    BASE_OBJECT_TYPE TABLE_NAME                     COLUMN_NAME
------------------------------ ---------------- ------------------------------ ------------------------------
REFERENCING_NAMES
--------------------------------------------------------------------------------------------------------------------------------
WHEN_CLAUSE
-----------------------------------------------------------------------------------------------------------------------------------
STATUS
--------
DESCRIPTION
-----------------------------------------------------------------------------------------------------------------------------------
ACTION_TYPE
-----------
TRIGGER_BODY
-----------------------------------------------------------------------------------------------------------------------------------
SEC                            USER_CONNECT_AUDIT_TRIGGER     AFTER EVENT
LOGON
SYS                            DATABASE
REFERENCING NEW AS NEW OLD AS OLD

ENABLED
user_connect_audit_trigger
   after logon
   on database
PL/SQL
declare
   v_connection_ip varchar2 (20);
   v_host  varchar2 (20);
begin
   select sys_context ('userenv', 'ip_address') into v_connection_ip from dual;
   select sys_context ('userenv', 'host') into v_host from dual;
   insert into audit_user_connect
     values   (user,
               sys_context ('userenv', 'sessionid'),
               v_host,
               v_connection_ip,
               sysdate,
               to_char (sysdate, 'hh24:mi:ss'));
   commit;
end;

该触发器是我用于审计用户登录而编写的。没想到正是因为这个触发器触发了Oracle Bug。小心,Bug无处不在。

3.问题处理
有两种处理方法,最简单的处理方法是disable或删除掉触发器,另外一种方法是在触发器中对sysoper单独处理。
处理方法如下:
(1)停用logon类型的触发器
sys@ora10g> alter trigger SEC.USER_CONNECT_AUDIT_TRIGGER disable;

Trigger altered.

(2)重新尝试连接成功
使用SQL*Plus尝试连接成功。
ora10g@asdlabdb01 /home/oracle$ sqlplus / as sysoper

SQL*Plus: Release 10.2.0.3.0 - Production on Sun Dec 19 21:21:43 2010

Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP and Data Mining Scoring Engine options

public@ora10g>

使用connect尝试连接成功。
sys@ora10g> conn / as sysoper
Connected.
public@ora10g>

问题处理完毕。

4.小结
Oracle也在不断的进步之中,因此遍布到各个角落的Bug也是偶有遇到。不一定什么时候便可以和Oracle的Bug邂逅。我们能做到沉着并冷静的面对就好。

Good luck.

secooler
10.12.19

-- The End --

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

转载于:http://blog.itpub.net/519536/viewspace-682188/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值