DML操作 DDL觸發器

wei-xh發表於2014-06-25
今天應用方告訴我,一個DML操作導致資料庫報錯,說“ORA-234567,不允許開發執行DDL操作,請聯絡DBA”
為了安全,DBA在各個庫上建立了DDL觸發器,不允許開發人員執行DDL。
但是開發人員給我反饋,他們僅僅只是執行了普通的INSERT操作,沒有任何DDL操作。
第一個感覺是,可能DML操作導致資料庫遞迴了執行了某些DDL操作。
還好這個錯誤可以重現,經過10046跟蹤。發現由於在執行INSERT過程中,資料庫的表空間不足,導致ORACLE遞迴了進行清空回收站的操作,這個操作屬於DDL。因此就出現了開頭說的問題。
當然在一個監控良好的生產環境並不會出現這個問題,在表空間不夠的時候,應該結合監控系統第一時間報警出來。
但是經過測試發現,已經刪除的表的空間會計算進入表空間剩餘空間
如果回收站開啟的話,即使系統看上去還有幾十G的剩餘,但是可能這些空間都是被刪除的表的空間,需要清空回收站才能使用。
如果系統裡存在DDL TRIGGER,那麼就可能會導致,明明系統裡還有大量的可用空間,但是INSERT卻報錯“ORA-234567,不允許開發執行DDL操作,請聯絡DBA”
開不開回收站是個問題。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22034023/viewspace-1193542/,如需轉載,請註明出處,否則將追究法律責任。

相關文章