DML操作 DDL觸發器

來源:互聯網
上載者:User

DML操作 DDL觸發器

今天應用方告訴我,一個DML操作導致資料庫報錯,說“ORA-234567,不允許開發執行DDL操作,請聯絡DBA”

為了安全,DBA在各個庫上建立了DDL觸發器,不允許開發人員執行DDL。

但是開發人員給我反饋,他們僅僅只是執行了普通的INSERT操作,沒有任何DDL操作。

第一個感覺是,可能DML操作導致資料庫遞迴了執行了某些DDL操作。

還好這個錯誤可以重現,經過10046跟蹤。發現由於在執行INSERT過程中,資料庫的資料表空間不足,導致Oracle遞迴了進行清空資源回收筒的操作,這個操作屬於DDL。因此就出現了開頭說的問題。

當然在一個監控良好的生產環境並不會出現這個問題,在資料表空間不夠的時候,應該結合監控系統第一時間警示出來。

但是經過測試發現,已經刪除的表的空間會計算進入資料表空間剩餘空間

如果資源回收筒開啟的話,即使系統看上去還有幾十G的剩餘,但是可能這些空間都是被刪除的表的空間,需要清空資源回收筒才能使用。

如果系統裡存在DDL TRIGGER,那麼就可能會導致,明明系統裡還有大量的可用空間,但是INSERT卻報錯“ORA-234567,不允許開發執行DDL操作,請聯絡DBA”

開不開資源回收筒是個問題。

Oracle DML流程

PL/SQL“ ORA-14551: 無法在查詢中執行 DML 操作”解決

MySQL常用DDL、DML、DCL語言整理(附範例)

Oracle基本事務和ForAll執行批量DML練習

Oracle DML語句(insert,update,delete) 復原開銷估算

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.