国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > 綜合 > 正文

ORA-04098錯誤解決方法

2024-07-21 02:41:03
字體:
供稿:網(wǎng)友

  
ORA-04098錯誤解決方法

數(shù)據(jù)庫版本:8.1.5
平臺:SOLARIS 5.7

 

背景:

用戶建立了一個TRIGGER:
create or replace trigger ddl_deny
before create or alter or drop on database
declare
begin
insert into ddl_logs values(ora_dict_obj_owner,ora_dict_obj_name,sysdate);
exception
when no_data_found then
null;
end;
目的大概就是記錄下所有的DDL操作,但TRIGGER建立有錯誤,發(fā)現(xiàn):

11:30:08 system@ORA250>alter trigger ddl_deny disable;
alter trigger ddl_deny disable
*
ERROR 位于第 1 行:
ORA-04098: 觸發(fā)器 'DDL_DENY' 無效且未通過重新驗證
11:31:45 system@ORA250>drop trigger ddl_deny;
drop trigger ddl_deny
*
ERROR 位于第 1 行:
ORA-04098: 觸發(fā)器 'DDL_DENY' 無效且未通過重新驗證

 

此時觸發(fā)器不能編譯過去,也不能刪除了,因為觸發(fā)器本身里面定義了DDL操作的觸發(fā),產(chǎn)生ORA-04098: 觸發(fā)器 'DDL_DENY' 無效且未通過重新驗證。

 

解決方法:

1、首先查看用戶的權(quán)限是否正確:

select owner, object_name, object_type, status from dba_objects where object_name = '<TRIGGER_NAME>';

12:42:38 system@ORA250>select owner, object_name, object_type, status from dba_o
bjects where object_name='DDL_DENY';
OWNER          OBJECT_NAME   OBJECT_TYPE STATUS
------------------------------------ --------------
SYSTEM           DDL_DENY     TRIGGER INVALID

發(fā)現(xiàn)用戶權(quán)限沒有問題。

2、接著設(shè)置診斷事件alter session set events='4098 trace name errorstack level 3';,查看trace文件的內(nèi)容如下:

Dump file /db1/app/Oracle/admin/ora250/udump/ora250_ora_6834.trc
Oracle8i EnterPRise Edition Release 8.1.5.0.0 - ProdUCtion
With the Partitioning and java options
PL/SQL Release 8.1.5.0.0 - Production
ORACLE_HOME = /db1/app/oracle/product/8.1.5
System name: SunOS
Node name: db250
Release: 5.7
Version: Generic_106541-08
Machine: sun4u
Instance name: ora250
Redo thread mounted by this instance: 1
Oracle process number: 17
Unix process pid: 6834, image: oracle@db250 (TNS V1-V3)
*** SESSION ID30.829) 2004.11.17.20.53.38.000
*** 2004.11.17.20.53.38.000
ksedmp: internal or fatal error
ORA-04098: 觸發(fā)器'DDL_DENY' 無效且未通過重新驗證
Current SQL statement for this session:
alter trigger ddl_deny disable
----- Call Stack Trace -----
calling call entry argument values in hex
location type point (? means dubious value)
-------------------- -------- -------------------- ----------------------------
ksedmp()+160 CALL ksedst()+0 508 ? 1 ? FFBEB31C ?
FFBEADC0 ? FFBEADA4 ? 0 ?
ksddoa()+248 PTR_CALL 00000000 3 ? 0 ? 0 ? 16594FC ?
C0000025 ? 0 ?
ksdpcg()+212 CALL ksddoa()+0 16EB0AC ? 16E4C24 ? 3 ?
24939C ? 16EB0AC ? 16EB090 ?
ksdpec()+236 CALL ksdpcg()+0 1002 ? FFBEB8E4 ? 16E4C24 ?
0 ? 0 ? 0 ?
ksfpec()+136 CALL ksdpec()+0 1002 ? 165A800 ? 165A800 ?
7F3 ? 1659995 ? 16594FC ?
kgesev()+100 PTR_CALL 00000000 1659494 ? 1002 ? 262F80 ?
1002 ? 1 ? 0 ?
ksesec1()+48 CALL kgesev()+0 1659494 ? 16E8CA4 ? 1002 ?
1 ? FFBEBA60 ? 1 ?
kkttrex()+2112 CALL ksesec1()+0 1002 ? 1 ? 8 ? 8E859D26 ? 2 ?
2 ?
kktexeevt()+616 CALL kkttrex()+0 8E996A20 ? 8E973B48 ?
FFBEBAE4 ? 1659000 ?
8E859D6C ? 165E800 ?.....

發(fā)現(xiàn)是內(nèi)部嚴(yán)重錯誤,其他看不出太多錯誤信息,于是想到采用隱含參數(shù)_system_trigger_enabled=false,在數(shù)據(jù)庫啟動的時候讓所有觸發(fā)器不起作用,然后刪除。
數(shù)據(jù)庫8.1.5的提示沒這個參數(shù),于是查詢了一下:

14:28:32 system@ORA815>select ksppinm from x$ksppi where substr(ksppinm,1,1)='_'
and ksppinm like '%tri%' order by ksppinm;
KSPPINM
-------------------------------------------------------------------------------
_cleanup_rollback_entries
_distributed_lock_timeout
_distributed_recovery_connection_hold_time
_number_cached_attributes
_system_trig_enabled

發(fā)現(xiàn)8.1.5版本的參數(shù)是_system_trig_enabled,于是讓用戶在初始化參數(shù)文件中設(shè)置此參數(shù)為false,然后重啟數(shù)據(jù)庫,刪除trigger,刪除成功。

至此問題解決。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 孟连| 葫芦岛市| 乐业县| 邹城市| 建昌县| 财经| 溆浦县| 吴江市| 泰州市| 皋兰县| 赣榆县| 涟水县| 馆陶县| 崇明县| 东港市| 司法| 盐津县| 武平县| 沁水县| 洞头县| 竹北市| 东乡| 会东县| 华坪县| 明水县| 花莲县| 汝阳县| 清新县| 石泉县| 青铜峡市| 大悟县| 洪湖市| 醴陵市| 马山县| 简阳市| 靖安县| 精河县| 石家庄市| 绥棱县| 射阳县| 湘乡市|