Oracle12c中可插拔數據庫(PDBs)上的多宿主數據庫觸發器數據庫
隨着多宿主選項的引入,數據庫事件觸發器能夠在CDB和PDB範圍內建立。安全
1. 觸發器範圍服務器
爲了在CDB中建立數據庫事件觸發器,須要以通用用戶登陸到數據庫,且該用戶須要被授予ADMINISTER DATABASETRIGGER系統權限。事件
CONN sys@cdb1 AS SYSDBA事務
CREATE OR REPLACE TRIGGER cdb1_aftr_strtup_trgtest
AFTER STARTUP ON DATABASE登錄
BEGIN配置
--觸發器操做代碼權限
NULL;數據
END;
/
爲了在PDB中建立一個數據庫觸發器,須要以通用用戶或本地用戶鏈接該數據庫,且該用戶須要被授予該數據庫範圍內的ADMINISTER DATABASETRIGGER系統權限。ON DATABASE 和ON PLUGGABLE DATABASE子句在PDB內做用是同樣的,但有些事件要求顯式的ON PLUGGABLE DATABASE子句。
CONN sys@pdb1 AS SYSDBA
CREATE OR REPLACE TRIGGER pdb1_aftr_strtup_trg
AFTER STARTUP ON PLUGGABLE DATABASE
BEGIN
-- 觸發器操做代碼
NULL;
END;
/
CREATE OR REPLACE TRIGGER pdb1_aftr_strtup_trg
AFTER STARTUP ON DATABASE
BEGIN
-- 觸發器操做代碼
NULL;
END;
/
有些事件觸發器也能夠用於CDB和PDB的模式層面。功能並未因多宿主選項而改變。
CONN sys@cdb1 AS SYSDBA
CREATE OR REPLACE TRIGGER cdb1_aftr_lgn_trg
AFTER LOGON ON test.SCHEMA
BEGIN
-- 觸發器操做代碼
NULL;
END;
/
CONN sys@pdb1 AS SYSDBA
CREATE OR REPLACE TRIGGER pdb1_aftr_lgn_trg
AFTER LOGON ON test.SCHEMA
BEGIN
-- 觸發器操做代碼
NULL;
END;
/
2. 可用事件
1) 下列數據庫時間都可用於CDB和PDB層面。
ü AFTER STARTUP :CDB或PDB打開後觸發器觸發。
ü BEFORE SHUTDOWN :CDB或PDB關閉前觸發器觸發。
ü AFTER SERVERERROR。可用於PDB當服務器錯誤信息被記錄且觸發錯誤觸發器安全時觸發器將被觸發,可用於數據庫或模式層面。
ü AFTER LOGON :當客戶端登陸到CDB或PDB時觸發器觸發,可用於數據庫或模式層面。
ü BEFORE LOGOFF:客戶端退出CDB或PDB時觸發,可用於數據庫或模式層面。
ü AFTER SUSPEND :當服務器錯誤引發事務暫停時觸發器觸發,可用於數據庫或模式層面。
ü BEFORE SET CONTAINER:SET CONTAINER命令執行前觸發器觸發,可用於數據庫或模式層面。
ü AFTER SET CONTAINER:SET CONTAINER命令執行後觸發器觸發,可用於數據庫或模式層面。
2) 下列數據庫事件僅用於CDB層面。
ü AFTER DB_ROLE_CHANGE:在DG配置環境中,當數據庫角色從主庫切換爲備庫或從備庫切換爲主庫時觸發。
3) 下列數據庫事件只能用於PDB層面,且要求顯式的ON PLUGGABLEDATABASE子句,使用ON DATABASE子句會致使報錯。
ü AFTER CLONE :克隆操做完成後,觸發器就在新PDB中觸發,且隨後該觸發器被刪除。若是觸發器失敗,克隆操做也會失敗。
ü BEFORE UNPLUG :在去插拔操做前,觸發器在PDB中觸發,且隨後該觸發器被刪除。若是觸發器失敗,去插拔操做也將失敗。