|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
下面我将描述五个不使用MySQL的响亮理由。毛病|办理
ORA-04098毛病办理办法
数据库版本:8.1.5
平台:SOLARIS5.7
背景:
用户创建了一个TRIGGER:
createorreplacetriggerddl_deny
beforecreateoralterordropondatabase
declare
begin
insertintoddl_logsvalues(ora_dict_obj_owner,ora_dict_obj_name,sysdate);
exception
whenno_data_foundthen
null;
end;
目标也许就是纪录下一切的DDL操纵,但TRIGGER创建有毛病,发明:
11:30:08system@ORA250>altertriggerddl_denydisable;
altertriggerddl_denydisable
*
ERROR位于第1行:
ORA-04098:触发器DDL_DENY有效且未经由过程从头考证
11:31:45system@ORA250>droptriggerddl_deny;
droptriggerddl_deny
*
ERROR位于第1行:
ORA-04098:触发器DDL_DENY有效且未经由过程从头考证
此时触发器不克不及编译已往,也不克不及删除,由于触发器自己内里界说了DDL操纵的触发,发生ORA-04098:触发器DDL_DENY有效且未经由过程从头考证。
办理办法:
1、起首检察用户的权限是不是准确:
selectowner,object_name,object_type,statusfromdba_objectswhereobject_name=<TRIGGER_NAME>;
12:42:38system@ORA250>selectowner,object_name,object_type,statusfromdba_o
bjectswhereobject_name=DDL_DENY;
OWNEROBJECT_NAMEOBJECT_TYPESTATUS
--------------------------------------------------
SYSTEMDDL_DENYTRIGGERINVALID
发明用户权限没有成绩。
2、接着设置诊断事务altersessionsetevents=4098tracenameerrorstacklevel3;,检察trace文件的内容以下:
Dumpfile/db1/app/oracle/admin/ora250/udump/ora250_ora_6834.trc
Oracle8iEnterpriseEditionRelease8.1.5.0.0-Production
WiththePartitioningandJavaoptions
PL/SQLRelease8.1.5.0.0-Production
ORACLE_HOME=/db1/app/oracle/product/8.1.5
Systemname:SunOS
Nodename:db250
Release:5.7
Version:Generic_106541-08
Machine:sun4u
Instancename:ora250
Redothreadmountedbythisinstance:1
Oracleprocessnumber:17
Unixprocesspid:6834,image:oracle@db250(TNSV1-V3)
***SESSIONID30.829)2004.11.17.20.53.38.000
***2004.11.17.20.53.38.000
ksedmp:internalorfatalerror
ORA-04098:触发器DDL_DENY有效且未经由过程从头考证
CurrentSQLstatementforthissession:
altertriggerddl_denydisable
-----CallStackTrace-----
callingcallentryargumentvaluesinhex
locationtypepoint(?meansdubiousvalue)
----------------------------------------------------------------------------
ksedmp()+160CALLksedst()+0508?1?FFBEB31C?
FFBEADC0?FFBEADA4?0?
ksddoa()+248PTR_CALL000000003?0?0?16594FC?
C0000025?0?
ksdpcg()+212CALLksddoa()+016EB0AC?16E4C24?3?
24939C?16EB0AC?16EB090?
ksdpec()+236CALLksdpcg()+01002?FFBEB8E4?16E4C24?
0?0?0?
ksfpec()+136CALLksdpec()+01002?165A800?165A800?
7F3?1659995?16594FC?
kgesev()+100PTR_CALL000000001659494?1002?262F80?
1002?1?0?
ksesec1()+48CALLkgesev()+01659494?16E8CA4?1002?
1?FFBEBA60?1?
kkttrex()+2112CALLksesec1()+01002?1?8?8E859D26?2?
2?
kktexeevt()+616CALLkkttrex()+08E996A20?8E973B48?
FFBEBAE4?1659000?
8E859D6C?165E800?.....
发明是外部严峻毛病,其他看不出太多毛病信息,因而想到接纳隐含参数_system_trigger_enabled=false,在数据库启动的时分让一切触发器不起感化,然后删除。数据库8.1.5的提醒没这个参数,因而查询了一下:
14:28:32system@ORA815>selectksppinmfromx$ksppiwheresubstr(ksppinm,1,1)=_
andksppinmlike%tri%orderbyksppinm;
KSPPINM
-------------------------------------------------------------------------------
_cleanup_rollback_entries
_distributed_lock_timeout
_distributed_recovery_connection_hold_time
_number_cached_attributes
_system_trig_enabled
发明8.1.5版本的参数是_system_trig_enabled,因而让用户在初始化参数文件中设置此参数为false,然后重启数据库,删除trigger,删除乐成。
至此成绩办理。
每个人都在使用它。MySQL是开源LAMP组合的一个标准组件:Linux、Apache、MySQL和Perl/PHP。根据Evans的调查,LAMP组合的迅速推广很大程度上代表着MySQL的被广泛接受。 |
|